#php7 と PHP5 の新機能とパフォーマンスの最適化の比較
1. 抽象構文ツリー (AST) ) )
AST は、PHP コンパイル プロセスでミドルウェアの役割を果たし、インタープリターからオペコードを直接吐き出す元の方法を置き換え、インタープリター (パーサー) とコンパイラー (コンパイラー) を分離します。これにより、一部のハック コードを削減できると同時に、実装の理解と保守が容易になります。2. Natice TLS:
スレッド データ共有セキュリティ、データ共有メモリ空間として使用するグローバル スレッドを開きます3. パラメーターの戻り値の型を指定します
4. zval 構造の変更
5. 例外処理
PHP 5 の try...catch。 ..最終的に従来のエラーを処理することはできません。通常は、必要に応じて set_error_handler() を使用してエラーをハッキングすることを検討します。ただし、set_error_handler() で捕捉できないエラー タイプはまだ多くあります。PHP 7 では Throwable インターフェイスが導入されました。エラーと例外の両方が Throwable を実装します。Throwable は直接実装できませんが、\Exception クラスと \Error クラスが実装されます。延長することができます。 Throwable を使用して例外やエラーをキャッチできます。 \Exception はすべての PHP 例外およびユーザー例外の基本クラスであり、\Error はすべての内部 PHP エラーの基本クラスです。6. 新しいパラメータ解析メソッド
7. ハッシュテーブルの変更
バケットと Zval は個別にメモリを割り当てなくなりました。無駄な冗長性がたくさんあります。8. Null Coalesce 演算子
例に直接:$name = $name ?? "NoName"; // 如果$name有值就取其值,否则设$name成"NoName"
9. Spaceship Operator Operator) (結合比較演算子)
形式:(expr) 96b4fef55684b9312718d5de63fb7121 (expr)
左のオペランドが小さい場合は - 1、左と右のオペランドが小さい場合は - 1等しい場合は 0 が返され、左のオペランドの方が大きい場合は 1 が返されます。$name = ["Simen", "Suzy", "Cook", "Stella"]; usort($name, function ($left, $right) { return $left <=> $right; }); print_r($name);
10. 定数配列
PHP 7 では、以前はクラス/インターフェイスでのみ定数配列の使用が許可されていましたが、現在は PHP 7 では非クラス/インターフェイスもサポートされています。通常の定数の配列。define("USER", [ "name" => "Simen", "sex" => "Male", "age" => "38", "skill" => ["PHP", "MySQL", "C"] ]); // USER["skill"][2] = "C/C++"; // PHP Fatal error: Cannot use temporary expression in write context in...
11. 統一された変数構文
$goo = [ "bar" => [ "baz" => 100, "cug" => 900 ] ]; $foo = "goo"; $$foo["bar"]["baz"]; // 实际为:($$foo)['bar']['baz']; PHP 5 中为:${$foo['bar']['baz']}; // PHP 7 中一个笼统的判定规则是,由左向右结合。
12. スロー可能なインターフェイス
これは、PHP 7 で導入された価値のある追加機能です。予想される新機能により、PHP のエラー処理機能が大幅に強化されます。 PHP 5 の try ... catch ... はついに従来のエラーを処理できなくなるため、通常は必要に応じて set_error_handler() を使用してハッキングすることを検討します。しかし、set_error_handler() が捕捉できないエラーの種類はまだたくさんあります。 PHP 7 では Throwable インターフェイスが導入されています。エラーと例外は Throwable を実装します。Throwable は直接実装できませんが、\Exception クラスと \Error クラスは拡張できます。 Throwable を使用して例外やエラーをキャッチできます。 \Exception はすべての PHP 例外およびユーザー例外の基本クラスであり、\Error はすべての内部 PHP エラーの基本クラスです。$name = "Tony"; try { $name = $name->method(); } catch (\Error $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } try { $name = $name->method(); } catch (\Throwable $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } try { intp(5, 0); } catch (\pisionByZeroError $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; }
13. 組み合わせステートメントを使用します
組み合わせステートメントを使用すると、入力の冗長性を減らすことができます。use PHPGoodTaste\Utils\{ Util, Form, Form\Validation, Form\Binding };
14. 複数のタイプの例外/エラーを一度にキャプチャする
PHP 7.1 では、複数のタイプの例外/エラーをキャプチャするための新しい構文 (垂直バーを使用) が追加されました。 「 | 」を達成します。try { throw new LengthException("LengthException"); // throw new pisionByZeroError("pisionByZeroError"); // throw new Exception("Exception"); } catch (\pisionByZeroError | \LengthException $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } catch (\Exception $e) { echo "出错消息 --- ", $e->getMessage(), PHP_EOL; } finally { // ... }
15. 可視性修飾子の変更
PHP 7.1 より前のクラス定数では、可視性修飾子を追加できません。現時点では、クラス定数の可視性は次と同等です。公共。 PHP 7.1 では、クラス定数の可視性修飾子のサポートが追加されています。一般に、可視性修飾子の使用範囲は次のとおりです。class YourClass { const THE_OLD_STYLE_CONST = "One"; public const THE_PUBLIC_CONST = "Two"; private const THE_PRIVATE_CONST = "Three"; protected const THE_PROTECTED_CONST = "Four"; }
iterable pseudo-type #PHP 7.1 では反復可能な疑似型が導入されました。反復可能型は、PHP で予約されているクラス名である Traversable を実装する配列、ジェネレーター、およびオブジェクトに適用されます。
$fn = function (iterable $it) : iterable { $result = []; foreach ($it as $value) { $result[] = $value + 1000; } return $result; }; $fn([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);Nullable 型
PHP 7.1 では、Nullable 型が導入されました。新しい Kotlin プログラミング言語のギミック機能の 1 つが null 許容型であることに注目してください。 PHP はますます「強く型付けされた言語」に近づいてきています。同じタイプの必須要件については、NULL 可能かどうかを設定できます。
$fn = function (?int $in) { return $in ?? "NULL"; }; $fn(null); $fn(5); $fn(); // TypeError: Too few arguments to function {closure}(), 0 passed in ...Void 戻り値の型
PHP 7.1 では、Void 戻り値の型が導入されました。
rree以上がphp7 と PHP5 の比較の新機能とパフォーマンスの最適化の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。