程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP7 新特性 簡介,php7新特性簡介

PHP7 新特性 簡介,php7新特性簡介

編輯:關於PHP編程

PHP7 新特性 簡介,php7新特性簡介


整理了一些常用的新特性,歡迎點贊!!!

 

新增操作符
1、??
$username = $_GET['user'] ?? '';
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

2、<=>
$number1 <=> $number2; 當 $number1 小於、等於、大於 $number2 時 分別返回 -1,0,1


新增函數
intdiv(被除數, 除數) — 對除法結果取整
intdiv(3, 2) //1



define 可以定義數組
define('ANIMALS', [
'dog',
'cat',
'bird'
]);

 


返回類型聲明
function test() :int
{
return 1; //true
return '1'; //true
return 'string'; //false
}


標量類型聲明
function test(string $name) :int
{
return 22;
}
string integer float boolean


可以捕獲核心錯誤
Error層次結構
Throwable
  Error
    ArithmeticError
      DivisionByZeroError

    AssertionError
    ParseError
    TypeError

  Exception


核心排序的優化
php5: array(1=>0, 0=>0) //快速排序(非穩定排序)
php7: array(0=>0, 1=>0) //快速排序+選擇排序(穩定排序)



比php5多了個抽象語法數(abstract snytax tree) AST
PHP -> Parser -> AST ->Opcodes -> Execution
性能增加了,內存消耗也在增加但可以忽略不計


匿名類 可以通過new class實例化一個匿名類
function getAnonymousClass($config) {
return new class($config) {};
}



暫時綁定一個方法到對象上並調用
$f = function() {
p($this->name);
};

class F {
private $name = 'F';
}

$f->call(new F);




統一的語法變量
括號不影響行為 從左至右

$a = 'b';
$b = ['1', '2', '3'];
var_dump($$a[1]);
var_dump(($$a)[1]);

php5:
Notice: Uninitialized string offset: 1 in E:\Program Files\phpStudy\WWW\test.php on line 4
Notice: Undefined variable: in E:\Program Files\phpStudy\WWW\test.php on line 4
NULL

Parse error: syntax error, unexpected '[' in E:\Program Files\phpStudy\WWW\test.php on line 4

php7: string(1) "2" string(1) "2"


     Expression          PHP5         PHP7
$$foo['bar']['baz']  ${$foo['bar']['baz']}   ($$foo)['bar']['baz']
$foo->$bar['baz']    $foo->{$bar['baz']}    ($foo->$bar)['baz']
$foo->$bar['baz']()    $foo->{$bar['baz']}()   ($foo->$bar)['baz']()
Foo::$bar['baz']()    Foo::{$bar['baz']}()    (Foo::$bar)['baz']()




關於命名空間
// Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// PHP 7+ code
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};


list 的修改
  1、
  list($array[], $array[], $array[]) = [1, 2, 3];
  var_dump($array);
  php5: array(3) { [0]=> int(3) [1]=> int(2) [2]=> int(1) }
  php7: array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }


  2、不允許賦空值
  list() = $a;
  list(,,) = $a;
  list($x, list(), $y) = $a;

  php7會報錯 Fatal error: Cannot use empty list

  3、不再支持字符串拆分
  $string = "xy";
  list($x, $y) = $string;
  var_dump($x, $y);

  php5: string(1) "x" string(1) "y"
  php7: null null

foreach 的修改
變量引用,會影響對數組的循環
$array = [0];
foreach ($array as &$val) {
var_dump($val);
$array[1] = 1;
}
php5:int(0)
php7: int(0) int(1)

 

參考的源地址:http://www.php7.site/book/php7/variable-changes-22.html

提高php性能的tips:http://www.laruence.com/2015/12/04/3086.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved