ホームページ >バックエンド開発 >PHPチュートリアル >PHP5.2~5.6の新機能、php5.25.6の新機能の詳細説明_PHPチュートリアル
現在 (2014.2) の PHP の最新の安定バージョンは PHP5.5 ですが、ユーザーのほぼ半数が維持されなくなった PHP5.2 を依然として使用しており [注]、残りの半数のユーザーは PHP5 を使用しています。 .3【注意】。
「何百もの学派の長所を集めた」PHP の厄介な構文と、コミュニティの雰囲気の悪さのため、多くの人は新しいバージョンや新機能に興味を持ちません。
PHP5.2 より前: 自動ロード、PDO、MySQLi、型制約
PHP5.2: JSON サポート
PHP5.3: 非推奨の機能、匿名関数、新しいマジックメソッド、名前空間、遅延静的バインディング、Heredoc と Nowdoc、const、三項演算子、Phar
PHP5.4: 短いオープンタグ、配列の省略形、トレイト、組み込み Web サーバー、詳細が変更されました
PHP5.5: yield, list() が foreach に使用され、詳細が変更されました
PHP5.6: 定数の強化、変数関数パラメータ、名前空間の強化
注: http://w3techs.com/technologies/details/pl-php/5/all
(2006年以前)
ちなみに、PHP5.2ですでに登場しているが導入する価値のある機能を紹介しておきます。
オートロード
誰もが __autoload() 関数を知っているかもしれません。この関数が定義されている場合、コード内で未定義のクラスが使用されると、この関数内で対応するクラス実装ファイルを呼び出すことができます。
コードをコピーします
PDO と MySQLi
つまり、PHP Data Object、PHP データ オブジェクトであり、PHP の新しいデータベース アクセス インターフェイスです。
従来のスタイルによれば、MySQL データベースへのアクセスは次のようになります:
コードをコピーします
$result = mysql_query($sql);
//結果を印刷
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
foreach($row as $k => $v)
print "{$k}: {$v}n";
}
// 結果セットを解放し、接続を閉じます
mysql_free_result($result);
コードをデータベースに依存しないようにするため、つまり、1 つのコードを複数のデータベースに同時に適用できるようにするために (たとえば、上記のコードは MySQL にのみ適用可能です)、PHP は PDO を正式に設計しました。
•SQL プリコンパイル (準備)、プレースホルダー構文
•実行効率の向上、公式推奨として、特別なパフォーマンスの最適化があります
•ほとんどの SQL データベースをサポートし、データベースを変更するときにコードを変更する必要はありません
PDO を使用して実装された上記のコードは次のようになります:
コードをコピーします
//クエリを実行し、結果を出力します
foreach($query->execute() as $row)
foreach($row as $k => $v)
print "{$k}: {$v}n";
}
PDO は公式に推奨されており、より一般的なデータベース アクセス方法です。特別なニーズがない場合は、PDO を学習して使用することをお勧めします。
ただし、MySQL に固有の高度な機能を使用する必要がある場合は、MySQLi を試してみることをお勧めします。PDO には、複数のデータベースで同時に使用するための MySQL のそれらの固有の機能が含まれていないためです。
上記の 2 つのコードと比較すると、MySQLi の使用法には多くの新しい概念はありません。ここでは例を示しません。PHP の公式 Web サイトのドキュメントを参照してください。
型制約
パラメーターの型は型制約によって制限できますが、このメカニズムは現時点ではクラス、呼び出し可能 (実行可能型) および配列 (配列) にのみ適用され、文字列と整数には適用されません。
JSON サポート
json_encode()、json_decode() およびその他の関数を含む JSON は Web 分野で非常に一般的に使用されるデータ交換形式であり、JSON は実際には JS 構文の一部です。
JSON シリーズ関数は、PHP の配列構造を JSON 文字列に変換できます:
非推奨の機能
グローバルを登録する
これは php.ini のオプション (register_globals) で、オンにすると、すべてのフォーム変数 ($_GET および $_POST) がグローバル変数として登録されます。 以下の例を見てください:
コードをコピーします
このコードが検証に合格すると、$authorized を true に設定し、$authorized の値に基づいてページを表示するかどうかを決定します。
ただし、$authorized は事前に false に初期化されていないため、register_globals をオンにすると、/auth.php?authorized=1 にアクセスして変数値を定義し、認証をバイパスすることができます。この機能は歴史的な問題であり、PHP4.2 ではデフォルトでオフになり、PHP5.4 では削除されました。
魔法の名言
php.ini のオプション magic_quotes_gpc に対応します。この機能も歴史的な問題であり、PHP5.4 で削除されました。
この機能はすべてのユーザー入力をエスケープします。これは、第 1 章でユーザー入力のエスケープについて説明しました。
しかし、PHP は、どの入力が SQL に入力され、どの入力がシェルに入力され、どの入力が HTML として表示されるのかを知らないため、多くの場合、このエスケープが混乱を引き起こします。
多くの Web ホスティング プロバイダーはセーフ モードを使用して複数のユーザーを分離しますが、セーフ モードには多くの問題があります。たとえば、一部の拡張機能はセーフ モードに従ってアクセス許可を制御しません。
PHP は、オペレーティング システムのメカニズムを使用して権限を分離し、Web サーバーが異なるユーザー権限で PHP インタープリタを実行できるようにすることを公式に推奨しています。第 1 章の最小特権の原則を参照してください。
匿名関数
クロージャとも呼ばれ、コールバック関数やその他の目的で名前のない関数を一時的に作成するためによく使用されます。
次に、$func に格納されている匿名関数を呼び出します。
匿名関数は use キーワードを使用して外部変数をキャプチャすることもできます:
匿名関数のパラメーター リストの後に、use キーワードを使用して匿名関数の外側の $num を関数に取り込み、どれだけ追加する必要があるかを把握します。
マジックメソッド: __invoke()、__callStatic()
PHP のオブジェクト指向システムは、存在しないプロパティやメソッドにアクセスするときにマジック メソッドをトリガーするなど、他の言語と同様の「オーバーロード」を実装するためのいくつかの「マジック メソッド」を提供します。
匿名関数の追加により、PHP は新しいマジック メソッド __invoke() を導入します。
このマジック メソッドは、オブジェクトが関数として呼び出されるときに呼び出されます:
コードをコピーします
__callStatic() は、存在しない静的メソッドを呼び出すときに呼び出されます。
ネームスペース
コードをコピーします
名前空間の構文の詳細については、公式Webサイト[注意]を参照してください。
名前空間は、クラス実装ファイルを自動的にロードするために autoload と併用されることがよくあります。
クラス XXOOTestA をインスタンス化すると、クラスの完全修飾名が autoload 関数に渡され、autoload 関数はクラス名の名前空間区切り文字 (バックスラッシュ) をスラッシュに置き換え、対応するファイルを含めます。
これにより、クラス定義ファイルの階層ストレージとオンデマンドの自動ロードが可能になります。
注: http://www.php.net/manual/zh/ language.namespaces.php
遅延静的バインディング
PHP の OPP メカニズムには、次のコードのような継承と仮想関数のような関数があります。
コードをコピーこれは、self のセマンティクスが元々「現在のクラス」であるため、PHP5.3 では static キーワードに新しい機能が与えられています: late static binding:
ヒアドキュメントとナウドキュメント
ヒアドキュメントは二重引用符で囲まれた文字列のように動作します:
ヒアドキュメントは関数パラメータとクラスメンバーの初期化にも使用できます:
出力:
私の名前は「{$name}」です。
定数を定義するには const を使用します
PHP 5.3 は、グローバル名前空間とクラスの両方で定数を定義するための const の使用をサポートしています。
古いスタイル:
定義("XOOO", "値");
新しいスタイル:
const XXOO = "値";
const 形式は定数にのみ適用され、実行時に評価できる式には適用されません。
古いスタイル:
は次のように省略できます:
echo $a ?: "値なし";
つまり、三項演算子の 2 番目の部分が省略された場合、デフォルトで最初の部分が置き換えられます。
ファー
Phar は PHP Archive です。元々は Pear の単なるライブラリでしたが、後に PHP5.3 で C 拡張機能として書き直され、PHP に組み込まれました。
Phar は、複数の .php スクリプト (および他のファイル) を .phar 圧縮ファイル (通常は ZIP 形式) にパッケージ化するために使用されます。
目的は Java の .jar を模倣することです、いえ、目的は PHP アプリケーションの公開をより便利にすることです。電子署名検証などの機能も提供します。
注: http://www.php.net/manual/zh/phar.using.intro.php
PHP5.4
(2012-2013)
短いオープンタグ
Short Open Tag は PHP5.4 以降常に利用可能です。
ここでは、PHP の開始タグと終了タグに関連する問題に焦点を当てます。つまり:
大丈夫です
と略称:
= $xxoo;?>
この略語は Short Open Tag と呼ばれ、PHP5.3 ではデフォルトで有効になり、PHP5.4 では常に使用可能になります。
この省略表現は、HTML に PHP 変数を埋め込む場合に非常に便利です。
純粋な PHP ファイル (クラス実装ファイルなど) の場合、PHP は、開始タグを上部のボックスに記述し、終了タグを省略することを公式に推奨しています。
注: ヘッダーと Cookie は、コンテンツが出力される前に送信する必要があります。
これはとても便利な機能ですね!
Traits には、複数の特性を含める、競合を解決する、アクセス許可を変更する、関数のエイリアスを設定するなど、多くの魔法の機能もあります。
特性には特性も含まれます。紙面の都合上、詳細は公式ウェブサイトを参照してください。
注: http://www.php.net/manual/zh/ language.oop5.traits.php
内蔵ウェブサーバー
PHP には、5.4 以降、軽量の Web サーバーが組み込まれていますが、同時実行性はサポートされておらず、開発およびデバッグ環境向けに位置付けられています。
開発環境で使用すると確かに非常に便利です。
php -S ローカルホスト:8000
これにより、現在のディレクトリに Web サーバーが確立され、http://localhost:8000/ を通じてアクセスできます。
このうち、localhost はリスニング IP、8000 はリスニング ポートで、自分で変更できます。
多くのアプリケーションでは URL の書き換えが実行されるため、PHP はルーティング スクリプトを設定する機能を提供します。
php -S localhost:8000index.php
このようにして、すべてのリクエストはindex.phpによって処理されます。
ブレークポイントのデバッグに XDebug を使用することもできます。
詳細を修正しました
PHP5.4 では、静的メソッドに動的にアクセスする新しい方法が追加されました:
$func = "funcXXOO";
A::{$func}();
インスタンス化中にクラスメンバーにアクセスする新機能:
(新しい MyClass)->xxoo();
関数戻り配列のメンバー アクセス分析のサポートを追加しました (この書き込みメソッドは以前のバージョンではエラーを報告します):
print func()[0];
PHP5.5
(2013年から)
収量
yield キーワードは、関数がイテレータを返す必要がある場合に値を 1 つずつ返すために使用されます。
[コード]
関数番号10()
{
for($i = 1; $i
収量 $i;
}
この関数の戻り値は配列です:
foreach の list()
ネストされた配列は、list() を使用して foreach で解析できます:
foreach (リストとしての $array($a, $b, $c))
echo "{$a} {$b} {$c}n";
結果:
1 2 3
4 5 6
詳細を修正しました
mysql 関数の使用は非推奨になりました。PDO または MySQLi を使用することをお勧めします。前の記事を参照してください。
Windows XP はサポートされなくなりました。
MyClass::class を使用して、クラスの完全修飾名 (名前空間を含む) を取得できます。
empty() はパラメータとして式をサポートします。
try-catch 構造は、finally ブロックを追加します。
PHP5.6
定数の改善
定数を定義する場合、以前に定義した定数を使用した計算が許可されます:
クラスC
{
const STR = "こんにちは";
const STR2 = self::STR + ", world";
}
関数パラメータのデフォルト値として定数を許可します:
関数 func($arg = C::STR2)
より良い可変個引数関数パラメータのためにコードをコピーしてください
func_get_args() の代わりに使用されます
関数を呼び出すときにコードをコピーし、配列を関数パラメータに展開します。
//結果は6です
ネームスペース
名前空間は定数と関数をサポートします:
設定されていない場合は、php5.2 から 5.6 へのワンクリック切り替えをサポートする phpstudy 統合パッケージをお試しください。試してみる。写真に示すようにphpstudy
実際、これらのバージョンではセキュリティと機能がいくつか改善されています。初めての場合は、php.net からダウンロードして直接インストールしてください。 、インストール前に Web サーバーを閉じると、設定ファイルが自動的に変更されます