由于工作需要,需要学习一下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. zoj3802:easy 2048 again(状压dp)

    zoj月赛的题目,非常不错的一个状压dp.. 题目大意是一个一维的2048游戏 只要有相邻的相同就会合并,合并之后会有奖励分数,总共n个,每个都可以取或者不取 问最终得到的最大值 数据范围n<= ...

  2. 我所理解的设计模式(C++实现)——状态模式(State Pattern)

    概述: 看看我们平时用的开关,同样一个开关他有2种状态:开和关,当她处于不同的状态的时候她的行为是不一样的,比如当她是开着的时候,你按她一下,她就变成了关闭状态,她是关着的时候按她一下,她就变成了开着 ...

  3. 合并多个excel工作簿

    合并多个Excel工作簿,会出现电话号码以科学计数法显示,如果想要以字符串方式处理,要按如下完整代码 public static void mergeWorkBook() throws Excepti ...

  4. (转载)XML Tutorial for iOS: How To Choose The Best XML Parser for Your iPhone Project

    There are a lot of options when it comes to parsing XML on the iPhone. The iPhone SDK comes with two ...

  5. AndroidAnnotations框架配置

    如今Android Studio的普及,Android开发基本要舍弃Eclipse了,最近使用AndroidAnnotations 注解框架的时候,找了些资料慢慢整出来了,在这给大家简单分享一下: 首 ...

  6. 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】

    1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...

  7. 记一道css面试题 : 三栏布局两边宽度固定,中间宽度自适应,并且布局随屏幕大小改变。

    前几天面试时有道css题没做出来,回来好好学习一番后把其记录下来. 题目是这样的:左中右三栏布局,左右两栏宽度固定,左右两栏的宽度为200像素,中间栏宽度自适应.当屏幕小于600px时,3栏会分别占用 ...

  8. Phalcon自动加载(PHP自动加载)

    自动加载(phalcon\Loader) 转载请注明来源 一.php文件引入 通过 include() 或 require() 函数,可以在PHP程序执行之前在该文件中插入一个文件的内容. 区别:处理 ...

  9. Java学习笔记--Swing

    1.创建框架 AWT中Frame类用来描述顶层窗口,在Swing中,这个类的名为JFrame,它从Frame类扩展. JFrame是少数几个在Swing不用绘制在画布上的组件之一,因此,它的修饰部件( ...

  10. Hibernate整合Struts2时报错

    今天在整合Hibernate和Struts2的时候遇到一个问题 总是出现各种异常,经过仔细检查,代码本身并没有问题, ----------------------------------------- ...