推奨 (無料): PHP7
非常に多くの優れた機能と優れたメソッドがあるため、それらを使用しない手はありません。また、PHP がますます良くなることを願っています。
ここでは、PHP 5.1、PHP5.2、PHP5.3、PHP5.4、PHP5.5、PHP5.6、PHP7、PHP7.1 のすべての新機能を整理し、誰でも学習して使用できるようにしています
組み込み Web サーバーには単純な組み込み Web サーバーがあります
現在のディレクトリをルート ドキュメントとして使用するには、次のコマンドのみが必要です:
php -S localhost:3300
他のパスも指定します
php -S localhost:3300 -t /path/to/root
ルートも指定できます
php -S localhost:3300 router.php
Namespace (php5.3)
名前空間の区切り文字はバックスラッシュです\
namespace fox\lanmps\Table; class Select {}
完全なカテゴリ名を取得します
名前空間のエイリアス クラスと名前空間の短縮バージョンの機能は、PHP5.3 で導入されました。これは文字列クラス名には機能しませんが、
use Some\Deeply\Nested\Namespace\FooBar; // does not work, because this will try to use the global `FooBar` class $reflection = new ReflectionClass('FooBar'); echo FooBar::class;
この問題を解決するには、クラスの完全なクラス名を返す新しい FooBar::class 構文を採用します。
名前空間使用操作シンボルが関数と定数のインポートのサポートを開始しました
namespace Name\Space { const FOO = 42; function f() { echo __FUNCTION__."\n"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."\n"; f(); }
出力
42
Name\Space\f
グループ使用宣言
同じ名前空間からインポートされたクラス、関数、定数を、単一の use ステートメントで一度にインポートできるようになりました。
//PHP7之前use some\namespace\ClassA;use some\namespace\ClassB;use some\namespace\ClassC as C;use function some\namespace\fn_a;use function some\namespace\fn_b;use function some\namespace\fn_c;use const some\namespace\ConstA;use const some\namespace\ConstB;use const some\namespace\ConstC;// PHP7之后use some\namespace\{ClassA, ClassB, ClassC as C};use function some\namespace\{fn_a, fn_b, fn_c};use const some\namespace\{ConstA, ConstB, ConstC};
遅延静的バインディングをサポート
遅延静的バインディングを実装する現在のクラスを参照する静的キーワード
class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 这里实现了延迟的静态绑定 } } class B extends A { public static function who() { echo __CLASS__; } } B::test();
出力結果:
B
goto ステートメントのサポート
ほとんどのコンピューター プログラミング言語は、無条件の goto ステートメント goto をサポートしており、プログラムが goto ステートメントを実行すると、goto ステートメントに切り替わります。ラベルで示されたプログラムの位置から続きます。 goto ステートメントはプログラム フローを不明瞭にし、可読性を低下させる可能性がありますが、深くネストされたループや if ステートメントを中断するなど、特定の状況では独自の便利性があります。
goto a; echo 'Foo'; a: echo 'Bar'; for($i=0,$j=50; $i<100; $i++) { while($j--) { if($j==17) goto end; } } echo "i = $i"; end: echo 'j hit 17';
クロージャ、Lambda/匿名関数のサポート
クロージャ (Closure) 関数と Lambda 関数の概念は、関数型プログラミングの分野から来ています。たとえば、JavaScript は、クロージャとラムダ関数をサポートする最も一般的な言語の 1 つです。
PHP では、create_function() を使用してコードの実行中に関数を作成することもできます。ただし、作成した関数は実行時にのみコンパイルされ、他のコードと同時に実行コードにコンパイルされないため、APC のような実行コード キャッシュを使用してコードの実行効率を向上させることができません。
PHP5.3 では、Lambda/匿名関数を使用して、array_map()/array_walk() およびその他の関数のコールバック関数としていくつかの一時的な (使用して破棄する) 関数を定義できます。
echo preg_replace_callback('~-([a-z])~', function ($match) { return strtoupper($match[1]); }, 'hello-world'); // 输出 helloWorld $greet = function($name) { printf("Hello %s\r\n", $name); }; $greet('World'); $greet('PHP'); //...在某个类中 $callback = function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); };
マジックメソッド __callStatic() と __invoke()
PHP にはもともとマジック メソッド __call() があります。マジックメソッドは、メソッドが存在する場合に自動的に呼び出されます。新しい __callStatic() メソッドは、静的クラス メソッドにのみ使用されます。クラスに存在しない静的メソッドを呼び出そうとすると、__callStatic() マジック メソッドが自動的に呼び出されます。
class MethodTest { public function __call($name, $arguments) { // 参数 $name 大小写敏感 echo "调用对象方法 '$name' " . implode(' -- ', $arguments). "\n"; } /** PHP 5.3.0 以上版本中本类方法有效 */ public static function __callStatic($name, $arguments) { // 参数 $name 大小写敏感 echo "调用静态方法 '$name' " . implode(' -- ', $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest('通过对象调用'); MethodTest::runTest('静态调用'); // As of PHP 5.3.0
上記のコードを実行した後の出力は次のとおりです。
オブジェクト メソッド 'runTest' を呼び出します -- オブジェクト呼び出しを通じて静的メソッド 'runTest' を呼び出します -- 静的呼び出し
オブジェクトを関数の形式で呼び出すと、__invoke() メソッドが自動的に呼び出されます。
class MethodTest { public function __call($name, $arguments) { // 参数 $name 大小写敏感 echo "Calling object method '$name' " . implode(', ', $arguments). "\n"; } /** PHP 5.3.0 以上版本中本类方法有效 */ public static function __callStatic($name, $arguments) { // 参数 $name 大小写敏感 echo "Calling static method '$name' " . implode(', ', $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest('in object context'); MethodTest::runTest('in static context'); // As of PHP 5.3.0
Nowdoc 構文
使用法は Heredoc と似ていますが、一重引用符を使用します。ヒアドキュメントは二重引用符を使用して宣言する必要があります。
Nowdoc は変数解析を行いません。これは、PHP コードの一部を渡すのに非常に適しています。
// Nowdoc 单引号 PHP 5.3之后支持 $name = 'MyName'; echo <<<'EOT' My name is "$name". EOT; //上面代码输出 My name is "$name". ((其中变量不被解析) // Heredoc不加引号 echo <<<FOOBAR Hello World! FOOBAR; //或者 双引号 PHP 5.3之后支持 echo <<<"FOOBAR" Hello World! FOOBAR;
ヒアドキュメントを介した静的変数、クラス メンバー、クラス定数の初期化をサポートします。
// 静态变量 function foo() { static $bar = <<<LABEL Nothing in here... LABEL; } // 类成员、常量 class foo { const BAR = <<<FOOBAR Constant example FOOBAR; public $baz = <<<FOOBAR Property example FOOBAR; }
Const はクラス外の定数の定義にも使用できます
//PHP中定义常量通常是用这种方式 define("CONSTANT", "Hello world."); //并且新增了一种常量定义方式 const CONSTANT = 'Hello World';
三項演算子によりショートカットの記述メソッドが追加されます
#元の形式は (expr1) ? (expr2) : (expr3) expr1 の結果が True の場合、expr2 の結果が返されます。
新しい書き方を追加します。途中を省略して expr1 ?: expr3 と記述できます。
expr1 の結果が True の場合、expr1 の結果が返されます。
$expr1=1;$expr2=2;//原格式 $expr=$expr1?$expr1:$expr2 //新格式 $expr=$expr1?:$expr2
1
1
Null 合体演算子 (??)
簡易判定$param = $_GET['param'] ?? 1;
$param = isset($_GET['param']) ? $_GET['param'] : 1;
Json は中国語をよりよく理解します (JSON_UNESCAPED_UNICODE)
echo json_encode("中文", JSON_UNESCAPED_UNICODE); //输出:"中文"
バイナリ
$bin = 0b1101; echo $bin; //13
Unicode コードポイント変換構文
これは受け入れられます。16 進形式の Unicode コードポイントで、二重引用符またはヒアドキュメントで囲まれた UTF-8 エンコード文字列を出力します。有効なコードポイントはどれでも受け入れられ、先頭の 0 は省略できます。echo "\u{9876}"
新しいバージョンの入力: Top
電源操作には ** を使用します
右に追加結合演算 指数演算を実行するには、記号* を使用します。また、指数演算を実行して値を割り当てることを意味する、省略された *= 演算子もサポートしています。
printf("2 ** 3 == %d\n", 2 ** 3);printf("2 ** 3 ** 2 == %d\n", 2 ** 3 ** 2);$a = 2;$a **= 3;printf("a == %d\n", $a);
2 ** 3 == 8
2
* 3 * 2 == 512 a == 8
spaceship 演算子は、2 つの式を比較するために使用されます。いつ #########
##a##大 ###で########################、################### ## 等しい または ##小At ###############################
以上がPHP5.X から PHP7.1.x への機能の統合の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。