idiotbaka

PHP中一些需要知道的知识(一):基础篇
此系列用来记录一些php中需要知道的知识点(基础篇)。内容比较杂,跳跃性可能会比较强。
扫描右侧二维码阅读全文
04
2018/09

PHP中一些需要知道的知识(一):基础篇

timg (3).jpg
此系列用来记录一些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不仅支持&&||,还支持andor

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
)
Last modification:March 20th, 2019 at 11:15 pm
本文采用 知识共享署名 4.0 国际许可协议进行许可
可自由转载、引用,但需署名作者且注明文章出处
If you think my article is useful to you, please feel free to appreciate

Leave a Comment