ホームページ > バックエンド開発 > PHPチュートリアル > PHP 5.5 ではどのような新機能が復活しますか?

PHP 5.5 ではどのような新機能が復活しますか?

WBOY
リリース: 2016-06-13 12:48:13
オリジナル
758 人が閲覧しました

PHP 5.5 ではどのような新機能がもたらされますか?

2013-01-25

?

PHP 5.4 は 4 か月前にリリースされましたが、PHP の次のバージョンには少し早いように思えますが、著者はまだ PHP5.5 がもたらす新機能を明らかにしたいと考えています。注意: PHP5.5 はまだ開発の初期段階にあるため、最終結果がどうなるかは誰にもわかりません。著者がここで語ることはすべて単なる提案にすぎません。とはいえ、以下に挙げる新機能のすべてが必ずしも PHP5.5 に含まれるわけではありません。

だから、あまり興奮しないでください:)

新機能と提案のリストは非常に多く、重要度順に並べられていません。すべてを読みたくない場合は、私が個人的に最も楽しみにしている 4 つの機能を以下に示します:

単純なパスワード ハッシュ API、スカラー型ヒント、ゲッターとセッター、ジェネレーター

それでは、PHP5.5 にどのような新機能が追加されるかを見てみましょう:

  1. 1. 下位互換性の廃止 まず、

    の 2 つの変更があります。

    1. Windows XP および 2003 のサポートを放棄する: HP5.5 は Windows XP および 2003 をサポートしなくなります。これらのシステムは 10 年前のものであるため、PHP はサポートを提供しなくなります。

    2. e 修飾子を非推奨にする: e 修飾子は、単に単純な文字列置換を行うのではなく、preg_replace 関数を使用して置換文字列を PHP コードとして評価することを示します。当然のことながら、この動作によりセキュリティ問題が次々と発生します。これが、PHP5.5 でこの修飾子を使用すると非推奨の警告がスローされる理由です。代わりに、preg_replace_callback 関数を使用する必要があります。この変更の詳細については、RFC を参照してください。

  2. 2. 新しい関数とクラス

    次に、計画されている新しい関数とクラスを見ていきます:

    1. boolval()

    PHP には、strval、intval、floatval 関数が実装されています。一貫性を保つために boolval 関数が追加されます。これは完全にブール計算またはコールバック関数として使用できます。

    2. hash_pbkdf2()

    PBKDF2 の正式名称は「Password-Based Key Derivation Function 2」で、その名の通り、パスワードから暗号鍵を導出するアルゴリズムです。これには、パスワードのハッシュ化にも使用できる暗号化アルゴリズムが必要です。より詳細な説明と使用例については、RFC を参照してください。

    3. intl 拡張子

    intl 拡張子には多くの改良が加えられる予定です。たとえば、新しい IntlCalendar、IntlGregorianCalendar、IntlTimeZone、IntlBreakIterator、IntlRuleBasedBreakIterator、IntlCodePointBreakIterator クラスが追加されます。以前は、intl に関する拡張機能がこれほどたくさんあるとは知りませんでした。さらに詳しく知りたい場合は、最新の発表にアクセスして Calendar と BreakIterator を探すことをお勧めします。

    4. array_column()

    次のように動作する array_column (または array_pluck) 関数を追加するという提案があります。

    $userNames = array_column($users, 'name');

    //

    と同じです

    $userNames = [];

    foreach ($users として $user) {

    $userNames[] = $user['name'];

    }

    このようにデータベースから列を取得しますが、戻り値は配列です。

    5. 単純なパスワードハッシュ API

    最近のパスワード漏洩 (LinkedIn などから) は、大規模な Web サイトでさえパスワードを適切にハッシュする方法を知らないことを示しています。ここ数年、人々は bcrypt の使用を推奨してきましたが、ほとんどの人は依然として完全に安全ではない sha1 ハッシュを使用しているようです。

    この理由は、crypt 関数 API の使用が非常に難しいためであると考えられます。したがって、安全なパスワードハッシュのために新しいシンプルな API を採用します:

    $password = "foo";

    // ハッシュを作成します

    $hash =password_hash($password, PASSWORD_BCRYPT);

    // パスワードを検証します

    if (password_verify($password, $hash)) {

    // パスワードが正しいです!

    } else {

    // パスワードが間違っています

    }

    新しいハッシュ API はさらにいくつかの機能を提供します。RFC を参照してください。

  3. 3. 言語の変更

    ここからは本当に楽しい内容です。新しい言語機能と拡張機能です。

    1. 定数参照

    「定数参照」とは、配列が文字列および配列リテラルを直接操作できることを意味します。例を 2 つ挙げます:

    関数randomHexString($length) {

    $str = '';

    for ($i = 0; $i $str .= "0123456789abcdef"[mt_rand(0, 15)]; // 文字列の直接逆参照

    }

    }

    関数randomBool() {

    Return [false, true][mt_rand(0, 1)] // 配列の直接逆参照

    ;

    }

    この機能は実際には使用されないと思いますが、言語の一貫性が高まります。 RFC を参照してください。

    2. empty() 関数 (および他の式) を呼び出して連携させます

    現在、empty() 言語構造は変数内でのみ使用でき、他の式では使用できません。 empty($this->getFriends()) のような特定のコードでは、エラーがスローされます。 PHP5.5以降、これは有効なコードになります。詳細については、RFC を参照してください。

    ? 3. 完全なカテゴリ名を取得します

    PHP5.3では、名前空間エイリアスクラスと名前空間短縮版の機能が導入されています。ただし、これは文字列クラス名には当てはまりません:

    SomeDeeplyNestedNamespaceFooBar を使用します;

    // これはグローバル `FooBar` クラスを使用しようとするため、機能しません

    $reflection = new ReflectionClass('FooBar');

    この問題を解決するには、クラスの完全なカテゴリ名を返す新しい FooBar::class 構文を使用します。

    SomeDeeplyNestedNamespaceFooBar を使用します;

    // これは、FooBar::class が "Some\Deeply\Nested\Namespace\FooBar" に解決されるため機能します

    $reflection = new ReflectionClass(FooBar::class);

    その他の例については、RFC を参照してください。

    4.パラメータジャンプ

    複数のオプションのパラメーターを受け入れる関数がある場合、現在のところ、最後のパラメーターだけを変更し、他のすべてのパラメーターをデフォルト値のままにする方法はありません。

    次のような関数がある場合の RFC の例:

    関数 create_query($where, $order_by, $join_type='', $execute = false, $report_errors = true) { ... }

    では、他の 2 つはデフォルト値のまま、$report_errors=false を設定する方法はありますか。パラメータのジャンプの問題を解決するには:

    create_query("deleted=0", "name", デフォルト, デフォルト, false);

    私は個人的にこの提案が特に好きではありません。私の目から見ると、コードにはこの機能が必要ですが、設計が不十分なだけです。関数には 12 個のオプションのパラメーターを含めることはできません。

    5. スカラー型プロンプト

    スカラー型ヒントは当初 5.4 に導入される予定でしたが、コンセンサスが得られなかったため導入されませんでした。スカラー型ヒントが PHP に組み込まれていない理由の詳細については、「スカラー型ヒントは思っているよりも難しい」を参照してください。

    PHP5.5 に関しては、スカラー型ヒントに関する議論が再び登場しましたが、これはかなり良い提案だと思います。

    入力値で型を指定する必要があります。例: 123、123.0、「123」はすべて有効な int パラメーター入力ですが、「hello world」は有効ではありません。これは内部関数の動作と一致しています。

    関数 foo(int $i) { ... }

    foo(1) // $i = 1

    foo(1.0) // $i = 1

    foo("1") // $i = 1

    ;

    foo("1abc"); // まだ明確ではありませんが、おそらく $i = 1 になると思われます

    foo(1.5); // まだ明確ではありませんが、おそらく $i = 1 になると思われます

    foo([]) // エラー

    foo("abc") // エラー

    ゲッターとセッター

    これらの getXYZ() メソッドと setXYZ($value) メソッドを書くのが好きではなかったのであれば、これは最も歓迎すべき変更です。プロパティの設定/読み取りを定義する新しい構文を追加することが提案されました:

    クラス TimePeriod {

    パブリック $秒;

    公開 $hours {

    get { return $this->秒 / 3600; }

    set { $this->秒 = $value * 3600 }

    }

    }

    $timePeriod = 新しい TimePeriod;

    $timePeriod->時間 = 10;

    var_dump($timePeriod->秒) // int(36000)

    var_dump($timePeriod->hours) // int(10)

    ;

    もちろん、読み取り専用属性など、さらに多くの機能があります。さらに詳しく知りたい場合は、RFC を参照してください。

    6. ジェネレーター

    現在、カスタム イテレータの実装には多くの定型コードが必要なため、カスタム イテレータはほとんど使用されません。ジェネレーターはこの問題を解決し、イテレーターを作成するための単純な定型コードを提供します。

    たとえば、範囲関数を反復子として定義できます。

    関数 *xrange($start, $end, $step = 1) {

    for ($i = $start; $i

    $i を生成します;

    }

    }

    foreach (xrange(10, 20) as $i) {

    // ...

    }

    上記の xrange 関数は組み込み関数と同じ動作をしますが、配列のすべての値を返すのではなく、反復子によって動的に生成された値を返すという違いが 1 つあります。

    より詳細な紹介については、RFC を参照してください。

    7. リスト分析とジェネレーター式

    リスト内包表記は、配列に対して小規模な操作を実行する簡単な方法を提供します。

    $firstNames = [foreach ($users as $user) yield $user->firstName];

    上記のリストの解析は、次のコードと同等です:

    $firstNames = [];

    foreach ($users として $user) {

    $firstNames[] = $user->firstName;

    }

    次のように配列をフィルタリングすることもできます:

    $underageUsers = [foreach ($users as $user) if ($user->age

    ジェネレーター式は似ていますが、配列の代わりにイテレーター (値を動的に生成するために使用) を返します。

    その他の例については、メーリング リストのお知らせをご覧ください。

    結論

    ご覧のとおり、PHP 5.5 には多くの優れた新機能が追加されます。ただし、著者が述べたように、PHP5.5 はまだ開発の初期段階にあるため、上記の新機能がすべて追加されるかどうかはわかりません。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート