ホームページ  >  記事  >  バックエンド開発  >  PHP5.X から PHP7.1.x への機能の統合

PHP5.X から PHP7.1.x への機能の統合

coldplay.xixi
coldplay.xixi転載
2021-01-20 09:47:511661ブラウズ

PHP5.X から PHP7.1.x への機能の統合

推奨 (無料): 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 &#39;j hit 17&#39;;

クロージャ、Lambda/匿名関数のサポート

クロージャ (Closure) 関数と Lambda 関数の概念は、関数型プログラミングの分野から来ています。たとえば、JavaScript は、クロージャとラムダ関数をサポートする最も一般的な言語の 1 つです。
PHP では、create_function() を使用してコードの実行中に関数を作成することもできます。ただし、作成した関数は実行時にのみコンパイルされ、他のコードと同時に実行コードにコンパイルされないため、APC のような実行コード キャッシュを使用してコードの実行効率を向上させることができません。
PHP5.3 では、Lambda/匿名関数を使用して、array_map()/array_walk() およびその他の関数のコールバック関数としていくつかの一時的な (使用して破棄する) 関数を定義できます。

echo preg_replace_callback(&#39;~-([a-z])~&#39;, function ($match) {    
    return strtoupper($match[1]);    
}, &#39;hello-world&#39;);    
// 输出 helloWorld    $greet = function($name)    {    
    printf("Hello %s\r\n", $name);    
};    
$greet(&#39;World&#39;);    
$greet(&#39;PHP&#39;);    
//...在某个类中    $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 "调用对象方法 &#39;$name&#39; "    
             . implode(&#39; -- &#39;, $arguments). "\n";    
    }    
    /**  PHP 5.3.0 以上版本中本类方法有效  */    
    public static function __callStatic($name, $arguments) {    
        // 参数 $name 大小写敏感    
        echo "调用静态方法 &#39;$name&#39; "    
             . implode(&#39; -- &#39;, $arguments). "\n";    
    }    
}    

$obj = new MethodTest;    
$obj->runTest(&#39;通过对象调用&#39;);    
MethodTest::runTest(&#39;静态调用&#39;);  // As of PHP 5.3.0

上記のコードを実行した後の出力は次のとおりです。
オブジェクト メソッド 'runTest' を呼び出します -- オブジェクト呼び出しを通じて静的メソッド 'runTest' を呼び出します -- 静的呼び出し
オブジェクトを関数の形式で呼び出すと、__invoke() メソッドが自動的に呼び出されます。

class MethodTest {    
    public function __call($name, $arguments) {    
        // 参数 $name 大小写敏感    
        echo "Calling object method &#39;$name&#39; "    
             . implode(&#39;, &#39;, $arguments). "\n";    
    }    

    /**  PHP 5.3.0 以上版本中本类方法有效  */    
    public static function __callStatic($name, $arguments) {    
        // 参数 $name 大小写敏感    
        echo "Calling static method &#39;$name&#39; "    
             . implode(&#39;, &#39;, $arguments). "\n";    
    }    
}    
$obj = new MethodTest;    
$obj->runTest(&#39;in object context&#39;);    
MethodTest::runTest(&#39;in static context&#39;);  // As of PHP 5.3.0

Nowdoc 構文

使用法は Heredoc と似ていますが、一重引用符を使用します。ヒアドキュメントは二重引用符を使用して宣言する必要があります。
Nowdoc は変数解析を行いません。これは、PHP コードの一部を渡すのに非常に適しています。

// Nowdoc 单引号 PHP 5.3之后支持    $name = &#39;MyName&#39;;    
echo <<<&#39;EOT&#39;    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 = &#39;Hello World&#39;;

三項演算子によりショートカットの記述メソッドが追加されます

#元の形式は (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[&#39;param&#39;] ?? 1;

は次と同等です:

$param = isset($_GET[&#39;param&#39;]) ? $_GET[&#39;param&#39;] : 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}"

古いバージョンの出力: \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 サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。