美文网首页
php的一些语法糖

php的一些语法糖

作者: sorry510 | 来源:发表于2020-03-15 18:31 被阅读0次

判断版本号

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};

相关文章

网友评论

      本文标题:php的一些语法糖

      本文链接:https://www.haomeiwen.com/subject/irhcehtx.html