由于工作需要,需要学习一下PHP,由于3年的C++背景,在刚开始学习PHP的过程中,有些不习惯,经过一段时间的学习,总结了一些PHP与C++的不同。

1.应用场景

在谈两种语言不同的时候,首先需要了解两中语言的主要语言场景。C++与PHP的应用场景有比较大区别,C++作为一门拥有悠久历史的语言,已经应用的场景非常广泛,已经有数不清的项目使用C++。由于阅历有限,目前想起来的C++主要的应用场景有:对性能有要求的服务器,游戏的渲染引擎,一些和硬件打交道的场景(例如和一些电表通信),以及众多的C++遗留(mfc等等)项目。而PHP主要是用在服务器脚本程序,用于web。

2.编译器的解释方式

C++是一门静态语言,需要先进行编译,产出程序才能执行,C++的类型是固定的。而PHP则不同,是一门动态语言,边解释变运行,同时PHP也是弱类型语言,即“变量的类型通常不是由程序员设定的,确切地说,是由 PHP 根据该变量使用的上下文在运行时决定的”。

3.类型转换

对于C++来说,不同类型的联系需要显式的转换,例如使用“流”,直接”string = int + string”是行不通的,同时转换的时候也有严格的检查,例如一个”1ad_>”string转换为int,是会抛出异常的,(string并不是C++的内建类型);而对于PHP,先前的转换可以将”1ad_>”转换为1,因为PHP的字符串转换为integer的原则如下:“该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成“。链接在此:http://cn2.php.net/manual/zh/language.types.type-juggling.php

4.数组的处理

对于C++来说,数组是一个危险的存在(这点和c一样),因为没有越界检查,在声明的时候需要确定数组的类型和长度(这样编译器就确定为其分配多少内存)。而对于PHP来说,数组更像C++中的map,写入的时候若没有对应的键值,会添加此键值,但是若读取的时候没有此键值的话,就会报出错误。

5.赋值

对于C++和PHP来说,变量1=变量2是相同的,都是为变量1重新分配了内存。而对象之间的赋值就不同了,C++两个对象的赋值直接使用”=“,即”operator=()“,例如obj1 = obj2,是将obj2的内容全部拷贝到obj1里面,而PHP直接使用”=“类似于C++的引用赋值,obj1并没有分配内存,只是指向obj2的内容,要完全复制需要使用clone关键字。

另外在接触PHP的实例化的时候,发现PHP示例化对象也很有趣,在手册中有一个实例化的例子:

<?php
$className = 'Foo';
$instance = new $className(); // Foo()
?>

这就是动态语言的好处。

以上只是简单的几点总结,还是感到自己的水平很有限,略失落。

随机推荐

  1. struct2(六) 为表单添加验证

    简介 为表单添加验证 添加校验的方法: 1. first name 不能为null 2. Email address 不能为null 3. age 必须大于18岁 为了在用户提交的时候,能够校验这个表 ...

  2. acdream1412:2-3 trees 组合数dp

    题意: 给出一个标准2-3树的叶子节点(最底层节点)个数 L,求2-3数的形成方案数并取余 分析: 如果有L个叶子枚举 每个 可以使x*2+y*3=L 的 x y 那么在最底层就有  c(x+y,x) ...

  3. poj 2049 Let it Bead(polya模板)

      Description Cannery Row percent of the target audience insists that the bracelets be unique. (Just ...

  4. html5 app图片预加载

    function Laimgload(){} //图片预加载JS Laimgload.prototype.winHeight = function(){ //计算页面高度 var winHeight ...

  5. PHP设计模式笔记四:适配器模式 -- Rango韩老师 http://www.imooc.com/learn/236

    适配器模式 1.适配器模式,可以将截然不同的函数接口封装成统一的API 2.实际应用举例,PHP的数据库操作有mysql.mysqli.pdo三种,可以用适配器模式统一成一致,类似的场景还有cache ...

  6. [Redux] Extracting Container Components (FilterLink)

    Learn how to avoid the boilerplate of passing the props down the intermediate components by introduc ...

  7. WebApi2官网学习记录---批量处理HTTP Message

    原文:Batching Handler for ASP.NET Web API 自定义实现HttpMessageHandler public class BatchHandler : HttpMess ...

  8. PL/SQL语句块提高1+case语句

    set serveroutput on; declare --默认值的bianliang v_a ; -- v_b integer; --用stud.id 的类型 v_id stud.id%type; ...

  9. 定义了重复的system.web.extensions/scripting/scriptResourceHandler怎么办

    今天移转系统,都配置好之后,系统报错说我的web服务下的web.config 定义了重复的 system.web.extensions/scripting/scriptResourceHandler ...

  10. java运算

    (一) 截图: 程序: import javax.swing.JOptionPane; public class Addition { public static void main (String ...