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()
?>
这就是动态语言的好处。
以上只是简单的几点总结,还是感到自己的水平很有限,略失落。
随机推荐
- sizeof(long)
16位系统:long是4字节,int是2字节32位系统:long是4字节,int是4字节64位系统:long是8字节,int是4字节
- JAVA并发实现四(守护线程和线程阻塞)
守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台 ...
- shell脚本一条命令直接发送http请求(xjl456852原创)
我们知道nc命令是一个网络工具.可以连接tcp/udp.也能模拟发送http请求. 现在介绍通过shell脚本,一条命令直接发送http请求. 命令如下,可以对下面的地址等信息自行修改: #!/bin ...
- [Redux] Generating Containers with connect() from React Redux (VisibleTodoList)
Learn how to use the that comes with React Redux instead of the hand-rolled implementation from the ...
- Linux目录和权限
1. rmdir -p 用来删除一串目录,是否可以成功删除? rmdir -p 删除一个不存在的目录时是否报错呢?rmdir -p 不能成功删除非空目录,rmdir -p 删除一个不存在的目录 ...
- Javascript基础Function
函数声明与表达式 function someFunc(){ alert("这是一个函数"); } var func=function(){ alert("函数表达式&qu ...
- Gson 简易笔记
#Gson 简易笔记 之前用 fastjson.它连个规矩的文档都没有,而且在github的wiki上写着: gson的g可能是"龟"拼音的缩写,龟速的json库." 各 ...
- 数据库分库分表(sharding)系列(一)拆分实施策略和示例演示
本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...
- SpringMVC中用@ParamVariable传递的参数包含斜杠(/)时,匹配不了报404错误的解决方案
今天做网站[标签]筛选功能时,出现了这么个奇葩的问题. 我是直接通过<a>标签中href来跳转的,url中包含汉字 <a href="/tags/标签A"> ...
- [转]C++学习心得
1.把C++当成一门新的语言学习: 2.看<Thinking In C++>: 3.看<The C++ Programming Language>和<Inside The ...