《php何以被戏称为“世界上最好的语言”?请看它与js的对比!》要点:
本文介绍了php何以被戏称为“世界上最好的语言”?请看它与js的对比!,希望对您有用。如果有疑问,可以联系我们。
有位朋友已经自学了几个月的前端知识,js的基本语法掌握的也不错,现在因为项目需要想通过php从后台数据库哀求数据.他总是问我:php难学吗?如果我仅仅需要获取动态数据然后在前端展示,应该从哪里学起?因为要尽快交差,暂时没时间系统学习.
我只好不断的跟他解释:不要把php想的多复杂.既然你只必要php返回数据,那就更简单了:不需分页时,10-20行代码即可搞定;如果有较复杂的逻辑运算,也就是100行左右代码的事.更何况,你是从前端过来的,有了js基础再来学php简直是太容易了.要不然,php何以被广大网友戏称为“世界上最好的语言”?
目前正好国庆假期,我就来简单总结一下php和js之间在语法上的异同:
和js一样,php也是一种弱类型语言,变量的数据类型由上下文决定.
1、不同点有:
● 声明变量时,php使用$代替js中的var关键字.php中虽然也能使用var,但它只能用于定义类里面的公有属性.
● php在声明变量时如果不同时赋值,该变量会被视同未定义而导致程序出错;js里则可以不赋值,其值为undefined.
2、相同点有:
● 变量名都区分大小写.好比,$x和$X就是两个完全不同的变量;
● 都可以使用类似于$x=$y=$z=20的方式同时声明多个变量.
1、基本类型
php的基本类型数据共有4种,分别是字符串、数值、布尔和null,没有js中的undefined.
● 字符串(string)
在js中,字符串类型的数据由一个或多个字符组成,并包含在一对单引号或双引号内.这种定义字符串的办法在php中同样适用.
必要注意的是,js中以反斜杠(\)开头的一些特殊字符(字面量)在php中并没有效果.例如,\n是表示换行:
$val = "欢迎来到\n'职场码上汇'";
echo $val;
但浏览器的实际输出中并没有换行,仅仅在源代码中进行了换行.如果要在浏览器运行时换行,需使用html中的<br>标签.因为php输出的内容可以直接嵌入到页面中显示,所以各种html标签在这里都是有效的.
关于php中的字符串类型数据,还要注意以下两点与js不同的地方:
第一,单引号定义的字符串就是普通的字符串,而双引号定义的字符串会解析其中的变量.因此,在字符串中没有包括变量的时候,使用单引号的效率要比双引号高一点,因为它不会去做任何的解析动作.
第二,php除了可以使用单引号或双引号来定义字符串外,还可使用界定符.
● 数值(integer和double)
在js中,不论是整数还是浮点数,都属于数字类型(Number).
而在php中,整数和浮点数是分开的.其中,整数为integer(int),浮点数为double(float).
还有一点与js不同的是,php没有NaN这个数值用来表示非数.
● 布尔值boolean(bool)
布尔类型的数据只有两个值:true或者false.
● 空类型NULL
此类型表示什么都没有.
要判断一个变量是不是空值,可使用empty函数.
2、数组
在js中,可通过Array()或[]来创建数组,这两种办法在php中仍然可以使用.例如:
$val1 = array('red', 'blue', 'green');
$val2 = ['red', 'blue', 'green'];
echo $val1[0]; //red
echo $val2[2]; //green
注意:在php中,array字母大小写无所谓;而js中的Array第一个字母必需大写.
通过以上这种方式创建的数组在php中被称为索引数组.其实,php中更常用的是关联数组,且功能更加强大.
3、对象
在真正面向对象的编程语言中,提到对象就离不开类(严格来说,js也并不是真正面向对象的语言,因为它的语法中没有类的概念,只能说它是基于对象的语言).
如果采用php的面向过程编程方式(也便是只使用php提供的各种函数),就不用考虑创建类的问题.
在php中拜访对象的属性和方法,要使用->操作符;而js中直接使用的圆点符号.
1、获取数据类型
js使用运算符typeof来获取指定变量或值的数据类型,php使用的是gettype函数.除此之外,php还可以使用以下类型测试函数:
is_string():是否为字符串;
is_int():是否为整数;
is_double():是否为浮点数;
is_bool():是否为布尔类型;
is_null():是否为空值;
is_array():是否为数组;
is_object():是否为对象.
除以上函数外,is_float()也可用于检测是否为浮点数;is_numeric()则检查是否为数字或由数字组成的字符串.
2、强制类型转换
js中的数据类型转换是使用String、Number、Boolean等办法,而php是将要转换的数据类型名称以括号括起来放到要转换的变量或数值前面.可使用的数据类型名称有:
string:字符串;
integer或int:整型;
double或float:浮点型;
boolean或bool:布尔型;
array:数组;
object:对象;
null:空类型(转换为空类型数据时需使用unset).
● 关于转换为数值类型的说明
true转为数值时变成1,false变成0;空值、空数组转为数值时变成0;字符串转为数值时,如果以数字开头就截取到非数字位,否则为0(类似于js中的parseInt和parseFloat办法).
● 关于转换为布尔类型的说明
空值null、空字符串、数值0、字符串0、空数组都被认为是false;其它非空、非零的数值,全部为true.
在js中,字符串0转为布尔值时返回的是true.这点与php有所不同.
3、数据类型转换函数
除了可以使用数据类型名称进行强制转换外,php还可以使用strval、intval、floatval、doubleval、boolval和settype转换函数.
和js相同,php中一样有算术运算符、比较运算符、逻辑运算符和三元运算符,其用法与js基原形同,但也有几处不太一样的地方:
1、php有专门的字符串运算符
在js中,运算符+号既可以用于算术运算,也能用于字符串的连接.当+运算符前后有任意的一个值为字符串类型时,则该运算符默认为字符串连接而非加法运算.
但在php中,+号仅用于算术运算,当其前后有非数值类型的内容时,会自动依照上述数值转换规则转换后再进行运算.例如:
echo null + 'abc55' + 12 + true + '711.22abc'; //724.22
php有专门的字符串连接符,便是圆点符号,它的作用便是将两个字符串连接起来,组合成一个新的字符串.
2、逻辑运算符有所增加,且用法也有变化.具体来说:
● 在js中,&&表示“逻辑与”,||表示“逻辑或”.但在php中,表示“逻辑与”的运算符增加到两个:and或者&&;表示“逻辑或”的运算符也同样有两个:or或者||.
● 在js中,当“逻辑与”或“逻辑或”运算符两边的返回值不是布尔值时,将自动按布尔值的转换规则转换为布尔值后再进行判断并返回内容.这里返回的内容不是布尔值,而是其对应的原始值.该返回办法在php中无效,php仍按转换后的布尔值返回.例如:
var str = '字符串1' || '字符串2';
console.log(str);
上述js代码中的两个字符串在转换成布尔值比拟时都为true,因此输出的内容是“字符串1”;如果改用&&运算符则输出“字符串2”.
但如果在php中运行以下代码:
$str = '字符串1' || '字符串2';
var_dump($str);
则输出的内容为true.
● 增加了异或(xor)运算符:左右两边表达式的值一真一假时,结果为true,否则为false.
3、增加了->、=>、@、``等运算符
->:相当于js中的圆点符号,用于拜访对象中的属性和方法;
=>:用于数组中key和value之间的映射,相当于js中给对象属性赋值的冒号;
@:用于屏蔽表达式可能发生的错误,只要在可能发生错误的表达式前加上@即可.该运算符只是对错误信息进行屏蔽,并没有真正办理错误;
``:用于运行系统命令.
js中的if、switch、for、while、do…while及break、continue语句,在php中均可正常使用,且语法完全相同;但js中只能写else if(php还能写成elseif),js中专门用于遍历数组和对象的for语句在php中已不能使用,其替代语句为foreach.
除此之外,php对break语句还进行了增强.对于多层嵌套的循环来说,该语句可增加一个参数,用于指定跳出第几层循环.
当采用“面向过程”的php编程方式时,其最重要的一个特征就是大量的使用函数而不是属性或办法.
在php中,函数的定义与调用规则在语法上与js完全一致,且变量作用域和js完全相同:在函数内部声明的变量为局部变量,其作用域仅限于函数内部;在函数外部声明的变量为全局变量.
但也有以下不同:
1、全局变量在php的函数内部并不能直接使用,必需在函数内部先用global关键字进行声明(或者使用$GLOBALS全局数组变量).
2、参数传递上的不同.在js中,将基本类型数据变量和数组、对象变量赋给另外一个变量的时候,其处理方式是不一样的:一个是赋“值”,一个是赋“内存地址”,由此就派生出了函数中的“按值传递参数”和“按引用传递参数”问题.在php中,已经不再存在不同处理方式的问题,但函数中的两种传递方式还是有的.
● 按值传递参数:不论是基本类型数据、还是数组,按值传递参数的处理办法都是一样的.
● 按引用传递参数:便是将实参的内存地址传递给形参,这时,在函数内部所有对形参的操作都会影响到实参的值.函数返回后,实参的值会发生变化.引用传递方式便是函数定义时在形参前面加个&符号.
维易PHP培训学院每天教你实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/6499.html