91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP5-8各版本的特性是什么

發布時間:2022-07-27 16:56:45 來源:億速云 閱讀:126 作者:iii 欄目:編程語言

今天小編給大家分享一下PHP5-8各版本的特性是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

PHP5-8各版本的特性是什么

PHP5-8各版本特性匯總

PHP5.1:

  • autoload

  • PDO

  • MySQLi

  • 類型約束

PHP5.2:

  • JSON 支持

PHP5.3:

  • 命名空間

  • 匿名函數

  • 閉包

  • 新增魔術方法__callStatic()__invoke()

  • 新增魔術變量__DIR__

  • 動態調用靜態方法

  • 延遲靜態綁定

  • Heredoc和 Nowdoc

  • 類外使用const定義常量

  • 三元運算符

  • Phar

PHP5.4:

  • Short Open Tag

  • 數組簡寫

  • Traits,

  • 內置 Web 服務器

  • 動態訪問靜態方法

  • 實例化時訪問類成員

PHP5.5:

  • yield

  • list用于foreach

  • 細節修改

PHP5.6:

  • 常量增強

  • 命名空間增強

  • 可變函數參數

PHP7.0:

  • 標量類型聲明

  • 返回值類型聲明

  • defined定義常量數組

  • 匿名類

  • null合并運算符

PHP7.1:

  • 可為空類型

  • void類型

  • 多異常捕獲

PHP7.2:

  • 新的對象object

  • 允許重寫抽象方法

PHP7.3:語法層面沒有很大的改變

PHP7.4:

  • 類型屬性

  • 箭頭函數

  • Null合并運算符支持方法

  • Opcache 預加載

PHP8.0:

  • JIT即時編譯

  • 命名參數

  • 注解

  • 聯合類型

  • Match表達式

  • Nullsafe 運算符

  • 構造器屬性提升

PHP5.1


__autoload()魔術方法

這是一個自動加載函數,在PHP5中,當我們實例化一個未定義的類時,就會觸發此函數。可以通過定義這個函數來啟用類的自動加載。
function  __autoload($className) {  
    $filePath = “project/class/{$className}.php”;  
    if (is_readable($filePath)) {  
        require($filePath);  //這里可以只用require,因為一旦包含進來后,php引擎再遇到類A時,將不會調用__autoload,而是直接使用內存中的類A,不會導致多次包含。
    }  
}  
$a = new A();  
$b = new B();  
$c = new C();

PHP中__autoload()魔術方法詳解

PDO

PHP 數據對象 (PDO) 擴展為PHP訪問數據庫定義了一個輕量級的一致接口。
安裝

可以通過 PHP 的 phpinfo() 函數來查看是否安裝了PDO擴展。

//Linux
extension=pdo.so
//Windows  
extension=php_pdo.dll
使用
<?php
$dbms='mysql';     //數據庫類型
$host='localhost'; //數據庫主機名
$dbName='test';    //使用的數據庫
$user='root';      //數據庫連接用戶名
$pass='';          //對應的密碼
$dsn="$dbms:host=$host;dbname=$dbName";


try {
    $dbh = new PDO($dsn, $user, $pass); //初始化一個PDO對象
    echo "連接成功<br/>";
    /*你還可以進行一次搜索操作
    foreach ($dbh->query('SELECT * from FOO') as $row) {
        print_r($row); //你可以用 echo($GLOBAL); 來看到這些值
    }
    */
    $dbh = null;
} catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "<br/>");
}
//默認這個不是長連接,如果需要數據庫長連接,需要最后加一個參數:array(PDO::ATTR_PERSISTENT => true) 變成這樣:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));

PHP PDO

MySQLi

mysqli.dll是PHP對mysql新特性的一個擴展支持,允許訪問MySQL 4.1及以上版本提供的功能。
mysql與mysqli的區別:
  • mysqli連接是永久連接,而mysql是非永久連接。

  • mysql連接每當第二次使用的時候,都會重新打開一個新的進程。mysqli連接一直都只使用同一個進程。

使用
$conn = mysqli_connect('localhost', 'root', '123', 'db_test') or ('error');
$sql = "select * from db_table";
$query = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($query)){
    echo $row['title'];
}

mysqli和mysql的區別是什么

類型約束

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

// 限制第一個參數為 MyClass, 第二個參數為可執行類型,第三個參數為數組
function MyFunction(MyClass $a, callable $b, array $c)
{
    // ...
}

PHP5.2


JSON

  • json_encode — 對變量進行 JSON 編碼

  • json_decode — 對 JSON 格式的字符串進行解碼

PHP5.3


命名空間

避免不同包中的類名或變量名產生沖突
<?php
namespace XXX; // 命名空間的分隔符是反斜杠,該聲明語句必須在文件第一行。

匿名函數(閉包)

用來臨時性地創建一個無名函數,用于回調函數等用途。
$func = function($arg)
{
    print $arg;
};
$func("Hello World! hovertree.top");

新增魔術方法__callStatic()__invoke()

__callStatic():用靜態方式中調用一個不可訪問方法時調用

__invoke() :以調用函數的方式調用一個對象時的回應方法

$person = new Person('小明'); // 初始賦值
$person(); //觸發__invoke()

新增魔術變量__DIR__

獲取當前執行的PHP腳本所在的目錄

如當前執行的PHP文件為 /htdocs/index.php,則__FILE__等于’/htdocs/index.php’,而__DIR__等于’/htdocs’。

動態調用靜態方法

public static function test($userName)
{
    //...
}

$className = 'cls';
$className::test('Tom'); // PHP >= 5.3.0

延遲靜態綁定

PHP 5.3.0中增加了一個static關鍵字來引用當前類,即實現了延遲靜態綁定。

這是因為 self 的語義本來就是“當前類”,所以 PHP5.3 給 static 關鍵字賦予了一個新功能:后期靜態綁定

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(); //A::funcXXOO()
class A
{
    static public function callFuncXXOO()
    {
        print static::funcXXOO();
    }
    // ...
}
B::callFuncXXOO(); //B::funcXXOO()

類外使用const定義常量

常量是一個簡單的標識符。在腳本執行期間該值不能改變(除了所謂的魔術常量,他們其實不是常量)。常量默認大小寫敏感。通常常量標識符總是大寫的。

可以用define()函數來定義常量。在php5.3.0以后,可以使用const關鍵字在類定義的外部定義常量,先前版本const關鍵字只能在類(class)中使用。一個常量一旦被定義,就不能再改變或取消定義。

const和define的區別?
  • const是一個語言結構,而define是一個函數。const在編譯時要比define快很多。

const用于類成員變量的定義,一經定義,不可修改。Define不可以用于類成員變量的定義,可用于全局常量。

  • Const可在類中使用,define不能

  • Const不能在條件語句中定義常量

  • const采用普通的常量名稱,define可以采用表達式作為名稱

  • const只能接受靜態的標量,而define可以采用任何表達式

  • const定義的常量時大小寫敏感,而define可以通過第三個參數(為true表示大小寫不敏感)來指定大小寫是否敏感。

PHP常量兩種定義方法:define和const有什么區別

簡化三元運算符

從PHP 5.3開始,通過排除中間表達式,甚至可以進一步簡化三元語句。 如果測試表達式在布爾上下文中評估為true,則返回其值。 否則,將返回替代方法。

<?php
$favoriteColor = $_GET["color"] ?: "pink";

Phar

PHP5.3之后支持了類似Java的jar包,名為phar。用來將多個PHP文件打包為一個文件。

創建一個phar壓縮包

$phar = new Phar('swoole.phar');
$phar->buildFromDirectory(__DIR__.'/../', '/.php$/');
$phar->compressFiles(Phar::GZ);
$phar->stopBuffering();
$phar->setStub($phar->createDefaultStub('lib_config.php'));

使用phar壓縮包

include 'swoole.phar';
include 'swoole.phar/code/page.php';

使用phar可以很方便的打包你的代碼,集成部署到線上機器。

  • php phar教程,PHP中phar包的使用教程

  • PHP 5.3中的新特性及被棄用的功能函數總結

  • PHP5各個版本的新功能和新特性總結

PHP5.4


Short Open Tag 短開放標簽

自 PHP5.4 起總是可用。
//可以把
<?php echo $xxoo;?>
//簡寫成:  
<?= $xxoo;?>

數組簡寫

// 原來的數組寫法
$arr = array("key" => "value", "key2" => "value2");
// 簡寫形式
$arr = ["key" => "value", "key2" => "value2"];

Traits

Traits是 PHP 多重繼承的一種解決方案。PHP中無法進行多重繼承,但一個類可以包含多個Traits
// Traits不能被單獨實例化,只能被類所包含
trait SayWorld
{
    public function sayHello()
    {
        echo 'World!';
    }
}
class MyHelloWorld
{
    // 將SayWorld中的成員包含進來
    use SayWorld;
}

$xxoo = new MyHelloWorld();
// sayHello() 函數是來自 SayWorld 構件的
$xxoo->sayHello();
優先級

基類中的成員函數將被Traits中的函數覆蓋,當前類中的成員函數將覆蓋Traits中的函數。

內置 Web 服務器

PHP從5.4開始內置一個輕量級的Web服務器,不支持并發,定位是用于開發和調試環境。
在開發環境使用它的確非常方便。

php -S localhost:8000

動態訪問靜態方法

$func = "funcXXOO";
A::{$func}();

實例化時訪問類成員

(new MyClass)->xxoo();

PHP5.5


yield關鍵字

yield關鍵字用于當函數需要返回一個迭代器的時候,逐個返回值。

function number10()
{
    for($i = 1; $i <= 10; $i += 1)
        yield $i;
}

list() 用于 foreach

$array = [
    [1, 2, 3],
    [4, 5, 6],
];
foreach ($array as list($a, $b, $c))
    echo "{$a} {$b} {$c}\n";

細節修改

  • 不推薦使用 mysql 函數,推薦使用 PDO 或 MySQLi

  • 不再支持Windows XP.

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

  • empty() 支持表達式作為參數

  • try-catch 結構新增 finally 塊

PHP5.6


常量增強

  • 定義常量時允許使用之前定義的常量進行計算

    const A = 2;
    const B = A + 1;
  • 允許常量作為函數參數默認值

    function func($arg = C::STR2)asdf

可變函數參數

用于代替 func_get_args()

function add(...$args)
{
  //...
}

同時可以在調用函數時,把數組展開為函數參數:

$arr = [2, 3];
add(1, ...$arr);

命名空間增強

命名空間支持常量和函數

PHP7.0


標量類型聲明

四種標量類型:boolean (布爾型),integer (整型),float (浮點型, 也稱作 double),string (字符串)

function typeString(string $a)
{
    echo $a;
}
typeString('sad'); //sad

返回值類型聲明

function returnErrorArray(): array
{
    return '1456546';
}
print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/

define 定義數組

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);
echo ANIMALS[1]; // 輸出 "cat"

匿名類

匿名類就像一個沒有事先定義的類,而在定義的時候直接就進行了實例化。

// 直接定義
$objA = new class{
    public function getName(){
        echo "I'm objA";
    }
};
$objA->getName();

null 合并運算符

$username = $_GET['user'] ?? 'nobody';
//這兩個是等效的  當不存在user 則返回?? 后面的參數
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

PHP7.1


可為空類型

參數以及返回值的類型現在可以通過在類型前加上一個問號使之允許為空。

當啟用這個特性時,傳入的參數或者函數返回的結果要么是給定的類型,要么是 null 。

<?php
  function testReturn(): ?string{
    return 'elePHPant';
  }

void類型

<?php
  function swap(&$left, &$right) : void{
    //...
  }

多異常捕獲

<?php
try {
    // some code
} catch (FirstException | SecondException $e) {
    // ...
}

PHP7.2


新的對象類型object

<?php
 
function test(object $obj) : object
{
    return new SplQueue();
}
 
test(new StdClass());

允許重寫抽象方法

當一個抽象類繼承于另外一個抽象類的時候,繼承后的抽象類可以重寫被繼承的抽象類的抽象方法。

<?php
 
abstract class A
{
    abstract function test(string $s);
}
abstract class B extends A
{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;
}

PHP7.4


類屬性支持類型聲明

<?php
class User {
    public int $id;
    public string $name;
}

箭頭函數

使用隱式按值作用域綁定定義函數的簡寫語法。

<?php
  $factor = 10;
  $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
  // $nums = array(10, 20, 30, 40);?>

Null 合并運算符支持方法

<?php
  $array['key'] ??= computeDefault();
  //if (!isset($array['key'])) {$array['key'] = computeDefault();}
?>

Opcache 預加載

Opcache將獲取您的PHP源文件,將其編譯為“ opcodes”,然后將這些編譯后的文件存儲在磁盤上。opcache會跳過源文件和PHP解釋器在運行時實際需要之間的轉換步驟。

  • 掌握PHP 7.x 各個版本的新特性

  • PHP7.0~PHP7.1~PHP7.2~PHP7.3~PHP7.4新特性

PHP8.0


JIT即時編譯

PHP8的JIT目前是在Opcache之中提供的

JIT在Opcache優化之后的基礎上,結合Runtime的信息再次優化,直接生成機器碼

JIT不是原來Opcache優化的替代,是增強

目前PHP8只支持x86架構的CPU

命名參數

就是具名參數,在調用函數的時候,可以指定參數名稱,指定參數名稱后,參數順序可以不安裝原函數參數順序傳
//傳統方式調用
balance(100, 20);
//php8 使用命名參數調用
balance(amount: 100, payment: 20);

注解

使用注解可以將類定義成一個一個低解耦,高內聚的元數據類。在使用的時候通過注解靈活引入,反射注解類實例的時候達到調用的目的。
注解類只有在被實例化的時候才會調用

聯合類型

在不確定參數類型的場景下,可以使用

function printSomeThing(string|int $value)
{
    var_dump($value);
}

Match表達式

和switch cash差不多,不過是嚴格===匹配

<?php
$key = 'b';
$str = match($key) {
    'a' => 'this a',
    'c' => 'this c',
     0  => 'this 0',
    'b' => 'last b',
  };
echo $str;//輸出 last b

Nullsafe 運算符

//不實例 User 類,設置為null
$user = null;
echo $user->getName();//php8之前調用,報錯
echo $user?->getName();//php8調用,不報錯,返回空

構造器屬性提升

在構造函數中可以聲明類屬性的修飾詞作用域

<?php
    // php8之前
    class User
    {
        protected string $name;
        protected int $age;
        public function __construct(string $name, int $age)
        {
            $this->name = $name;
            $this->age = $age;
        }
    }
    //php8寫法,
    class User
    {
        public function __construct(
            protected string $name,
            protected int $age
        ) {}
    }

以上就是“PHP5-8各版本的特性是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

错那县| 邢台市| 安顺市| 伊川县| 邻水| 尉犁县| 中阳县| 新干县| 射阳县| 肇州县| 南郑县| 西华县| 准格尔旗| 噶尔县| 南皮县| 类乌齐县| 晋江市| 固原市| 兰考县| 石屏县| 赣州市| 涪陵区| 富裕县| 泾川县| 手机| 岳西县| 滨州市| 内江市| 乌什县| 赤峰市| 朝阳区| 宁化县| 桦甸市| 南靖县| 肇东市| 新余市| 东辽县| 乡城县| 福安市| 措勤县| 永新县|