ホームページ  >  記事  >  バックエンド開発  >  php7の新機能を詳しく解説

php7の新機能を詳しく解説

零到壹度
零到壹度オリジナル
2018-03-24 09:56:112227ブラウズ

今回はphp7の新機能をまとめます。以下は実際の事例です。編集者の足跡をたどって見てみましょう。


php7の新機能

スカラー型宣言(パラメータが特定の型である必要があります。パラメータの型が一致しない場合、php5は致命的なエラーを引き起こし、php7はTypeError例外をスローします)

2 つのモード: 強制モード (デフォルト) と厳密モード

型パラメーターは次のとおりです:

1. string

2. int

3. float

4.bool

php5 で導入された他の型を拡張します


1. クラス名

戻り値の型宣言

php7 は戻り値の型の宣言を追加します。戻り値の型の宣言は、関数の戻り値の型を指定するものと非常に似ています。使用可能な型は、パラメーター宣言で使用可能な型と同じです。

例:

<span style="font-size:18px;">function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}
var_dump(sumOfInts(2, &#39;3&#39;, 4.1));</span>




NULL合体演算子


変数が存在し、値がNULLでない場合は独自の値を返し、それ以外の場合は2番目のパラメータを返します

<span style="font-size:18px;"><?php
function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
以上例程会输出:
Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)</span>

結果上の式と下の式は同じです。

$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;


結合比較演算子


は、2 つの式を比較するために使用されます。 $a が $b より大きい、等しい、または $b より小さい場合、それぞれ 1、0、または -1 を返します。

例:

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;

define() を通じて定数配列を定義します

<span style="font-size:18px;"><?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?></span>

匿名クラス


新しいクラスをサポートすることで、匿名クラスをインスタンス化できるようになりました。これは、一度だけ使用される一部の完了クラスを置き換えるために使用できます

unserialize() のフィルタリングを提供します

<?php
define(&#39;ANIMALS&#39;, [
    &#39;dog&#39;,
    &#39;cat&#39;,
    &#39;bird&#39;
]);
echo ANIMALS[1]; // outputs "cat"
?>
php5.6 中 仅能通过const 定义
<?php
const $a = [
     &#39;a&#39;,&#39;b&#39;,&#39;c&#39;,
];
echo $a[1] ; //输出 “b”
?>
IntlChar


新しく追加された IntlChar クラスは、より多くの ICU 関数を公開するように設計されています。このクラス自体は、複数の文字セットで Unicode 文字を操作するための多くの静的メソッドを定義します

これを使用したい場合。クラスを使用するには、最初に Intl 拡張機能をインストールする必要があります

ExpectedExpected は、以前の Asser() の下位互換性があり強化されたメソッドであり、運用環境でアサーションをゼロコストで有効にし、アサーションが失敗したときに特性例外をスローする機能。
assert() は、最初のパラメータを、単なる評価対象の文字列やテスト対象のブール値ではなく、式にすることを可能にする言語構造です


クラスのセットを宣言するには use を使用してください

<span style="font-size:18px;"><?php
// 把所有的对象转换为 __PHP_Incomplete_Class object
$data = unserialize($foo, ["allowed_classes" => false]);
// 除了MyClass,MyClass2 都转换为 into __PHP_Incomplete_Class object 
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);
// 默认的行为,接受所有的参数
$data = unserialize($foo, ["allowed_classes" => true]);
</span>



ジェネレータの戻り式
は次のとおりです:

<span style="font-size:18px;"><?php
// Pre PHP 7 code
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;
// PHP 7+ code
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};
?>
</span>

ジェネレータは次のように別のジェネレータ

に委任できます。 りー

新しい整数除算関数 intp()

は次のとおりです:

<span style="font-size:18px;"><?php
$gen = (function() {
    yield 1;
    yield 2;
    return 3;
})();
foreach ($gen as $val) {
    echo $val, PHP_EOL;
}
echo $gen->getReturn(), PHP_EOL;// 换行,为了提高源码可读性
以上例程会输出:
1
2
3
</span>

セッションオプション


これで、session_start() を通じて配列パラメータを受け入れることができ、php.ini にセッションを書き込むことができます設定コマンドのパラメータは、session.lazy_write、read_and_close、cache_limiter などをサポートします。
は次のとおりです:

<span style="font-size:18px;"><?php
function gen()
{
    yield 1;
    yield 2;
    yield from gen2();
}
function gen2()
{
    yield 3;
    yield 4;
}
foreach (gen() as $val)
{
    echo $val, PHP_EOL;
}
?>
以上例程会输出:
1
2
3
4
</span>

新しい preg_replace_callback_array() 関数

は preg_replace_callback() よりも優れたパフォーマンスを発揮します

新機能 2つrandom_bytes() と random_int()


具体的な使用法については、以下を参照してください:random_bytes()


random_int()

list() は自動解凍をサポートしなくなりました

以前は、list は ArrayAccess を実装したオブジェクトの動作を保証していませんでしたが、この問題は解決されました

以上がphp7の新機能を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。