php部分新特性介绍

谭佳成
2018-09-29
(83)

0. 为什么“没有”php6
no,实际上6的版本功能已经在5.6中实现,还有什么Unicode无法实现什么的...类似window系统没有9直接跳10酱紫。

1.性能提升
使用新的引擎(PHPNG),有人测试过是5.6版本的2到3倍,甚至更快!

2.类型声明 针对(int, float, string, and bool)


默认类型声明是非严格的,可手动设置严格
declare(strict_types=1);

/**
 * Scalar type declarations
 * 类型声明
 */

declare(strict_types=1);
function add(int $a, int $b) {
return $a + $b;
}

var_dump(add(1,2));
var_dump(add("1","2"));//Uncaught TypeError



3.返回类型声明

/**
 * Return type declarations
 * 返回类型声明
 */

declare(strict_types=1);
function add(int $a, int $b): int{
return (string)($a + $b);
}

var_dump(add(1,2));


4.匿名类

/**
 * Anonymous classes
 * 匿名类
 */
$foo = new class {
public function foo() {
return "bar";
}
};
var_dump($foo,$foo->foo());


5.匿名函数新方法

/**
 * Closure::call()
 * 匿名函数(闭包)新方法
 */
class Foo
{
private $foo = 'bar';
}
$getFooCallback = function() {
return $this->foo;
};
//PHP5 style
$binding = $getFooCallback->bindTo(new Foo,'Foo');
echo $binding().PHP_EOL;
//PHP7 style
echo $getFooCallback->call(new Foo).PHP_EOL;


6.Generator委托

/**
 * Generator delegation
 * generator 委托
 */
function gen()
{
yield 1;
yield 2;
yield from gen2();
}
function gen2()
{
yield 3;
yield 4;
}
foreach (gen() as $val)
{
echo $val, PHP_EOL;
}


7.Generator返回表达式

/**
 * Generator return expressions
 */
$gen = (function() {
yield 1;
yield 2;
return 3;
})();
foreach ($gen as $val) {
echo $val, PHP_EOL;
}
echo $gen->getReturn(), PHP_EOL;


8.新三元运算符

/**
 * Null coalesce operator
 */
$array = ['foo'=>'bar'];
//PHP5 style
$message = isset($array['foo']) ? $array['foo'] : 'not set';
echo $message.PHP_EOL;
//PHP7 style
$message = $array['foo'] ?? 'not set';
echo $message.PHP_EOL;


9.太空船操作符

/**
 * Space ship operator
 * 太空船操作符
 */
$array = [
"1 <=> 1" => 1 <=> 1,//相等0
"1 <=> 2" =>1 <=> 2,//小于-1
"2 <=> 1" => 2 <=> 1//大于1
];
var_dump($array);


10.Throwable接口

/**
 * Throwable interface
 */


//Error as Throwable
try {
sqdf();
} catch (Throwable $t) {
echo "Throwable: ".$t->getMessage().PHP_EOL;
}

//Exception as Throwable
try {
throw new Exception("Bla");
} catch (Throwable $t) {
echo "Throwable: ".$t->getMessage().PHP_EOL;
}

//Error
try {
sqdf();
} catch (Error $e) {
echo "Error: ".$e->getMessage().PHP_EOL;
} catch (Exception $e) {
echo "Exception: ".$e->getMessage().PHP_EOL;
}

//Exception
try {
throw new Exception("Bla");
} catch (Error $e) {
echo "Error: ".$e->getMessage().PHP_EOL;
} catch (Exception $e) {
echo "Exception: ".$e->getMessage().PHP_EOL;
}

//Type error
try {
function add(int $a, int $b):int {
return $a + $b;
}
echo add(array(), array());
} catch (TypeError $t) {
echo "Type error: ".$t->getMessage().PHP_EOL;
}


11.Dirname等级

/**
 * Dirname levels
 */
echo dirname('/usr/local/bin').PHP_EOL;// /usr/local
echo dirname('/usr/local/bin',1).PHP_EOL;// /usr/local
echo dirname('/usr/local/bin',2).PHP_EOL;// /usr
echo dirname('/usr/local/bin',3).PHP_EOL;// /


12.int除法

/**
 * Integer division
 */
var_dump(
    intdiv(10, 3),//3
    (10/3)//3.3333...
);


13.安全随机密码生成器

/**
 * Cryptographically Secure PseudoRandom Number Generator.
 * CSPRNG
 * 安全随机密码生成器
 */

$bytes = random_bytes(5); // length in bytes
var_dump(bin2hex($bytes)).PHP_EOL;//like 3a017030a4

$num = random_int(1,20);
var_dump($num).PHP_EOL;//1-20的随机数


更多请看官网更新日志





如无说明,本站文章均为原创,转载或引用注明来源:https://93jc.cn/article/173.html


下一篇:trait