php7和php5的新特性和性能对比是怎样的
Admin 2022-08-19 群英技术资讯 1257 次浏览
这篇文章将为大家详细讲解有关“php7和php5的新特性和性能对比是怎样的”的知识,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
php7和PHP5对比的新特性和性能优化
1. 抽象语法树(AST)
AST在PHP编译过程作为一个中间件的角色,替换原来直接从解释器吐出opcode的方式,让解释器(parser)和编译器(compliler)解耦,可以减少一些Hack代码,同时,让实现更容易理解和可维护
2. Natice TLS:
线程数据共享安全,开启一个全局线程用作数据共享内存空间
3. 指定参数 返回值类型
4. zval 结构的变化
5. 异常处理
PHP 5 的 try ... catch ... finally 无法处理传统错误,如果需要,你通常会考虑用 set_error_handler() 来 Hack 一下。但是仍有很多错误类型是 set_error_handler() 捕捉不到的
PHP 7引入 Throwable 接口,错误及异常都实现了 Throwable,无法直接实现 Throwable,但可以扩展 \Exception 和 \Error 类。可以用 Throwable 捕捉异常跟错误。\Exception 是所有PHP及用户异常的基类;\Error 是所有内部PHP错误的基类。
6. 新的参数解析方式
7. hashtable变化
buckets、Zvals不再单独分配内存,消除了很多没用的冗余。
8、空合并操作符(Null Coalesce Operator)
直接上例子:
$name = $name ?? "NoName"; // 如果$name有值就取其值,否则设$name成"NoName"
9、飞船操作符(Spaceship Operator)(组合比较操作符)
形式:(expr) <=> (expr)
左边运算对象小,则返回-1;左、右两边运算对象相等,则返回0;左边运算对象大,则返回1。
$name = ["Simen", "Suzy", "Cook", "Stella"];
usort($name, function ($left, $right) {
return $left <=> $right;
});
print_r($name);10、常量数组(Constant Array)
PHP 7 之前只允许类/接口中使用常量数组,现在 PHP 7 也支持非类/接口的普通常量数组了。
define("USER", [
"name" => "Simen",
"sex" => "Male",
"age" => "38",
"skill" => ["PHP", "MySQL", "C"]
]);
// USER["skill"][2] = "C/C++"; // PHP Fatal error: Cannot use temporary expression in write context in...11、统一了变量语法
$goo = [
"bar" => [
"baz" => 100,
"cug" => 900
]
];
$foo = "goo";
$$foo["bar"]["baz"]; // 实际为:($$foo)['bar']['baz']; PHP 5 中为:${$foo['bar']['baz']};
// PHP 7 中一个笼统的判定规则是,由左向右结合。12、Throwable 接口
这是 PHP 7 引进的一个值得期待的新特性,将极大增强 PHP 错误处理能力。PHP 5 的 try ... catch ... finally 无法处理传统错误,如果需要,你通常会考虑用 set_error_handler() 来 Hack 一下。但是仍有很多错误类型是 set_error_handler() 捕捉不到的。PHP 7引入 Throwable 接口,错误及异常都实现了 Throwable,无法直接实现 Throwable,但可以扩展 \Exception 和 \Error 类。可以用 Throwable 捕捉异常跟错误。\Exception 是所有PHP及用户异常的基类;\Error 是所有内部PHP错误的基类。
$name = "Tony";
try {
$name = $name->method();
} catch (\Error $e) {
echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
}
try {
$name = $name->method();
} catch (\Throwable $e) {
echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
}
try {
intp(5, 0);
} catch (\pisionByZeroError $e) {
echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
}13、use 组合声明
use 组合声明可以减少 use 的输入冗余。
use PHPGoodTaste\Utils\{
Util,
Form,
Form\Validation,
Form\Binding
};14、一次捕捉多种类型的异常 / 错误
PHP 7.1 新添加了捕获多种异常/错误类型的语法——通过竖杠“|”来实现。
try {
throw new LengthException("LengthException");
// throw new pisionByZeroError("pisionByZeroError");
// throw new Exception("Exception");
} catch (\pisionByZeroError | \LengthException $e) {
echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
} catch (\Exception $e) {
echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
} finally {
// ...
}15、可见性修饰符的变化
PHP 7.1 之前的类常量是不允许添加可见性修饰符的,此时类常量可见性相当于 public。PHP 7.1 为类常量添加了可见性修饰符支持特性。总的来说,可见性修饰符使用范围如下所示:
class YourClass
{
const THE_OLD_STYLE_CONST = "One";
public const THE_PUBLIC_CONST = "Two";
private const THE_PRIVATE_CONST = "Three";
protected const THE_PROTECTED_CONST = "Four";
}iterable 伪类型
PHP 7.1 引入了 iterable 伪类型。iterable 类型适用于数组、生成器以及实现了 Traversable 的对象,它是 PHP 中保留类名。
$fn = function (iterable $it) : iterable {
$result = [];
foreach ($it as $value) {
$result[] = $value + 1000;
}
return $result;
};
$fn([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);可空类型(Nullable Type)
PHP 7.1 引入了可空类型。看看新兴的 Kotlin 编程语言的一个噱头特性就是可空类型。PHP 越来越像“强类型语言了”。对于同一类型的强制要求,可以设置其是否可空。
$fn = function (?int $in) {
return $in ?? "NULL";
};
$fn(null);
$fn(5);
$fn(); // TypeError: Too few arguments to function {closure}(), 0 passed in ...Void 返回类型
PHP 7.1 引入了 Void 返回类型。
function first(): void {
// ...
}
function second(): void {
// ...
return;
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
php怎样实现格式化时间?我们有时候会遇到需要格式化时间的需求,那么要怎么操作呢?下面就给大家分享关于php实现格式化时间操作的实例,感兴趣的朋友可以了解看看。
这篇文章主要介绍了Laravel框架中的路由和控制器操作,结合实例形式分析了laravel框架路由和控制器相关概念、原理及基本使用方法,需要的朋友可以参考下
php中Quercus框架:1、概念,Quercus PHP库完全用Java实现,从而带来了同时成为Java和PHP应用程序的好处;2、好处为易于开发、可伸缩性和国际化。
本篇文章带大家深入解析PHP中的 "? :" 运算符(三元表达式),看看它的作用,要如何使用,效果如何?希望对大家有所帮助!
1.发送短信调用TextMagicAPI。//IncludetheTextMagicPHPlib require('textmagic-sms-api-php/TextMagicAPI.php'); //Settheusernameandpas...
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008