PHP は、Web 開発の分野において常に非常に重要で高速かつ便利な開発言語であり、大多数の開発者に好まれています。現在、PHP 5.4 の正式バージョンがリリースされており、多くの新機能が追加されており、パフォーマンスが 20% 向上し、使用するリソースが削減されていると公式は主張しています。この記事では、PHP 5.4 のいくつかの新機能について説明します。
PHP 5.4 では、まず 100 を超えるバグが修正され、メモリとパフォーマンスの最適化が改善され、register_globals、magic_quotes、safe_mode など、以前のバージョンのいくつかのメソッドが削除されました。さらに、PHP 5.4 では、デフォルトのエンコード方式が に変更されており、開発者が多言語アプリケーションを開発するのに非常に役立ちます。
特性の紹介
まずは、PHP 5.4で追加された新機能Traitsを紹介します。実際、この機能は他の言語でも見られ、その構成構造はクラスに似ており (ただし、クラスのようにインスタンス化することはできません)、開発者がさまざまなメソッドを使用できるようになります。クラス内でこのメソッドのセットを再利用します。 PHP は単一継承言語であるため、1 つのクラスが同時に複数のクラスを継承することはできません。このとき、特性が役に立ちます。
特性は、実際のクラスに属さないソリューションのコレクションです。ユーザーは Trait インスタンスを作成したり、Traits 内のメソッドを直接呼び出したりすることはできません。代わりに、Trait を実際のクラスにマージして使用する必要があります。優先順位の点では、Trait メソッドは同じ名前の継承されたメソッドをオーバーライドし、現在のマージされたクラス内の同じ名前のメソッドは Trait メソッドをオーバーライドします。
以下は、Traits の使用を示す例です。構築している Web サイトが Facebook と Twitter の API を同時に呼び出す必要があるとします。これら 2 つの API の呼び出しプロセス中に、curl メソッドを呼び出して、API から返されるコンテンツを取得する一連の操作を実行する必要があります。これらの 2 つのクラスでは、同じメソッドが繰り返し記述されます。これらは、次のコードに示すように、PHP 5.4 の Traits を使用して実装できます。
/**cURL ラッパー特性*/特性 cURL
パブリック関数curl($url)
$ch =curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output =curl_exec($ch);
curl_close($ch);
return $output;
/**Twitter API クラス*/
クラス Twitter_API
cURL を使用します。 // 特性を呼び出します
パブリック関数 get($url)
return json_decode($this->curl("http://api.twitter.com/".$url));
/**Facebook APIクラス*/
クラス Facebook_API
cURL を使用します。 // 特性を呼び出します
パブリック関数 get($url)
return json_decode($this->curl("http://graph.facebook.com/".$url));
$facebook = 新しい Facebook_API();
echo $facebook->get("name; //Facebook ユーザー名を出力するために API がここで呼び出されます
/**PHP 5.4 の新機能をデモンストレーションする*/
echo (新しい Facebook_API)->get("name;
$foo = "取得";
echo (新しい Facebook_API)->$foo("name;
echo (新しい Twitter_API)->get("name;
上記のコードでは、最初にキーワード trait によって関数セットが定義されます。その名前は Curl です。このメソッドには、URL のパラメーター値に基づいて、PHP の組み込み cur メソッドが含まれています。対応する URL を返すために呼び出されます。次に、Twitter_API クラスと Facebook_API
で
クラスでは、cURL を使用して Traits を呼び出し、それぞれの get メソッドで Traits のcurl メソッドが呼び出されます。上記のコードでは、new Facebook_API() を使用して Facebook オブジェクトのインスタンスを生成することに加えて、PHP 5.4 の新機能、つまり
の使用も示していることに注意してください。
クラス メンバーはインスタンス化中にアクセスできます。つまり、echo (新しい Facebook_API)->get("name;
$foo = "取得";
echo (新しい Facebook_API)->$foo("name;
$foo 変数に値 get が割り当てられ、クラスで get メソッドを呼び出そうとすると、呼び出しは (new Facebook_API)->$foo("500058753")-> を通じて行われます。名前;。
トレイトの使用法を説明するために別の例を見てみましょう。この例は、次のコードのように単純です。
特性ネット
パブリック関数 net()
"ネット" を返す;
特性ツッツ
パブリック関数 tuts()
return "ツッツ";
クラス NetTuts
ネット、ツッツを使用;
パブリック関数 plus()
"+" を返す;
$o = 新しい NetTuts;
echo $o->net()、$o->tuts()、$o->plus();
echo (新しい NetTuts)->net()、(新しい NetTuts)->tuts()、(新しい NetTuts)->plus();
上記の結果はすべて NetTuts に出力されます。また、ちなみに、PHP 5.4 のトレイトの魔法定数は __TRAIT__ です。
内蔵デバッグサーバー
以前は、PHP 開発には通常、Apache HTTP Server との連携が必要でした。 PHP 5.4 には、開発者が複雑な構成を行わずに開発作業を完了できるよう、シンプルな Web サーバーが組み込まれています。以下では、PHP 5.4 の組み込みサーバーを使用して Windows 環境で関連作業を完了する方法を段階的に説明します。
ステップ 1) まず、ドライブ c のルート ディレクトリにディレクトリ (public_html) を作成し、そのファイル内に router.php ファイルを作成します。コードは次のとおりです。
php// router.php
if (preg_match("#.php$#", $_SERVER["REQUEST_URI"]))
require basename($_SERVER["REQUEST_URI"]); // php ファイルを提供します
else if (strpos($_SERVER["REQUEST_URI"], ".") !== false)
return false; // ファイルをそのまま提供します
>
次に、次のように、index.php という名前の単純な PHP ファイルを作成します。
//index.php
echo "Nettuts+ 読者の皆さん、こんにちは!";
>
次に、php 5.4 のインストール ディレクトリを開き、php.ini を見つけて、次の行を include_path に追加します:
include_path = ".;C:phpPEAR;C:public_html"
ステップ 2 組み込み Web サーバーを実行します
まずコマンドラインモードに入り、phpディレクトリに入り、次のコマンドを入力します:
php -S 0.0.0.0:8080 -t C:public_html router.php
ここでは、任意のマシンがこのサーバーにアクセスできるように指定し、ポート 8080 をルーターと c:public_html 下の php ファイルに指定します。次の情報が表示されます
これは、内蔵サーバーが正しく起動していることを証明します。
このとき、ブラウザに http://localhost:8080/index.php と入力してアクセスできます。
より簡潔な配列構文
PHP 5.4 では、配列での宣言など、一部の構文サポートがより簡潔になりました。
次のように、角括弧を使用した宣言をサポートします:
$fruits = array("apples", "oranges", "bananas") // 古い宣言方法
$fruits = ["apples", "oranges", "bananas"] //php 5.4 で新しくサポートされた宣言メソッド
;// 新しい連想配列へのアクセス
$array = [
"foo" => "バー",
"バー" => "フー"
];
もちろん、PHP 5.4 では、古い配列宣言方法もサポートされています。
関数の戻り値から配列値に直接アクセス
PHP 5.4では、関数の戻り値の配列値を直接取得することがサポートされています。以下のような例を考えてみましょう:
$tmp =explode(" ", "アラン・マシソン・チューリング");
echo $tmp[1] // マシスン
;この例で、PHP 5.4 より前の場合、上記の文字列の Mathison を抽出するには、まずexplode 関数を使用して関連する値を返し、次に配列の値を取得する必要があります。 PHP 5.4 では、次のように戻り値に配列として直接アクセスできます。
echoexplode(" ", "アラン・マシソン・チューリング")[1];これは非常に便利です。別の例として、Turing を追加して、上記の文字列の最後の文字列部分を取得します。これは、PHP 5.4 で実行できます。
echo end(explode(" ", "アラン・マシソン・チューリング"));
次のように、さらに複雑な例をもう 1 つ挙げます:
関数 foobar()
return ["foo" => ["bar" => "Hello"]];
echo foobar()["foo"]["bar"] //Hello
を出力します。$this pointer
はクロージャで使用できます以前の PHP バージョンでは、匿名メソッド (クロージャーとも呼ばれます) で $this ポインターを使用することはできませんでしたが、PHP 5.4 では、次の例のように使用できます。
クラス Foo関数 hello() {
echo "こんにちは Nettuts!";
関数匿名()
return function() {
$this->hello(); //これは以前のバージョンでは実現できません
};
クラスバー
関数 __construct(Foo $o)
$x = $o->anonymous(); // 実際には Foo::hello()
を呼び出します
$x(); // 実行は Foo::hello()new Bar(new Foo); // 出力 Hello Nettuts!
上記の実装方法は少し複雑ですが、PHP 5.4 では次のように簡単に記述できます。
関数匿名()
$that = $this;
return function() use ($that) {
$that->hello();
};
これで、php.ini の short_tag タグがどのように設定されているかに関係なく、テンプレート内でいつでもこのメソッドを使用できるため、このメソッドが置き換えられます。 2 進数を識別するには「0b」接頭辞を使用します。2 進数を使用する場合は、
のように先頭に 0b 接頭辞を追加してください。エコー 0b11111
関数型ヒントの強化
PHP は弱い型指定言語であるため、PHP 5.0 以降、関数の型ヒント関数が導入されました。これは、関数に渡されるすべてのパラメーターが型チェックされることを意味します。たとえば、次のクラスがあります。
クラスバー {function foo(bar $foo) {
関数 foo のパラメータは、渡されるパラメータが bar クラスのインスタンスである必要があることを規定しています。そうでない場合、システムはエラーを発生します。配列についても同様に、
のような判断も可能です。
関数 foo(array $foo) {foo(array(1, 2, 3)); // array
が渡されるので正解です。
foo(123); // 不正解です。渡されたものは配列ではありません。
PHP 5.4 では、呼び出し可能な型のサポートがサポートされています。以前は、関数がコールバック関数をパラメータとして受け入れたい場合、それが呼び出すことができる正しいコールバック関数であるかどうかを確認するために多くの追加作業を行う必要がありました。例は次のとおりです。関数 foo(callable $callback) {
ルール:
foo("false"); // false は呼び出し可能な型ではないためエラー
foo("printf"); //修正
foo(function(){}); //修正
クラス A {
静的関数 show() {
foo(array("A", "show")); //修正
残念ながら、PHP 5.4 は、文字、整数などの基本型の型ヒントをまだサポートしていません。
時間統計の強化
PHP 5.4 では、$_SERVER["REQUEST_TIME_FLOAT"] が新たに追加されました。これはサービスリクエスト時間をカウントするために使用され、ミリ秒で表現されます。これにより、次のような開発者が大幅に容易になります。
echo "スクリプト実行時間",round(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"], 2), "s";
概要:
この記事では、PHP 5.4 のいくつかの新機能を簡単に要約します。PHP 5.4 でのより明らかな機能改善は、主にトレイトと組み込みデバッグ サーバー、デフォルト サポートなどであることがわかります。新機能の詳細については、を参照してください。 PHP 5.4のユーザーマニュアル