PHP7新特性
2021-01-28 20:15
标签:set 移除 try php call() ace 动态 一个 return PHP标量类型与返回值类型声明 默认情况下,所有的PHP文件都处于弱类型校验模式。 PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式: declare(strict_types=1); 代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式 可以使用的类型参数有: int float bool string interfaces array callable PHP 7 增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型 可以声明的返回类型有: int float bool string interfaces array callable 一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值 返回的类型还有 void,定义返回类型为 void 的函数不能有返回值,即使返回 null 也不行 void 函数可以省去 return 语句,或者使用一个空的 return 语句 PHP NULL合并运算符 PHP 7 新增加的 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式 NULL 合并运算符会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二个操作数 PHP太空船运算符(组合比较符) PHP 7 新增加的太空船运算符(组合比较符)用于比较两个表达式 $a 和 $b,如果 $a 小于、等于或大于 $b时,它分别返回-1、0或1 PHP常量数组 在 PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义 PHP匿名类 PHP 7 支持通过 new class 来实例化一个匿名类,这可以用来替代一些"用后即焚"的完整类定义 PHP Closure::call() PHP 7 的 Closure::call() 有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数 PHP 过滤 PHP 7 增加了可以为 unserialize() 提供过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据 PHP IntlChar() PHP CSPRNG CSPRNG(Cryptographically Secure Pseudo-Random Number Generator,伪随机数产生器)。 PHP 7 通过引入几个 CSPRNG 函数提供一种简单的机制来生成密码学上强壮的随机数。 random_bytes() - 加密生存被保护的伪随机字符串。 random_int() - 加密生存被保护的伪随机整数。 PHP 7 异常 PHP 7 use 语句 PHP 7 可以使用一个 use 从同一个 namespace 中导入类、函数和常量: PHP 7 错误处理 PHP 7 改变了大多数错误的报告方式。不同于 PHP 5 的传统错误报告机制,现在大多数错误被作为 Error 异常抛出。 这种 Error 异常可以像普通异常一样被 try / catch 块所捕获。如果没有匹配的 try / catch 块, 则调用异常处理函数(由 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。 Error 类并不是从 Exception 类 扩展出来的,所以用 catch (Exception $e) { ... } 这样的代码是捕获不 到 Error 的。你可以用 catch (Error $e) { ... } 这样的代码,或者通过注册异常处理函数( set_exception_handler())来捕获 Error。 PHP 7 intdiv() 函数 PHP 7 新增加了 intdiv() 函数,接收两个参数,返回值为第一个参数除于第二个参数的值并取整 PHP 7 Session选项 PHP 7 废弃特性 PHP 7 移除的扩展 PHP 7 移出的SAPI PHP7新特性 标签:set 移除 try php call() ace 动态 一个 return 原文地址:https://www.cnblogs.com/liushoudong/p/13209553.html
php
// 强制模式
function sum(int ...$ints)
{
return array_sum($ints);
}
print(sum(2, ‘3‘, 4.1));
?>
//9
php
// 严格模式
declare(strict_types=1);
function sum(int ...$ints)
{
return array_sum($ints);
}
print(sum(2, ‘3‘, 4.1));
?>
//PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……
php
declare(strict_types=1);
function returnIntValue(int $value): int
{
return $value;
}
print(returnIntValue(5));
?>
$site = isset($_GET[‘site‘]) ? $_GET[‘site‘] :‘python‘;
==>
$site = isset($_GET[‘site‘]) ?? ‘python‘;
php
print(11);
print(12);
print(21);
?>
//0 -1 1
php
define(‘sites‘, [
‘Google‘,
‘Runoob‘,
‘Taobao‘
]);
?>
php
class A {
private $x = 1;
}
//PHP7之前版本定义闭包函数代码
$getXCB = function() {
return $this->x;
};
//闭包函数绑定到类A上
$getX = $getXCB->bindTo(new A, ‘A‘);
echo $getX();
print(PHP_EOL);
//PHP 7+ 代码
$getX = function() {
return $this->x;
};
echo $getX->call(new A);
?>
//闭包函数
php
function callback($callback) {
$callback();
}
$var = ‘字符串‘;
callback(function() use (&$var){
echo "闭包函数传参数测试{$var}";
$var = 1;
});
print($var);
?>
php
class MyClass1 {
public $obj1prop;
}
class MyClass2 {
public $obj2prop;
}
$obj1 = new MyClass1();
$obj1->obj1prop = 1;
$obj2 = new MyClass2();
$obj2->obj2prop = 2;
$serializedObj1 = serialize($obj1);
$serializedObj2 = serialize($obj2);
//默认行为是接收所有类,第二个参数可以忽略
//如果allowed_classes 设置为false,unserialize会将所有对象转换为__PHP_Incomplete_Class对象
$data = unserialize($serializedObj1, ["allowed_classes"=>true]);
//转换所有对象到__PHP_Incomplete_Class对象
$data2 = unserialize($serializedObj2, ["allowed_classes"=>["MyClass1", "MyClass2"]]);
print($data->obj1prop);
echo "
";
print($data2->obj2prop);
?>
php
//string random_bytes(int $length)
//@param length-随机字符串返回的字节数
//@return 返回一个字符串,接受一个int型入参代表返回结果的字节数
$bytes = random_bytes(5);
//print($bytes);
print(bin2hex($bytes));
//int random_int (int $min, int $max)
//@param min 返回的最小值,必须是大于或等于PHP_INT_MIN
//@param max 返回的最大值,必须是小于或等于PHP_INT_MAX
//@return 返回一个指定范围内的int型数字
print(random_int(100, 999));
print(random_int(-1000, 0));
?>
php
class MathOperations
{
protected $n = 10;
//求余数运算,除数为0,抛出异常
public function doOperation(): string
{
try
{
$value = $this->n % 0;
return $value;
} catch (DivisionByZeroError $e)
{
return $e->getMessage();
}
}
}
$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());
?>
上一篇:js 身份证号隐藏中间数字