1. PHP 5.5.x から PHP 5.6 に移行します。xx
式を使用して定数を定義する
PHP の以前のバージョンでは、定数の定義、プロパティの宣言、関数パラメーターのデフォルト値の指定には静的な値を使用する必要がありました。数値、文字列リテラル、その他の定数を含む数値式を使用して、定数の定義、プロパティの宣言、関数パラメーターのデフォルト値の設定を行うことができるようになりました。
ログイン後にコピー
これで、const
キーワードを使用して、array
型の定数を定義できるようになりました。
ログイン後にコピー
可変長パラメータ関数を定義するには...
演算子を使用します
現在、func_get_args()# に依存することはできません。 ##、可変長パラメーター関数を実装するには、
...演算子を使用します。
$req: 1; $opt: 0; number of params: 0 $req: 1; $opt: 2; number of params: 0 $req: 1; $opt: 2; number of params: 1 $req: 1; $opt: 2; number of params: 2
関数を呼び出すときは...演算子をパラメータ拡張に使用します
...演算子を使用する場合、配列と走査可能なオブジェクトを関数パラメータに展開します。 Ruby などの他のプログラミング言語では、これは連結演算子と呼ばれます。
6
use function と use const
use functionおよび
use constです。
42 Name\Space\f
hash_equals()タイミング攻撃を避けるために文字列を比較します
2. PHP 5.6 より.x PHP 7.0 に移植。x
スカラー型宣言 スカラー型宣言には、必須モード (デフォルト) と厳密モードの 2 つのモードがあります。 string、int、float、bool の型パラメータが (強制モードまたは厳密モードのいずれかで) 使用できるようになりました。ログイン後にコピー
int(9)
戻り値の型宣言
PHP 7 では戻り値の型宣言のサポートが追加されました。パラメーターの型宣言と同様に、戻り値の型宣言では関数の戻り値の型を指定します。使用可能な型は、パラメータ宣言で使用できる型と同じです。ログイン後にコピー
null 合体演算子
日常の使用では三項式と isset() が同時に使用される状況が多数あるため、null 合体演算子 ( ??) この糖衣構文。変数が存在し、NULL でない場合はそれ自体の値を返し、それ以外の場合は 2 番目のオペランドを返します。Spaceship 演算子 (結合比較演算子)
spaceship 演算子は、2 つの式を比較するために使用されます。 $a が $b より小さい場合、等しい場合、または $b より大きい場合は、それぞれ -1、0、または 1 を返します。比較の原則は、PHP の通常の比較ルールに従います。'1'; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // 浮点数 echo '1.50' <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // 字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1 echo "b" <=> "a"; // 1 ?>
define()を介して定数配列を定義
define()を介して定義できるようになりました。 PHP5.6 では、
constを介してのみ定義できます。
define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // 输出 "cat"
Closure::call()
Closure::call()パフォーマンスが向上し、短く簡潔な一時バインディングになりました。 メソッドをクロージャします。オブジェクト上でそれを呼び出します。
x;}; $getX = $getXCB->bindTo(new A, 'A'); // 中间层闭包 echo $getX(); // PHP 7+ 及更高版本的代码 $getX = function() {return $this->x;}; echo $getX->call(new A);
1
名前空間からインポートされたクラス、関数、および定数をパススルーできるようになりました単一使用 ステートメントは一度にインポートされます。
ジェネレーターは式を返すことができます
この機能は、PHP 5.5 バージョンで導入されたジェネレーター機能に基づいて構築されています。ジェネレーター関数の return 構文を使用して、式を返すことができます (ただし、参照値を返すことはできません)。ジェネレーターの戻り値は、Generator::getReturn() メソッドを呼び出すことで取得できますが、このメソッドは、プロセッサが作業の生成を終了した後に Called を 1 回生成する場合にのみ使用できます。整数除算関数intdiv()
## への移行#Null 可能な型
型の前に疑問符を追加することで、パラメーターと戻り値の型を Null 可能にできるようになりました。この機能が有効な場合、渡されるパラメーターまたは関数によって返される結果は、指定された型または null のいずれかになります。
ログイン後にコピー
string(10) "elePHPant" NULL string(10) "elePHPant" NULL Uncaught Error: Too few arguments to function test(), 0 passed in...
Void 関数
新しい戻り値の型 void が導入されました。戻り値が void 型で宣言されているメソッドは、単純にreturn
ステートメントを省略するか、空のreturnステートメントを使用します。 NULL は、void 関数の正当な戻り値ではありません。
ログイン後にコピー
上記のルーチンは次の出力を行います:
null int(2) int(1) Symmetric array destructuring
ログイン後にコピー
クラス定数の可視性
クラス定数の可視性の設定がサポートされるようになりました。
ログイン後にコピー
疑似クラス
现在引入了一个新的被称为iterable的伪类 (与callable类似)。 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 array或对象返回值类型到iterable。
ログイン後にコピー
多异常捕获处理
一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。
ログイン後にコピー
list()现在支持键名
现在list()和它的新的[]语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)
1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ]; // list() style list("id" => $id1, "name" => $name1) = $data[0]; // [] style ["id" => $id1, "name" => $name1] = $data[0]; // list() style foreach ($data as list("id" => $id, "name" => $name)) { // logic here with $id and $name } // [] style foreach ($data as ["id" => $id, "name" => $name]) { // logic here with $id and $name }
四、从PHP 7.1.x 移植到 PHP 7.2.x
新的对象类型
这种新的对象类型, object, 引进了可用于逆变(contravariant)参数输入和协变(covariant)返回任何对象类型。
ログイン後にコピー
允许重写抽象方法(Abstract method)
当一个抽象类继承于另外一个抽象类的时候,继承后的抽象类可以重写被继承的抽象类的抽象方法。
abstract class A { abstract function test(string $s); } abstract class B extends A { // overridden - still maintaining contravariance for parameters and covariance for return abstract function test($s) : int; }
扩展了参数类型
重写方法和接口实现的参数类型现在可以省略了。不过这仍然是符合LSP,因为现在这种参数类型是逆变的。
interface A { public function Test(array $input); } class B implements A { public function Test($input){} // type omitted for $input }
允许分组命名空间的尾部逗号
命名空间可以在PHP 7中使用尾随逗号进行分组引入。
use Foo\Bar\{ Foo, Bar, Baz, };
以上がPHP5.5 から PHP7.2 への新機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。