php8新版本特性的介绍
墨初 编程开发 514阅读
下面介绍几个php8新版中的特性,便于大家更好的了解php8,来更好的使用php的新版本加强网站的速度以及安全性。
php8 JIT特性
php8版本中加入了JIT新特性,此功能可以将php代码转化为传统的机器码,并非以前通过zend虚拟机来运行,这可以大大的加快了php的运行速度,但有个致命的缺点就是向以前老的php版本不兼容。
注:jit的性能在综合的基准测试中提高了3倍的性能,长时间运行中提高了1.5倍左右,典型的应用中和php7.4相持平。
# JIT可以通过 php.ini 中设置
opcache.jit = on // on表示开 off表示关
php8 注释
PHP8之前PHP实现注解可以通过php-parser来实现,但现在可以直接通过Reflection 来获取。
/** * @param Foo $argument * @see https:/xxxxxxxx/xxxx/xxx.html */ function dummy($Foo) {} # 现在获取这段注解则可以使用 $ref = new ReflectionFunction("dummy"); var_dump($ref->getAttributes("See")[0]->getName()); var_dump($ref->getAttributes("See")[0]->getArguments());
php类中成员的变量
在PHP8之前的版本中,如果定义一个类中的成员变量,需要购买一个函数来为其赋值。
class User{ public $username; public $phone; public $sex; public function __contruct( $username,$phone,$sex ){ $this->username = $username; $this->phone = $phone; $this->sex = $sex; } }
在php8中可以直接给类的变量进行复制
class User{ public function __contruct( public string $username = "zhangsan", public string $host = "https://www.73so.com"; public string $sex = "男" ){} }
php8函数参数
在php8中函数的参数传入也发生了些变化,可以参考下面的示例。
新函数代码
function roule($name,$controller,$model){ // ... code }
php7中调用该函数
roule("user","usercent","login");
php8中可以按下面的方法调用函数
roule(name:"user",controller:"usercent",model:"login");
在php8函数的参数传入时如果带入了参数名,可以省略无意义的参数。
//调用方法1
roule(controller:"usercent",model:"login");
//调用方法2
roule(name:"user",model:"login");
php Match表达式
php8中新的match类类似于switch,具有以下的功能。
1、Match是一个表达式,它可以存到变量中也可以直接返回
2、Match分支公支持单行,它不需要break语句
3、Match使用了严格比较
php7
switch (8.0) { case '8.0': Sresult = "Oh no! " break; case 8.0: Sresult = "This is what I expected"; break; } echo $result;
php8
# https://www.73so.com echo match (8.0) { '8.0' => "Oh no!" 8.0 => "This is what I expected" }; //> This is what I expected
php 字符串与数字的比较
php8比较数字字符串时,会按数字进行比较。不是数字字符串时,将数字转为字符串,按字符串比较。
php7
0 == 'foo' // true
php8
0 == 'foo' // false
其它:
关于php8的新特性还有很多,比如一些话法的调整,错误处理的改进,私有方法的继承以及一些扩展等。