四时宝库

程序员的知识宝库

PHP7的新特性(php7的新特性有哪些)

性能测试

解压

tar -zxvf php-5.6.36.tar.gz
tar -zxvf php-7.1.0.tar.gz
tar -zxvf php-7.4.0.tar.gz

源码编译安装5.6.35

./configure --prefix=/home/codes/php/php-5.6.36/ --enable-fpm --enable-debug
make && make install

源码编译安装7.1.0

./configure --prefix=/home/codes/php/php-7.1.0/ --enable-fpm --enable-debug
make && make install

源码编译安装7.4.0

./configure --prefix=/home/codes/php/php-7.4.0/ --enable-fpm --enable-debug
make && make install

在目录php-5.6.36/Zend和php-7.1.0.3/Zend和php-7.4.1/Zend下面有性能测试的PHP文件bench.php和micro_bench.php
查看PHP版本

/home/codes/php/php-5.6.36/bin/php -v
/home/codes/php/php-7.1.0/bin/php -v
/home/codes/php/php-7.4.0/bin/php -v

执行测试

/home/codes/php/php-5.6.36/bin/php bench.php 
/home/codes/php/php-7.1.0/bin/php bench.php 
/home/codes/php/php-7.4.0/bin/php bench.php 




/home/codes/php/php-5.6.36/bin/php micro_bench.php 
/home/codes/php/php-7.1.0/bin/php micro_bench.php 
/home/codes/php/php-7.4.0/bin/php micro_bench.php 





PHP7的新特性

太空船操作符 <=>

  • 太空船操作符用于比较两个表达式
  • 例如,当$a小于、等于、或大于$b时它分别返回-1、0或1
codes/php/php-7.1.0/bin/php -r "echo 1<=>1; echo PHP_EOL;"
codes/php/php-7.1.0/bin/php -r "echo 2<=>1; echo PHP_EOL;"
codes/php/php-7.1.0/bin/php -r "echo 2<=>3; echo PHP_EOL;"


类型声明

  • 代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。declare(strict_types=1);
<?php
declare(strict_types=1);
function sum(int ...$ints)
{
    return array_sum($ints);
}
echo sum(2, '3', '4.1');
echo PHP_EOL;
?>
<?php
declare(strict_types=1);
function sum(int ...$ints)
{
    return array_sum($ints);
}
echo sum(2, 3, 4);
echo PHP_EOL;
?>



null合并操作符

<?php
// 获取 $_GET['site'] 的值,如果不存在返回 'default'
$site = $_GET['site'] ?? 'default';
print($site);
print(PHP_EOL); // PHP_EOL 为换行符
// 以上代码等价于
$site = isset($_GET['site']) ? $_GET['site'] : 'default';
print($site);
print(PHP_EOL);
// ?? 链
$site = $_GET['site'] ?? $_POST['site'] ?? 'default';
print($site);
print(PHP_EOL);
?>



常量数组

<?php
// 使用 define 函数来定义数组
define('sites', [
   'a',
   'b',
   'c'
]);
print(sites[1]);
echo PHP_EOL;
?>


PHP匿名类

<?php
interface Logger{public function log(string $msg);}
class Application
{
    private $logger;
    public function getLogger(): Logger{return $this->logger;}
    public function setLogger(Logger $logger){$this->logger = $logger;}
}
$app = new Application;
// new class 来实例化一个匿名类,用来替代一些"用后即焚"的完整类定义。
$app->setLogger(new class implements Logger{public function log(string $msg){print_r($msg);}});
$app->getLogger()->log('我是第一条日志');
echo PHP_EOL;
$app->setLogger(new class implements Logger{public function log(string $msg){print_r($msg);}});
$app->getLogger()->log('我是第二条日志');
echo PHP_EOL;


PHP intdiv()函数

<?php
echo intdiv(9,3),PHP_EOL;
echo intdiv(10,3),PHP_EOL;
echo intdiv(5,10),PHP_EOL;


list用法

前面是老版本,后面是php7.1.0用法

<?php
$arr = [1, 2, 3];
list($a, $b, $c) = $arr;
var_dump($a, $b, $c);

$arr = [4, 5, 6];
[$a, $b, $c] = $arr;
var_dump($a, $b, $c);


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接