作者简介
本案例研究是Kaira Clark工作在Xicom科技有限公司,写一个CakePHP的Web应用程序开发公司。她总是乐于分享市场营销和网络开发的激情。如果你打算
聘请专门的团队为一个辉煌的网上存在。
在PHP 7中的5个新功能
综合考虑各种因素,2015年一直是重要的一年,每一个PHP设计师,以及下列十几年,PHP适应5.0版本中,还有另外一个发展是,从长远来看,未来的路。然而,考虑在不同的发展亮点,想想用什么方法将你的PHP变量影响你当前的PHP代码库?简单地评价一下真正在PHP中有哪些变化?你怎么能安全地处理PHP重新设计?在这里,在这篇文章中,您将获得您的询问每一个解决方案,并会在最后时刻的经验是什么未来的路,而你正在使用PHP 7.所以工作时,让我们来检查核心的问题了。
改进执行
执行升级是对开发者的主要动机的最可能的原因每个人都应该有每个服务器上的报表时,有被释放的PHP稳定变异的到来。通过手机RFC提出的中心重构使得PHP比7快HHVM。官方基准值得注意:最上PHP 5.6运行正常的应用程序将让每一个事件的两倍作为PHP 7更快执行。
向后兼容性陷阱
现在,让我们有超过一些基本的PHP因素,最终可能打破对老版本PHP运行遗留应用程序的对话。
解决了在评估变量变量表达式的时间的一系列每不一致。考虑显示下面的代码:
class Company
{
public $emp_name = 'Madhur;
public $emp_des = 'Software Engineer';
}
$company = new Company();
$property = [ 'first' => 'emp_name', 'second' => 'info' ];
echo "nEmployee name is " . $company->$property['first'] . "nn";
在PHP 7,表达 $company->$property[‘first’] 被评估为{$company->$property}[‘first’]。解释器将评估 $company->$property first。 感谢我们新的从左到右的变量语法,使每一个有效的表达这是不可能的早期版本的PHP。考虑更好地理解下面的类:
class Company
{
public static $location = 'NCR';
public function getBranches()
{
return [
'jaipur' => function () {
return ''east and west;
},
'chandigarh' => function () {
return 'north and south';
}
];
}
public function getBranchesOf($someone)
{
return $this->getBranches()[$someone];
}
public static function getNewCompany()
{
return new Company();
}
}
PHP 7能够创建带有运营商之间的不同组合嵌套的关联:
$company = new Company();
echo "n" . $company->getBranches()['jaipur']() . "nn";
echo "n" . $company->getBranchesOf('chandigarh')() . "nn";
这段代码将生成PHP 5解析错误,但是PHP 7顺利。
与致命错误正与多个“default”条款
这一点,又涉及到更多的逻辑错误,一个有争议的情况。 它不使用多个默认子句交换机,只是因为它从未发生过任何错误警告。 在PHP 7,你会遇到一个致命的错误:
“Switch statements only contain one default clause”
。
在PHP引擎中的异常
发动机工作异常如应用程序中的错误处理过程。因此,所有现有的致命性和可恢复致命错误有效地例外取代,轻松捕捉所有上述错误,并采取对处理这样的错误行动。 让我们参考下面的代码有关如何处理执行引擎中的异常,以保持向后兼容性容易:
set_error_handler(function ($code, $message) {
echo "ERROR $code: " . $message . "nn";
});
function a(ArrayObject $b){
return $b;
}
a("test");
echo "Hello World";
此代码有效地恢复由该类型不匹配,当你调用函数 a() 用帮助作为参数引起的错误。
Hello World
这将继续执行,因为错误而有效地处理。在PHP 7,它会产生一个TypeError异常,是不是一个错误。因此,在这种情况下,定制的错误处理程序将不会被调用,这是在下面的输出错误如下:
Fatal error: Uncaught TypeError: Argument 1 passed to a() must be an instance of ArrayObject, string given, called in /vagrant/tests/test04.php on line 12 and defined in /vagrant/tests/test04.php:7
Stack trace:
#0 /vagrant/tests/test04.php(12): a('test')
#1 {main}
thrown in /vagrant/tests/test04.php on line 7
在这里,执行将停止作为例外没有被捕获。为了解决这个问题,我们应该找到利用try / catch块的异常。请注意,异常层次结构会发生变化,以适应在新的引擎中的异常用最少的遗留代码。请参考以下以下模式:
- Throwable的接口
- 异常Throwable的实现
- ErrorException扩展异常
- RuntimeException的异常延伸
- 错误Throwable的实现
- TypeError extends错误
- ParseError extends错误
- AssertionError extends 错误
上面的图案象征着一个新的捕获所有异常的Throwable,而不是例外。
新添加的语言特点
让我们来看看它有哪些? 新操作符
1 - > Spaceship/ Comparison 操作符
Spaceship 被表示为<=>,也通过用于启用链状比较的名称结合比较运算符公知的。 它有以下表现:
$a <=> $b
1. -1,如果$a小于$b 2. 0,如果$a等于$b 3. 1,如果$a大于$b。 整体而言,这可作为下列表达式:
($a < $b) ? -1 : (($a > $b) ? 1 : 0)
2 - > null coalesce操作 被表示为 ?? 该保持检查值是否被设置为使用它。
标量类型提示
标量类型提示来作为包含在该利用整数PHP语言的最知名的属性之一,floats,strings和Boolean symbols 类型提示与函数和方法的工作。标量类型提示是默认的表示,当你传递一个浮点值一个整数,参数,它只是压抑它格式没有任何错误警告非限定。 因此,要解决这个问题,就必须启用严格模式时,任何非法标量类型作为参数传递,这将引发错误。让我们引用生成的代码如下:
function double(int $value)
{
return 2 * $value;
}
$a = double("5");
var_dump($a);
为了确保整数允许被传递给双重功能,然后通过包括指令声明启用严格模式(strict_types = 1)模式在脚本中的第一行:
declare(strict_types = 1);
function double(int $value)
{
return 2 * $value;
}
$a = double("5");
var_dump($a);
此代码将产生一个
Fatal error: Uncaught TypeError: Argument 1 passed to double() should be of the type integer, string given
。
返回类型提示
被添加到PHP 7另一个显著新特点是它的极端的功能,实现的方法以及函数的返回类型;这相当于一个标量类型提示。当心下面生成的代码:
function a() : bool
{
return 1;
}
var_dump(a());
这段代码运行效率没有警告,返回值会自动转换成布尔格式。通过激活严格模式,将产生一个致命的错误:
Fatal error: Uncaught TypeError: Return value of a() must be of the type boolean, integer returned
这些错误是一种由使用try / catch块捕捉和处理异常。
结论
我希望你会喜欢用PHP 7的所有新版本的工作
了解更多