茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    PHP5各個(gè)版本的新功能和新特性總結(jié)
    來(lái)源:易賢網(wǎng) 閱讀:1047 次 日期:2014-08-22 11:14:58
    溫馨提示:易賢網(wǎng)小編為您整理了“PHP5各個(gè)版本的新功能和新特性總結(jié)”,方便廣大網(wǎng)友查閱!

    因?yàn)?PHP 那“集百家之長(zhǎng)”的蛋疼語(yǔ)法,加上社區(qū)氛圍不好,很多人對(duì)新版本,新特征并無(wú)興趣。本文將會(huì)介紹自 PHP5.2 起,直至 PHP5.6 中增加的新特征

    本文目錄:

    PHP5.2 以前:autoload, PDO 和 MySQLi, 類型約束

    PHP5.2:JSON 支持

    PHP5.3:棄用的功能,匿名函數(shù),新增魔術(shù)方法,命名空間,后期靜態(tài)綁定,Heredoc 和 Nowdoc, const, 三元運(yùn)算符,Phar

    PHP5.4:Short Open Tag, 數(shù)組簡(jiǎn)寫(xiě)形式,Traits, 內(nèi)置 Web 服務(wù)器,細(xì)節(jié)修改

    PHP5.5:yield, list() 用于 foreach, 細(xì)節(jié)修改

    PHP5.6: 常量增強(qiáng),可變函數(shù)參數(shù),命名空間增強(qiáng)

    一、PHP5.2以前(2006前)

    順便介紹一下 PHP5.2 已經(jīng)出現(xiàn)但值得介紹的特征。

    autoload

    大家可能都知道 __autoload() 函數(shù),如果定義了該函數(shù),那么當(dāng)在代碼中使用一個(gè)未定義的類的時(shí)候,該函數(shù)就會(huì)被調(diào)用,你可以在該函數(shù)中加載相應(yīng)的類實(shí)現(xiàn)文件,如:

    代碼如下:

    function __autoload($classname)

    {

    require_once("{$classname}.php")

    }

    但該函數(shù)已經(jīng)不被建議使用,原因是一個(gè)項(xiàng)目中僅能有一個(gè)這樣的 __autoload() 函數(shù),因?yàn)?PHP 不允許函數(shù)重名。但當(dāng)你使用一些類庫(kù)的時(shí)候,難免會(huì)出現(xiàn)多個(gè) autoload 函數(shù)的需要,于是 spl_autoload_register() 取而代之:

    復(fù)制代碼 代碼如下:spl_autoload_register(function($classname)

    {

    require_once("{$classname}.php")

    });

    spl_autoload_register() 會(huì)將一個(gè)函數(shù)注冊(cè)到 autoload 函數(shù)列表中,當(dāng)出現(xiàn)未定義的類的時(shí)候,SPL [注] 會(huì)按照注冊(cè)的倒序逐個(gè)調(diào)用被注冊(cè)的 autoload 函數(shù),這意味著你可以使用 spl_autoload_register() 注冊(cè)多個(gè) autoload 函數(shù).

    注:SPL: Standard PHP Library, 標(biāo)準(zhǔn) PHP 庫(kù), 被設(shè)計(jì)用來(lái)解決一些經(jīng)典問(wèn)題(如數(shù)據(jù)結(jié)構(gòu)).

    PDO 和 MySQLi

    即 PHP Data Object, PHP 數(shù)據(jù)對(duì)象,這是 PHP 的新式數(shù)據(jù)庫(kù)訪問(wèn)接口。

    按照傳統(tǒng)的風(fēng)格,訪問(wèn) MySQL 數(shù)據(jù)庫(kù)應(yīng)該是這樣子:

    代碼如下:

    // 連接到服務(wù)器,選擇數(shù)據(jù)庫(kù)

    $conn = mysql_connect("localhost", "user", "password");

    mysql_select_db("database");

    // 執(zhí)行 SQL 查詢

    $type = $_POST['type'];

    $sql = "SELECT * FROM `table` WHERE `type` = {$type}";

    $result = mysql_query($sql);

    // 打印結(jié)果

    while($row = mysql_fetch_array($result, MYSQL_ASSOC))

    {

    foreach($row as $k => $v)

    print "{$k}: {$v}n";

    }

    // 釋放結(jié)果集,關(guān)閉連接

    mysql_free_result($result);

    mysql_close($conn);

    為了能夠讓代碼實(shí)現(xiàn)數(shù)據(jù)庫(kù)無(wú)關(guān),即一段代碼同時(shí)適用于多種數(shù)據(jù)庫(kù)(例如以上代碼僅僅適用于MySQL),PHP 官方設(shè)計(jì)了 PDO.

    除此之外,PDO 還提供了更多功能,比如:

    1.面向?qū)ο箫L(fēng)格的接口

    2.SQL預(yù)編譯(prepare), 占位符語(yǔ)法

    3.更高的執(zhí)行效率,作為官方推薦,有特別的性能優(yōu)化

    4.支持大部分SQL數(shù)據(jù)庫(kù),更換數(shù)據(jù)庫(kù)無(wú)需改動(dòng)代碼

    上面的代碼用 PDO 實(shí)現(xiàn)將會(huì)是這樣:

    代碼如下:

    // 連接到數(shù)據(jù)庫(kù)

    $conn = new PDO("mysql:host=localhost;dbname=database", "user", "password");

    // 預(yù)編譯SQL, 綁定參數(shù)

    $query = $conn->prepare("SELECT * FROM `table` WHERE `type` = :type");

    $query->bindParam("type", $_POST['type']);

    // 執(zhí)行查詢并打印結(jié)果

    foreach($query->execute() as $row)

    {

    foreach($row as $k => $v)

    print "{$k}: {$v}n";

    }

    PDO 是官方推薦的,更為通用的數(shù)據(jù)庫(kù)訪問(wèn)方式,如果你沒(méi)有特殊需求,那么你最好學(xué)習(xí)和使用 PDO.

    但如果你需要使用 MySQL 所特有的高級(jí)功能,那么你可能需要嘗試一下 MySQLi, 因?yàn)?PDO 為了能夠同時(shí)在多種數(shù)據(jù)庫(kù)上使用,不會(huì)包含那些 MySQL 獨(dú)有的功能。

    MySQLi 是 MySQL 的增強(qiáng)接口,同時(shí)提供面向過(guò)程和面向?qū)ο蠼涌?,也是目前推薦的 MySQL 驅(qū)動(dòng),舊的C風(fēng)格 MySQL 接口將會(huì)在今后被默認(rèn)關(guān)閉。

    MySQLi 的用法和以上兩段代碼相比,沒(méi)有太多新概念,在此不再給出示例,可以參見(jiàn) PHP 官網(wǎng)文檔 [注]。

    注:http://www.php.net/manual/en/mysqli.quickstart.php

    類型約束

    通過(guò)類型約束可以限制參數(shù)的類型,不過(guò)這一機(jī)制并不完善,目前僅適用于類和 callable(可執(zhí)行類型) 以及 array(數(shù)組), 不適用于 string 和 int.

    代碼如下:

    // 限制第一個(gè)參數(shù)為 MyClass, 第二個(gè)參數(shù)為可執(zhí)行類型,第三個(gè)參數(shù)為數(shù)組

    function MyFunction(MyClass $a, callable $b, array $c)

    {

    // ...

    }

    PHP5.2(2006-2011):JSON 支持

    包括 json_encode(), json_decode() 等函數(shù),JSON 算是在 Web 領(lǐng)域非常常用的數(shù)據(jù)交換格式,可以被 JS 直接支持,JSON 實(shí)際上是 JS 語(yǔ)法的一部分。

    JSON 系列函數(shù),可以將 PHP 中的數(shù)組結(jié)構(gòu)與 JSON 字符串進(jìn)行轉(zhuǎn)換:

    代碼如下:

    $array = ["key" => "value", "array" => [1, 2, 3, 4]];

    $json = json_encode($array);

    echo "{$json}n";

    $object = json_decode($json);

    print_r($object);

    輸出:

    代碼如下:

    {"key":"value","array":[1,2,3,4]}

    stdClass Object

    (

    [key] => value

    [array] => Array

    (

    [0] => 1

    [1] => 2

    [2] => 3

    [3] => 4

    )

    )

    值得注意的是 json_decode() 默認(rèn)會(huì)返回一個(gè)對(duì)象而非數(shù)組,如果需要返回?cái)?shù)組需要將第二個(gè)參數(shù)設(shè)置為 true.

    PHP5.3(2009-2012)

    PHP5.3 算是一個(gè)非常大的更新,新增了大量新特征,同時(shí)也做了一些不向下兼容的修改。

    【PHP5.3棄用的功能】:以下幾個(gè)功能被棄用,若在配置文件中啟用,則 PHP 會(huì)在運(yùn)行時(shí)發(fā)出警告。

    Register Globals

    這是 php.ini 中的一個(gè)選項(xiàng)(register_globals), 開(kāi)啟后會(huì)將所有表單變量($_GET和$_POST)注冊(cè)為全局變量.

    看下面的例子:

    代碼如下:

    if(isAuth())

    $authorized = true;

    if($authorized)

    include("page.php");

    這段代碼在通過(guò)驗(yàn)證時(shí),將 $authorized 設(shè)置為 true. 然后根據(jù) $authorized 的值來(lái)決定是否顯示頁(yè)面.

    但由于并沒(méi)有事先把 $authorized 初始化為 false, 當(dāng) register_globals 打開(kāi)時(shí),可能訪問(wèn) /auth.php?authorized=1 來(lái)定義該變量值,繞過(guò)身份驗(yàn)證。

    該特征屬于歷史遺留問(wèn)題,在 PHP4.2 中被默認(rèn)關(guān)閉,在 PHP5.4 中被移除。

    Magic Quotes

    對(duì)應(yīng) php.ini 中的選項(xiàng) magic_quotes_gpc, 這個(gè)特征同樣屬于歷史遺留問(wèn)題,已經(jīng)在 PHP5.4 中移除。

    該特征會(huì)將所有用戶輸入進(jìn)行轉(zhuǎn)義,這看上去不錯(cuò),在第一章我們提到過(guò)要對(duì)用戶輸入進(jìn)行轉(zhuǎn)義。

    但是 PHP 并不知道哪些輸入會(huì)進(jìn)入 SQL , 哪些輸入會(huì)進(jìn)入 Shell, 哪些輸入會(huì)被顯示為 HTML, 所以很多時(shí)候這種轉(zhuǎn)義會(huì)引起混亂。

    Safe Mode

    很多虛擬主機(jī)提供商使用 Safe Mode 來(lái)隔離多個(gè)用戶,但 Safe Mode 存在諸多問(wèn)題,例如某些擴(kuò)展并不按照 Safe Mode 來(lái)進(jìn)行權(quán)限控制。

    PHP官方推薦使用操作系統(tǒng)的機(jī)制來(lái)進(jìn)行權(quán)限隔離,讓W(xué)eb服務(wù)器以不同的用戶權(quán)限來(lái)運(yùn)行PHP解釋器,請(qǐng)參見(jiàn)第一章中的最小權(quán)限原則.

    【PHP5.3的新增、改進(jìn)】

    匿名函數(shù)

    也叫閉包(Closures), 經(jīng)常被用來(lái)臨時(shí)性地創(chuàng)建一個(gè)無(wú)名函數(shù),用于回調(diào)函數(shù)等用途。

    代碼如下:

    $func = function($arg)

    {

    print $arg;

    };

    $func("Hello World");

    以上代碼定義了一個(gè)匿名函數(shù),并賦值給了 $func.

    可以看到定義匿名函數(shù)依舊使用 function 關(guān)鍵字,只不過(guò)省略了函數(shù)名,直接是參數(shù)列表。

    然后我們又調(diào)用了 $func 所儲(chǔ)存的匿名函數(shù)。

    匿名函數(shù)還可以用 use 關(guān)鍵字來(lái)捕捉外部變量:

    復(fù)制代碼 代碼如下:function arrayPlus($array, $num)

    {

    array_walk($array, function(&$v) use($num){

    $v += $num;

    });

    }

    上面的代碼定義了一個(gè) arrayPlus() 函數(shù)(這不是匿名函數(shù)), 它會(huì)將一個(gè)數(shù)組($array)中的每一項(xiàng),加上一個(gè)指定的數(shù)字($num).

    在 arrayPlus() 的實(shí)現(xiàn)中,我們使用了 array_walk() 函數(shù),它會(huì)為一個(gè)數(shù)組的每一項(xiàng)執(zhí)行一個(gè)回調(diào)函數(shù),即我們定義的匿名函數(shù)。

    在匿名函數(shù)的參數(shù)列表后,我們用 use 關(guān)鍵字將匿名函數(shù)外的 $num 捕捉到了函數(shù)內(nèi),以便知道到底應(yīng)該加上多少。

    魔術(shù)方法:__invoke(), __callStatic()

    PHP 的面向?qū)ο篌w系中,提供了若干“魔術(shù)方法”,用于實(shí)現(xiàn)類似其他語(yǔ)言中的“重載”,如在訪問(wèn)不存在的屬性、方法時(shí)觸發(fā)某個(gè)魔術(shù)方法。

    隨著匿名函數(shù)的加入,PHP 引入了一個(gè)新的魔術(shù)方法 __invoke().

    該魔術(shù)方法會(huì)在將一個(gè)對(duì)象作為函數(shù)調(diào)用時(shí)被調(diào)用:

    代碼如下:

    class A

    {

    public function __invoke($str)

    {

    print "A::__invoke(): {$str}";

    }

    }

    $a = new A;

    $a("Hello World");

    輸出毫無(wú)疑問(wèn)是:

    代碼如下:

    A::__invoke(): Hello World

    __callStatic() 則會(huì)在調(diào)用一個(gè)不存在的靜態(tài)方法時(shí)被調(diào)用。

    命名空間

    PHP的命名空間有著前無(wú)古人后無(wú)來(lái)者的無(wú)比蛋疼的語(yǔ)法:

    代碼如下:

    <?php

    // 命名空間的分隔符是反斜杠,該聲明語(yǔ)句必須在文件第一行。

    // 命名空間中可以包含任意代碼,但只有 **類, 函數(shù), 常量** 受命名空間影響。

    namespace XXOOTest;

    // 該類的完整限定名是 XXOOTestA , 其中第一個(gè)反斜杠表示全局命名空間。

    class A{}

    // 你還可以在已經(jīng)文件中定義第二個(gè)命名空間,接下來(lái)的代碼將都位于 OtherTest2 .

    namespace OtherTest2;

    // 實(shí)例化來(lái)自其他命名空間的對(duì)象:

    $a = new XXOOTestA;

    class B{}

    // 你還可以用花括號(hào)定義第三個(gè)命名空間

    namespace Other {

    // 實(shí)例化來(lái)自子命名空間的對(duì)象:

    $b = new Test2B;

    // 導(dǎo)入來(lái)自其他命名空間的名稱,并重命名,

    // 注意只能導(dǎo)入類,不能用于函數(shù)和常量。

    use XXOOTestA as ClassA

    }

    更多有關(guān)命名空間的語(yǔ)法介紹請(qǐng)參見(jiàn)官網(wǎng) [注].

    命名空間時(shí)常和 autoload 一同使用,用于自動(dòng)加載類實(shí)現(xiàn)文件:

    spl_autoload_register(

    function ($class) {

    spl_autoload(str_replace("", "/", $class));

    }

    );

    當(dāng)你實(shí)例化一個(gè)類 XXOOTestA 的時(shí)候,這個(gè)類的完整限定名會(huì)被傳遞給 autoload 函數(shù),autoload 函數(shù)將類名中的命名空間分隔符(反斜杠)替換為斜杠,并包含對(duì)應(yīng)文件。

    這樣可以實(shí)現(xiàn)類定義文件分級(jí)儲(chǔ)存,按需自動(dòng)加載。

    注:http://www.php.net/manual/zh/language.namespaces.php

    后期靜態(tài)綁定

    PHP 的 OPP 機(jī)制,具有繼承和類似虛函數(shù)的功能,例如如下的代碼:

    代碼如下:

    class A

    {

    public function callFuncXXOO()

    {

    print $this->funcXXOO();

    }

    public function funcXXOO()

    {

    return "A::funcXXOO()";

    }

    }

    class B extends A

    {

    public function funcXXOO()

    {

    return "B::funcXXOO";

    }

    }

    $b = new B;

    $b->callFuncXXOO();

    輸出是:

    代碼如下:

    B::funcXXOO

    可以看到,當(dāng)在 A 中使用 $this->funcXXOO() 時(shí),體現(xiàn)了“虛函數(shù)”的機(jī)制,實(shí)際調(diào)用的是 B::funcXXOO().

    然而如果將所有函數(shù)都改為靜態(tài)函數(shù):

    代碼如下:

    class A

    {

    static public function callFuncXXOO()

    {

    print self::funcXXOO();

    }

    static public function funcXXOO()

    {

    return "A::funcXXOO()";

    }

    }

    class B extends A

    {

    static public function funcXXOO()

    {

    return "B::funcXXOO";

    }

    }

    $b = new B;

    $b->callFuncXXOO();

    情況就沒(méi)這么樂(lè)觀了,輸出是:

    代碼如下:

    A::funcXXOO()

    這是因?yàn)?self 的語(yǔ)義本來(lái)就是“當(dāng)前類”,所以 PHP5.3 給 static 關(guān)鍵字賦予了一個(gè)新功能:后期靜態(tài)綁定:

    代碼如下:

    class A

    {

    static public function callFuncXXOO()

    {

    print static::funcXXOO();

    }

    // ...

    }

    // ...

    這樣就會(huì)像預(yù)期一樣輸出了:

    代碼如下:

    B::funcXXOO

    Heredoc 和 Nowdoc

    PHP5.3 對(duì) Heredoc 以及 Nowdoc 進(jìn)行了一些改進(jìn),它們都用于在 PHP 代碼中嵌入大段字符串。

    Heredoc 的行為類似于一個(gè)雙引號(hào)字符串:

    代碼如下:

    $name = "MyName";

    echo <<< TEXT

    My name is "{$name}".

    TEXT;

    Heredoc 以三個(gè)左尖括號(hào)開(kāi)始,后面跟一個(gè)標(biāo)識(shí)符(TEXT), 直到一個(gè)同樣的頂格的標(biāo)識(shí)符(不能縮進(jìn))結(jié)束。

    就像雙引號(hào)字符串一樣,其中可以嵌入變量。

    Heredoc 還可以用于函數(shù)參數(shù),以及類成員初始化:

    代碼如下:

    var_dump(<<<EOD

    Hello World

    EOD

    );

    class A

    {

    const xx = <<< EOD

    Hello World

    EOD;

    public $oo = <<< EOD

    Hello World

    EOD;

    }

    Nowdoc 的行為像一個(gè)單引號(hào)字符串,不能在其中嵌入變量,和 Heredoc 唯一的區(qū)別就是,三個(gè)左尖括號(hào)后的標(biāo)識(shí)符要以單引號(hào)括起來(lái):

    復(fù)制代碼 代碼如下:$name = "MyName";

    echo <<< 'TEXT'

    My name is "{$name}".

    TEXT;

    輸出:

    復(fù)制代碼 代碼如下:My name is "{$name}".

    用 const 定義常量

    PHP5.3 起同時(shí)支持在全局命名空間和類中使用 const 定義常量。

    舊式風(fēng)格:

    代碼如下:

    define("XOOO", "Value");

    新式風(fēng)格:

    const XXOO = "Value";

    const 形式僅適用于常量,不適用于運(yùn)行時(shí)才能求值的表達(dá)式:

    代碼如下:

    // 正確

    const XXOO = 1234;

    // 錯(cuò)誤

    const XXOO = 2 * 617;

    三元運(yùn)算符簡(jiǎn)寫(xiě)形式

    舊式風(fēng)格:

    代碼如下:

    echo $a ? $a : "No Value";

    可簡(jiǎn)寫(xiě)成:

    代碼如下:

    echo $a ?: "No Value";

    即如果省略三元運(yùn)算符的第二個(gè)部分,會(huì)默認(rèn)用第一個(gè)部分代替。

    Phar

    Phar即PHP Archive, 起初只是Pear中的一個(gè)庫(kù)而已,后來(lái)在PHP5.3被重新編寫(xiě)成C擴(kuò)展并內(nèi)置到 PHP 中。

    Phar用來(lái)將多個(gè) .php 腳本打包(也可以打包其他文件)成一個(gè) .phar 的壓縮文件(通常是ZIP格式)。

    目的在于模仿 Java 的 .jar, 不對(duì),目的是為了讓發(fā)布PHP應(yīng)用程序更加方便。同時(shí)還提供了數(shù)字簽名驗(yàn)證等功能。

    .phar 文件可以像 .php 文件一樣,被PHP引擎解釋執(zhí)行,同時(shí)你還可以寫(xiě)出這樣的代碼來(lái)包含(require) .phar 中的代碼:

    代碼如下:

    require("xxoo.phar");

    require("phar://xxoo.phar/xo/ox.php");

    更多信息請(qǐng)參見(jiàn)官網(wǎng) [注].

    注:http://www.php.net/manual/zh/phar.using.intro.php

    PHP5.4(2012-2013)

    Short Open Tag

    Short Open Tag 自 PHP5.4 起總是可用。

    在這里集中講一下有關(guān) PHP 起止標(biāo)簽的問(wèn)題。即:

    代碼如下:

    <?php

    // Code...

    ?>

    通常就是上面的形式,除此之外還有一種簡(jiǎn)寫(xiě)形式:

    代碼如下:

    <? /* Code... */ ?>

    還可以把

    復(fù)制代碼 代碼如下:<?php echo $xxoo;?>

    簡(jiǎn)寫(xiě)成:

    代碼如下:

    <?= $xxoo;?>

    這種簡(jiǎn)寫(xiě)形式被稱為 Short Open Tag, 在 PHP5.3 起被默認(rèn)開(kāi)啟,在 PHP5.4 起總是可用。

    使用這種簡(jiǎn)寫(xiě)形式在 HTML 中嵌入 PHP 變量將會(huì)非常方便。

    對(duì)于純 PHP 文件(如類實(shí)現(xiàn)文件), PHP 官方建議頂格寫(xiě)起始標(biāo)記,同時(shí) 省略 結(jié)束標(biāo)記。

    這樣可以確保整個(gè) PHP 文件都是 PHP 代碼,沒(méi)有任何輸出,否則當(dāng)你包含該文件后,設(shè)置 Header 和 Cookie 時(shí)會(huì)遇到一些麻煩 [注].

    注:Header 和 Cookie 必須在輸出任何內(nèi)容之前被發(fā)送。

    數(shù)組簡(jiǎn)寫(xiě)形式

    這是非常方便的一項(xiàng)特征!

    代碼如下:

    // 原來(lái)的數(shù)組寫(xiě)法

    $arr = array("key" => "value", "key2" => "value2");

    // 簡(jiǎn)寫(xiě)形式

    $arr = ["key" => "value", "key2" => "value2"];

    Traits

    所謂Traits就是“構(gòu)件”,是用來(lái)替代繼承的一種機(jī)制。PHP中無(wú)法進(jìn)行多重繼承,但一個(gè)類可以包含多個(gè)Traits.

    代碼如下:

    // Traits不能被單獨(dú)實(shí)例化,只能被類所包含

    trait SayWorld

    {

    public function sayHello()

    {

    echo 'World!';

    }

    }

    class MyHelloWorld

    {

    // 將SayWorld中的成員包含進(jìn)來(lái)

    use SayWorld;

    }

    $xxoo = new MyHelloWorld();

    // sayHello() 函數(shù)是來(lái)自 SayWorld 構(gòu)件的

    $xxoo->sayHello();

    Traits還有很多神奇的功能,比如包含多個(gè)Traits, 解決沖突,修改訪問(wèn)權(quán)限,為函數(shù)設(shè)置別名等等。

    Traits中也同樣可以包含Traits. 篇幅有限不能逐個(gè)舉例,詳情參見(jiàn)官網(wǎng) [注].

    注:http://www.php.net/manual/zh/language.oop5.traits.php

    內(nèi)置 Web 服務(wù)器

    PHP從5.4開(kāi)始內(nèi)置一個(gè)輕量級(jí)的Web服務(wù)器,不支持并發(fā),定位是用于開(kāi)發(fā)和調(diào)試環(huán)境。

    在開(kāi)發(fā)環(huán)境使用它的確非常方便。

    代碼如下:

    php -S localhost:8000

    這樣就在當(dāng)前目錄建立起了一個(gè)Web服務(wù)器,你可以通過(guò) http://localhost:8000/ 來(lái)訪問(wèn)。

    其中l(wèi)ocalhost是監(jiān)聽(tīng)的ip,8000是監(jiān)聽(tīng)的端口,可以自行修改。

    很多應(yīng)用中,都會(huì)進(jìn)行URL重寫(xiě),所以PHP提供了一個(gè)設(shè)置路由腳本的功能:

    代碼如下:

    php -S localhost:8000 index.php

    這樣一來(lái),所有的請(qǐng)求都會(huì)由index.php來(lái)處理。

    你還可以使用 XDebug 來(lái)進(jìn)行斷點(diǎn)調(diào)試。

    細(xì)節(jié)修改

    PHP5.4 新增了動(dòng)態(tài)訪問(wèn)靜態(tài)方法的方式:

    復(fù)制代碼 代碼如下:$func = "funcXXOO";

    A::{$func}();

    新增在實(shí)例化時(shí)訪問(wèn)類成員的特征:

    碼 代碼如下:(new MyClass)->xxoo();

    新增支持對(duì)函數(shù)返回?cái)?shù)組的成員訪問(wèn)解析(這種寫(xiě)法在之前版本是會(huì)報(bào)錯(cuò)的):

    代碼如下:

    print func()[0];

    PHP5.5(2013起)

    yield

    yield關(guān)鍵字用于當(dāng)函數(shù)需要返回一個(gè)迭代器的時(shí)候, 逐個(gè)返回值。

    代碼如下:

    function number10()

    {

    for($i = 1; $i <= 10; $i += 1)

    yield $i;

    }

    該函數(shù)的返回值是一個(gè)數(shù)組:

    代碼如下:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    list() 用于 foreach

    可以用 list() 在 foreach 中解析嵌套的數(shù)組:

    代碼如下:

    $array = [

    [1, 2, 3],

    [4, 5, 6],

    ];

    foreach ($array as list($a, $b, $c))

    echo "{$a} {$b} {$c}n";

    結(jié)果:

    代碼如下:

    1 2 3

    4 5 6

    細(xì)節(jié)修改

    不推薦使用 mysql 函數(shù),推薦使用 PDO 或 MySQLi, 參見(jiàn)前文。

    不再支持Windows XP.

    可用 MyClass::class 取到一個(gè)類的完整限定名(包括命名空間)。

    empty() 支持表達(dá)式作為參數(shù)。

    try-catch 結(jié)構(gòu)新增 finally 塊。

    PHP5.6

    更好的常量

    定義常量時(shí)允許使用之前定義的常量進(jìn)行計(jì)算:

    代碼如下:

    const A = 2;

    const B = A + 1;

    class C

    {

    const STR = "hello";

    const STR2 = self::STR + ", world";

    }

    允許常量作為函數(shù)參數(shù)默認(rèn)值:

    代碼如下:

    function func($arg = C::STR2)

    更好的可變函數(shù)參數(shù)

    用于代替 func_get_args()

    代碼如下:

    function add(...$args)

    {

    $result = 0;

    foreach($args as $arg)

    $result += $arg;

    return $result;

    }

    同時(shí)可以在調(diào)用函數(shù)時(shí),把數(shù)組展開(kāi)為函數(shù)參數(shù):

    代碼如下:

    $arr = [2, 3];

    add(1, ...$arr);

    // 結(jié)果為 6

    命名空間

    命名空間支持常量和函數(shù):

    代碼如下:

    namespace NameSpace {

    const FOO = 42;

    function f() { echo __FUNCTION__."n"; }

    }

    namespace {

    use const NameSpaceFOO;

    use function NameSpacef;

    echo FOO."n";

    f();

    }

    更多信息請(qǐng)查看IT技術(shù)專欄

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:PHP5各個(gè)版本的新功能和新特性總結(jié)
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)