数据类型
字符串 整数 浮点数 布尔值 数组 对象 null 未定义的变量,数据类型为 null。
php 中数组和对象是不同的类型,而 js 中数组即为对象。(ps: es6 已经内置了 class)
运算符 字符串拼接用 . (点运算符),而不是 +。所以 php 里两个字符串数字能用 + 连接,会自动转为数字相加。
$a = 100;$b = 200;$c = $a + $b;echo $a + $b; // 300
循环语句 foreach 循环只适用于 数组,并用于遍历数组中的每个键/值对。
$a = array(red, green, blue, array(1, 2, 3)); foreach ($a as $i) { var_dump($i);}// string 'red' (length=3)// string 'green' (length=5)// string 'blue' (length=4)// array// 0 => int 1// 1 => int 2// 2 => int 3
双引号和单引号 js 中双引号和单引号用法基本相同。
php 里的单引号把内容当成纯文本,不会经过服务器翻译。而双引号则与此相反,里面的内容会经过服务器处理(process),然后再当作 html 代码输出。
$a = 10;echo the value of a is $a; // the value of a is 10echo 'the value of a is $a'; // the value of a is $a
在写数据库查询语句时非常好用。
原来要这样:
$date = '2016-03-01';$sql = 'select * from adblock where day >= ' . '' . $date . '' . ' order by day';
实际只需这样:
$date = '2016-03-01';$sql = select * from adblock where day >= $date order by day;
能用单引号就用单引号(效率高),避免双重求值(有点类似 js 中的 eval() ,以及 settimeout 回调不传字符串等)。
函数传参 js 的函数是按值传递(详见 这里),基本类型传入函数是不会改变原始值的,而对象(包括数组)参数传入时要格外小心,一不注意就可能把原始的值改掉了。
php 支持按值传递以及按引用传递,区别就是函数参数中的一个 & 地址符号,这点和 c 语言相似。
按值(原始值不变):
function fn($a) { $a[0] = 10;}$a = array(1, 2, 3);fn($a);var_dump($a);// array// 0 => int 1// 1 => int 2// 2 => int 3
按引用(改变原始值):
function fn(&$a) { $a[0] = 10;}$a = array(1, 2, 3);fn($a);var_dump($a);// array// 0 => int 10// 1 => int 2// 2 => int 3
变量作用域 js 中变量的作用域是函数为单位,并没有区块级的作用域。(ps:es6 let 关键字实现了区块级作用域)。
php 有三种不同的变量作用域:
local(局部) global(全局) static(静态) 函数之外声明的变量拥有 global 作用域,只能在函数以外进行访问。(这点和 js 不同,js 函数内能访问函数之外的变量)
函数内部声明的变量拥有 local 作用域,只能在函数内部进行访问。(这点和 js 类似)
php 函数外的变量只能在函数外访问,函数内的变量只能在函数内访问。可以用 global 关键字(或者 $globals[])打通内外界限。
函数内访问外部变量:
$a = 10;function fn() { global $a; echo $a; // 10}fn();
或者:
$a = 10;function fn() { echo $globals['a']; // 10}fn();
函数外访问内部变量(其实是在函数内申明全局变量):
function fn() { global $a; $a = 20;}fn();echo $a; // 20
或者:
function fn() { $globals['a'] = 20;}fn();echo $a; // 20
类型转换 php 中也可以对变量做强制转换,这点和 c 语言相似。在要转换的变量之前加上目标类型,目标类型用括号括起来。
php 中允许的强制类型转换有:
(int),(integer) —— 转换成整型 (bool),(boolean) —— 转换成 bool 型
(float),(double),(real) —— 转换成浮点型 (string) —— 转换成字符串 (array) —— 转换成数组 (object) —— 转换成对象 或者直接用 settype 函数,简单粗暴。(参考下节)
类型判断 判断变量的类型:
is_integer() is_string() is_double() is_array() is_null() is_object() is_int() is_numeric() 取得变量的类型:
gettype() 设置变量类型:
settype()
$a = 10;settype($a, string);var_dump($a); // string '10' (length=2)
另外,var_dump() 也会返回变量的 数据类型 和值。
基本调试 用 echo()(能够输出一个以上的字符串) 或者 var_dump() 打印变量。如果是直接在浏览器打开 php 文件,打印结果会出现在页面;如果是 http 请求,打印结果会在 http 响应中(f12 查看)。
习惯 js 调试在控制台输出风格的,可以尝试 chrome-logger
其他 isset() 判断变量是否已经定义 unset() 删除一个或者多个变量