判断版本号
version_compare(PHP_VERSION, '5.6.4'); //返回1代表大于,-1代表小于,0代表等于
序列数组
range(0, 5); // [0,1,2,3,4,5] 和python不同,python不包含最后一个
range('a', 'e'); ['a','b','c','d','e']
简化判断
$input = $a ?? 0 等同于 isset($a) ? $a : 0
$input = $a ?: 0 等同于 $a ? $a : 0
ps:
js中可以这样写,php则为将结果改为bool返回
var input = a || 0
|| 与 or
$a = 0 or $c = 2;
$b = 0 || $c = 2;
var_dump($a); // 0 or优先级比=低,相当于 $a = 0, $c = 2;
var_dump($b); // true ||优先级比=高,相当于 $c = 2, $b = 0 || $c = 2的返回为真;
stdClass空对象(php对象是引用传递,而数组是值传递,对象更好用一些)
$std = new stdClass
$std->a = 'a';
$std->b = 'b';
立即执行函数
(function($a) {
echo $a;
})(1111);
立即执行类
$b = (new class('hello') {
public function __construct($a) {
echo $a;
}
public function test() {
echo 'test';
}
});
$b->test();
字符串截取,参数为负数
$rest = substr("abcdef", 0, -1); // 返回 "abcde"
$rest = substr("abcdef", 2, -1); // 返回 "cde"
$rest = substr("abcdef", 4, -4); // 返回 ""
$rest = substr("abcdef", -3, -1); // 返回 "de"
$arr1+$arr2数组覆盖(前面的覆盖后面的属性,这个和js中的恰好相反)
$a = ['a' => 1, 'b' => 2];
$b = ['a' => 10, 'c' => 3];
$a + $b; // ['a' => 1, 'b' => 2, 'c' => 3]
数组解构
list($a, $b) = [1, 2]; // list(只支持数字键的数组)
[$a, $b] = [1, 2];
['key1' => $a, 'key2' => $b] = ['key1' => 1, 'key2' => 2]
参数解构
- 解析数组对应每个参数
function test($a, $b, $c) {
return $a + $b + $c;
}
echo test(...[1, 2, 3]);
- 解析参数为一个数组
function test2(...$args) {
// $args: array
return array_reduce($args, function($carry, $item) {return $carry + $item;}, 0);
}
echo test2(1, 2, 3); // 6
- 部分解构
function test($a, ...$args) {
var_dump($args);
}
test(1, 2, 3, 4); // $a = 1, $args = [2,3,4]
use写法
// PHP 7 之前版本需要使用多次 use
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;
// PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};
网友评论