ホームページ >バックエンド開発 >PHPチュートリアル >PHP5_PHPチュートリアルの新機能・特徴まとめ
この記事のディレクトリ:
PHP5.2 以前: 自動ロード、PDO および MySQLi、型制約
PHP5.2: JSON サポート
PHP5.3: 非推奨の機能、匿名関数、新しいマジック メソッド、名前空間、遅延静的バインディング、 Heredoc と Nowdoc、const、三項演算子、Phar
PHP5.4: 短いオープンタグ、配列省略形、Traits、組み込み Web サーバー、詳細な変更
PHP5.5: yield、foreach の list()、詳細変更
PHP5 .6: 定数の強化、可変関数パラメーター、名前空間の強化
1. PHP5.2以前(2006年以前)
ちなみに、すでに登場しているが紹介する価値のあるPHP5.2の機能を紹介します。
autoload
__autoload() 関数を定義すると、コード内で未定義のクラスが使用されると、この関数が呼び出されます。 、次のような:
PDO と MySQLi
は PHP データ オブジェクトであり、PHP の新しいデータベース アクセス インターフェイスです。 従来のスタイルによれば、MySQL データベースへのアクセスは次のようになります:
//SQLクエリを実行します
$type = $_POST['type'];
$sql = "SELECT * FROM `table` WHERE `type` = {$type}";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach($row as $k => $v)
print "{$k}: {$v}n"; }
// 結果セットを解放し、接続を閉じます
mysql_close($conn);
コードをデータベースに依存しないようにするため、つまり、1 つのコードを同時に複数のデータベースに適用できるようにするために (たとえば、上記のコードは MySQL にのみ適用可能です)、PHP は公式に PDO を設計しました。 PDO は、次のような追加の機能も提供します。
2. SQL のプリコンパイル (準備)、プレースホルダー構文
3. 特別なパフォーマンスの最適化による、より高い実行効率4. コードの変更は必要ありません。データベース
PDO を使用して実装された上記のコードは次のようになります:
$query = $conn->prepare("SELECT * FROM `table` WHERE `type` = :type");$query->bindParam("type", $_POST['type']);
// クエリを実行し、結果を出力します
foreach($query->execute() as $row)
foreach($row as $k => $v)
}n";
} (編集済み)スクリプト アカデミー www.jbxue.com によって主催されます)
PDO は公式に推奨されており、より一般的なデータベース アクセス方法です。特別なニーズがない場合は、PDO を学習して使用することをお勧めします。
MySQL 固有の高度な機能を使用する必要がある場合は、試してみるとよいでしょう。 MySQLi 。複数のデータベースで同時に使用できるようにするために、PDO には MySQL のそれらの固有の機能が含まれていません。
注: http://www.php.net/manual/en/mysqli.quickstart.php
型制約
型制約はパラメーターの型を制限できますが、このメカニズムは現在、クラス、呼び出し可能 (実行可能型) および配列にのみ適用され、string と int には適用されません。
JSON シリーズ関数は、PHP の配列構造を JSON 文字列に変換できます:
print_r($object);
出力:【PHP5.3の非推奨の機能】: 以下の機能は、構成ファイルで有効になっている場合、実行時に警告を発行します。
グローバルの登録
これは php.ini (register_globals) のオプションです。これをオンにすると、すべてのフォーム変数 ($_GET および $_POST) がグローバル変数として登録されます。以下の例を参照してください。
コードは次のとおりです。
if(isAuth()) $authorized = true;if($authorized)
include("page.php");
このコードは検証に合格すると、$authorized を true に設定します。その後、$authorized の値に基づいてページを表示するかどうかを決定します。
しかし、PHP はどの入力が SQL に入力され、どの入力がシェルに入力され、どの入力が HTML として表示されるのかを知らないため、多くの場合、このエスケープが混乱を引き起こします。
セーフ モード 多くの Web ホスティング プロバイダーはセーフ モードを使用して複数のユーザーを分離しますが、セーフ モードには多くの問題があります。たとえば、一部の拡張機能はセーフ モードに従ってアクセス許可を制御しません。 PHP は、オペレーティング システムのメカニズムを使用して権限を分離し、Web サーバーが異なるユーザー権限で PHP インタープリターを実行できるようにすることを公式に推奨しています。第 1 章の最小特権の原則を参照してください。
【PHP5.3の新規追加と改善点】
匿名関数
はクロージャーとも呼ばれ、コールバック関数やその他の目的で名前のない関数を一時的に作成するためによく使用されます。
コードは次のとおりです。 $func = function($arg)
{ print $arg;};
マジックメソッド: __invoke()、__callStatic()
PHPのオブジェクト指向システムは、存在しないプロパティへのアクセスなど、他の言語と同様の「オーバーロード」を実装するためのいくつかの「マジックメソッド」を提供し、メソッドがマジックメソッドをトリガーします。
匿名関数の追加により、PHP は新しいマジック メソッド __invoke() を導入します。
このマジック メソッドは、オブジェクトが関数として呼び出されるときに呼び出されます:
$a("Hello World");
出力は間違いなく次のとおりです:
PHP の名前空間には、前例のない非常に困難な構文があります:
クラス A{}
// 既存のファイルに 2 番目の名前空間を定義することもできます。次のコードは OtherTest2 に配置されます。
namespace OtherTest2;
// 他の名前空間からオブジェクトをインスタンス化します:
$a = new XXOOTestA;
// 中括弧を使用して 3 番目の名前空間を定義することもできます
namespace Other {
$b = new Test2B;
// 他の名前空間から名前をインポートし、名前を変更します。
// インポートできるのはクラスのみであり、関数や定数はインポートできないことに注意してください。
}
名前空間に関する構文の詳細については、公式 Web サイトを参照してください [注]
名前空間は、クラス実装ファイルを自動的にロードするために autoload と併用されることがよくあります。
spl_autoload_register(
function ($class) { spl_autoload(str_replace("\", "/", $class));
}
);
クラス XXOOTestA をインスタンス化すると、このクラスの完全な修飾名は autoload 関数に渡され、クラス名の名前空間区切り文字 (バックスラッシュ) がスラッシュに置き換えられ、対応するファイルが組み込まれます。
これにより、クラス定義ファイルの階層ストレージとオンデマンドの自動ロードが可能になります。
注: http://www.php.net/manual/zh/ language.namespaces.php
遅い静的バインディング
PHP の OPP メカニズムには、次のコードのような継承と仮想関数のような関数があります。
コードは次のとおりです。
classa
public function funcXXOO()
{ return "B::funcXXOO";
}
}
$b = 新しい B;
static public function funcXXOO() class B は A を拡張します $b = 新しい B;
}
ヒアドキュメントとナウドキュメント
ヒアドキュメントは二重引用符で囲まれた文字列のように動作します:
{ Hello World
PHP 5.3 以降では、グローバル名前空間とクラスの両方で定数を定義するための const の使用がサポートされています。
古いスタイル:
Phar は PHP アーカイブです。元々は Pear の単なるライブラリでしたが、後に PHP5.3 で C 拡張機能として書き直され、PHP に組み込まれました。 目的は Java の .jar を模倣することです、いいえ、目的は PHP アプリケーションの公開をより便利にすることです。電子署名検証などの機能も提供します。 PHP5.4(2012-2013) 短いオープンタグ 純粋な PHP ファイル (クラス実装ファイルなど) の場合、PHP は、開始タグを上部のボックスに記述し、終了タグを省略することを公式に推奨しています。 注: ヘッダーと Cookie は、コンテンツが出力される前に送信する必要があります。 配列の略語 トレイト class MyHelloWorld $xxoo = new MyHelloWorld();
組み込み Web サーバー PHP には、5.4 以降、同時実行性をサポートしていない、開発およびデバッグ環境用に軽量の Web サーバーが組み込まれています。
詳細変更PHP5.4 では、静的メソッドに動的にアクセスする新しい方法が追加されました:
PHP5.5(2013以降)
yieldyieldキーワードは、関数がイテレータを返す必要がある場合に値を1つずつ返すために使用されます。
echo "{$a} {$b} {$c}n"; PHP5.6 より良い定数 クラスC func_get_args() の代わりに使用される可変個引数関数の引数の改善
const NameSpaceFOO を使用します; f();
出力は次のとおりです:
コードは次のとおりです。
B::funcXXOO
Aで$this->funcXXOO()を使用すると、「仮想関数」の仕組みが反映され、実際にはB::funcXXOO()が呼び出されることがわかります
ただし、すべての関数をstatic Functionに変更すると。 :
コードは次のとおりです。
class A
{
static public function callFuncXXOO()
{
print self::funcXXOO();
}
{
return "A::funcXXOO()";
}
}
{
static public function funcXXOO()
{
return "B::funcXXOO";
}
}
$b->callFuncXXOO();
状況はそれほど楽観的ではありません。出力は次のとおりです:
コードは次のとおりです。
A::funcXXOO()
これは、self のセマンティクスが元々「現在のクラス」であるため、PHP5.3 では static キーワードに新しい関数、late static binding: が与えられています。
コードは次のとおりです。
class A{
static public function callFuncXXOO()
{
print static::funcXXOO();
}
コードは次のとおりです。
B::funcXXOO
私の名前は「{$name}」です。
テキスト;
ヒアドキュメントは 3 つの左山括弧で始まり、その後に識別子 (TEXT) が続き、同じ上部スペースの識別子で終わります (インデントはできません)。
二重引用符で囲まれた文字列と同様に、変数をその中に埋め込むことができます。
EOD
);
const xx = <<< EOD
Hello World
EOD;
EOD;
}
コードは次のとおりです。
$name = "MyName";echo <<< 'TEXT'私の名前は「{$name}」です。
TEXT;
出力:
コードは次のとおりです。
私の名前は「{$name}」です。
定数を定義するには const を使用します
const 形式は定数にのみ適用され、実行時に評価できる式には適用されません:
コードは次のとおりです。
// 正しいconst XXOO = 1234;// 間違っています
const XXOO = 2 * 617;
三項演算子の短縮形
コードは次のとおりです。
echo $a ?: "値がありません";
つまり、三項演算子の 2 番目の部分が省略された場合、デフォルトで最初の部分が置き換えられます。
ファー
.phar ファイルは、.php ファイルと同じように PHP エンジンによって解釈および実行できます。同時に、次のようなコードを記述して .phar にコードを含める (必須にする) こともできます。
短いオープンタグはPHP5.4以降常に利用可能です。
ここでは、PHP の開始タグと終了タグに関連する問題に焦点を当てます。つまり:
?>
通常は上記の形式ですが、さらに省略形もあります:
コードは次のとおりです。
/* コード... */ ?>
大丈夫です
コードは次のとおりです。
と略称:
コードは次のとおりです。
= $xxoo;?>
この略語は Short Open Tag と呼ばれ、PHP5.3 ではデフォルトで有効になり、PHP5.4 では常に使用可能になります。
この短縮形式を使用すると、HTML に PHP 変数を埋め込むのに非常に便利です。
これにより、PHP ファイル全体が出力のない PHP コードであることが保証されます。そうしないと、ファイルをインクルードした後にヘッダーと Cookie を設定するときに問題が発生します [注]。
とても便利な機能です!
$arr = array("key" => "value", "key2" => "value2");
// 短縮形
$arr = ["key" => " 値", "キー 2" => "値 2"];
いわゆるトレイトは「コンポーネント」であり、継承を置き換えるために使用されるメカニズムです。 PHP では多重継承は不可能ですが、クラスには複数のトレイトを含めることができます。
trait SayWorld
{
public function SayHello()
{
echo 'World!';
}
}
{
// SayWorld にメンバーを含める
use SayWorld;
}
// SayHello() 関数は SayWorld コンポーネントからのものです
$xxoo->sayHello();
Traits には、複数の特性を含める、競合を解決する、アクセス許可を変更する、関数のエイリアスを設定するなど、多くの魔法の機能もあります。
Traits には Traits も含まれます。詳細については、公式 Web サイト [注] を参照してください。 http://www.php.net/manual/zh/ language.oop5.traits.php
開発環境で使用すると確かに非常に便利です。
Localhost はリスニング IP、8000 はリスニング ポートで、自分で変更できます。
ブレークポイントのデバッグに XDebug を使用することもできます。
インスタンス化中にクラスメンバーにアクセスする新機能:
コードは次のとおりです。
(新しい MyClass)->xxoo();
関数戻り配列のメンバー アクセス分析のサポートを追加しました (この書き込みメソッドは以前のバージョンではエラーを報告します):
コードは次のとおりです。
print func()[0];
for($i = 1; $i yield $i;
}
この関数の戻り値は配列です:
コードは次のとおりです。
[1、2、3、4、5、6、7、8、9、10]
foreach の list()
list() を使用して、foreach のネストされた配列を解析できます:
コードは次のとおりです。
$array = [ [1, 2, 3],
[4, 5, 6],
];
結果:
コードは次のとおりです。
1 2 3
4 5 6
詳細変更
mysql関数の使用は推奨されません。PDOまたはMySQLiを使用することをお勧めします。前の記事を参照してください。
Windows XP はサポートされなくなりました。
MyClass::class を使用してクラスの完全修飾名 (名前空間を含む) を取得できます。
empty() はパラメータとして式をサポートします。
try-catch 構造は、finally ブロックを追加します。
定数を定義するとき、以前に定義した定数を使用した計算を許可します:
const B = A + 1;
{
const STR = "hello";
const STR2 = self::STR + ", world";
}
関数パラメータのデフォルト値として定数を許可します:
コードは次のとおりです。
関数 func($arg = C::STR2)
$result = 0;
foreach($args as $arg)
$result += $arg;
return $result;
}
同時に、関数を呼び出すときに、配列を関数パラメータに展開できます:
コードは次のとおりです。
$arr = [2, 3];add(1, ...$arr);
//結果は 6 です
namespacenamespace は定数と関数をサポートします:
コードは次のとおりです。
名前空間 NameSpace { const FOO = 42;
function f() { echo __FUNCTION__."n" }
}
関数 NameSpacef を使用します;
}