性能测试
解压
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);