此系列用来记录一些php中需要知道的知识点(基础篇)。
内容比较杂,跳跃性可能会比较强。
字符串命名:单引号和双引号的区别
在php中,对字符串进行赋值可以使用单引号和双引号:
$string = '黄金拼图';
$string1 = "黄金拼图";
其赋值后的结果是一样的。但是双引号可以进行变量替换,单引号却不行:
$money = 50;
$string = "我兜里有${money}块钱。";
如上所示,运行后,双引号字符串中的${money}
将会进行变量替换,替换为50。
数据类型快速转换
可以在变量前加上(数据类型)
来快速进行数据类型转换。例如:
$int = 100;
// int类型快速转string类型
$str = (string)$int;
string类型转换成int类型也同理:
$str = '100';
// string类型快速转int类型
$int = (int)$str;
当然也可以用函数实现:
$str = '100';
// string类型转int类型
$int = intval($str);
数组创建和追加
数组的创建通常写成这样:
$array1 = array(100, 200, 300);
在php7开始,可以用中括号简写:
$array1 = [100, 200, 300];
数组快速追加也可以这样写:
$array1[] = 400;
此时数组$array1
在最后追加了400。
数组的快速追加可以指定key,比如:
$array1 = array('id'=>1, 'age'=>12);
$array1['name'] = 'god';
如果指定的key存在,php会进行值的替换,如果指定key不存在,则会追加数据。
文件写入前检查是否可写
linux对权限很敏感,项目在每个平台运行,可能会有不同。
在写入文件前,先检查文件是否可写,会避免一些错误问题。
$text = 'abcd';
$file = 'test.txt';
// 判断文件是否可写
if(is_writable($file)){
file_put_contents($file, $text);
}
引用计数
php的&符引用类似于别名的效果,但是引用变量和被引用变量的删除不会互相影响。
$a = 123;
$b = &$a;
$b = 456;
此时变量b引用了变量a的地址,对变量b的修改会影响变量a,执行后$a
的值是456。
$a = 123;
$b = &$a;
unset($b);
此时unset()
删除了变量a或者变量b,对其他不会产生影响。运行后$a
还是123。
PHP特有的运算符
1.太空船运算符:<=>
echo(100<=>100);
echo(56<=>77);
echo(22<=>4);
太空船运算符会比较两边数值的大小,相等则返回0,左边小则返回-1,左边大则返回1。
2.NULL合并运算符:??
$a;
$b = 5;
$c = 3;
echo($a??$b??$c);
执行后会输出5,NULL合并运算符会依次从左到右寻找非null
的值返回。
3.错误控制
echo @run_sql();
echo run_sql();
如果run_sql
函数没有被定义,则调用会产生报错信息打印在网页上,对网络安全来说是非常危险的,有可能会被利用攻击和注入漏洞。在函数、变量等前面加上错误控制符@
可以让其不在网页上打印错误信息。
4.逻辑运算
if(5>3 and 4<8){
echo '1';
}
if(5>3 or 4>8){
echo '2';
}
php不仅支持&&
和||
,还支持and
和or
。
5.执行运算符
echo `php -v`;
用反引号表示命令行执行运算,非常方便,可以用来和其他语言及程序进行交互。但是直接执行命令行也意味着它拥有高权限,不要在用户输入中去使用它。很多php运行环境都禁用了它,也是出于安全性考虑。
6.数组运算符
$color1 = [1=>'red', 2=>'blue'];
$color2 = [1=>'orange'];
echo $color1+$color2;
数组可以相加,但是要注意的是,数组相加后,左边数组原有的值不会被覆盖,而是跳过。
此时$color1
已经有key为1的值了,和$color2
相加后,结果还是$color1
。
如果此时运行的是print_r $color2+$color1
,则最终结果是:
Array(
[1] => orange
[2] => blue
)
另外,数组的相等判断,用==和===也是有区别的:
$color1 = [1=>'red', 2=>'blue'];
$color2 = [2=>'blue', 1=>'red'];
此时$color1==$color2
返回的是true,==
会比较两个数组里每个key和对应值是否相等。
而$color1===$color2
返回的是false,===
不仅会比较两个数组里每个key和对应值是否相等,还会比较key对应顺序是否相等。
函数的预设参数与变长参数
function show_hobby($hobby='girl'){
echo "Your hobby is ${hobby}";
}
// 调用函数
show_hobby();
此时调用函数没有传入$hobby
的参数值,函数会使用预设值girl。
可以在函数参数中指定参数数据类型,如果传入参数类型错误,则会报错:
function show_age(int $age){
echo "Your age is ${age}";
}
参数可以是变长参数,当参数变长时,则传入的是数组:
function show_val(...$val){
print_r($val);
}
show_val('a', 'b', 'c');
此时执行后的结果是:
Array(
[0] => a
[1] => b
[2] => c
)