PHP与C++的不同
由于工作需要,需要学习一下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()
?>
这就是动态语言的好处。
以上只是简单的几点总结,还是感到自己的水平很有限,略失落。
随机推荐
- Oracle索引状态查询&索引重建
--检查损坏索引 SELECT status, COUNT(*) FROM dba_indexes GROUP BY status UNION SELECT status, COUNT(*) ...
- hibernate分页查询的各种方法
统计总数: public Integer countAll1() { String hql = "select count(*) from News as news"; List ...
- poj 2046 Gap(bfs+hash)
Description Let's play a card game called Gap. You have cards labeled with two-digit numbers. The fi ...
- 企业生产环境中linux系统分区的几种方案
方案1:针对网站集群架构中的某个节点服务器分区 该服务器上的数据有多份(其他节点也有)且数据不太重要,建议分区方案如下: /boot: 200MB swap: 物理内存的1.5倍,当内存大于或等于8G ...
- 升级IOS9,提示滑动升级,卡在password锁屏界面,无反应了
注:升级之前一定要把锁屏password取消掉 若遇上述问题.可通过进入DFU 模式解决 进入DFU具体步骤.(进入成功后,屏幕为全黑) 注:在进入DFU操作时务必与电脑连接好数据线. 1.按住pow ...
- WebView使用
WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?xml version=& ...
- TTB 基本
中文名 ,线程构建模块 外文名 Thread Building Blocks 缩 写 TBB 开 发 intel 目录 1线程构建模块 2黑体亮温 3斜交载重轮胎 4串联球轴承 1 ...
- Web App 前端构建(纯净版)
asp.net 母版页: <!DOCTYPE html> <html> <head> <meta charset="utf-8" name ...
- await与async的简单了解
异步方法的返回类型可以为Task.Task.void.方法不能声明ref或out参数. 无法捕捉返回类型为void的异步方法引发的异常,如果返回Task或Task的异步方法中出现异常,则在任务等待时将 ...
- Android测试框架1(非原创)
1.继承AndroidTestCase :public class JunitTest3 extends AndroidTestCase {} 2.在AndroidManifest.xml清单文件中添 ...