ホームページ  >  記事  >  バックエンド開発  >  php7 の新機能: php7 によってもたらされた変更点

php7 の新機能: php7 によってもたらされた変更点

L
L転載
2020-05-30 10:17:552630ブラウズ

php7 の新機能: php7 によってもたらされた変更点

#PHP7 による変更

#1. 文字列処理機構の変更

#16 進文字を含む文字列は数値として見なされなくなり、別の扱いもされなくなりました。

<pre class="brush:php;toolbar:false">var_dump(&quot;0x123&quot; == &quot;291&quot;); // false var_dump(is_numeric(&quot;0x123&quot;)); // false var_dump(&quot;0xe&quot; + &quot;0x1&quot;); // 0 var_dump(substr(&quot;f00&quot;, &quot;0x1&quot;)) // foo</pre>

2. 整数処理メカニズムの変更

Int64 サポート、さまざまなプラットフォームで整数の長さを統一し、2GB を超える文字列とファイルのアップロードをサポートします。64 ビット PHP7 文字列の長さは 2^31 バイトを超えることがあります。

<pre class="brush:php;toolbar:false">// 无效的八进制数字(包含大于7的数字)会报编译错误 $i = 0681; // 老版本php会把无效数字忽略。 // 位移负的位置会产生异常 var_dump(1 &gt;&gt; -1); // 左位移超出位数则返回0 var_dump(1 &lt;&lt; 64);// 0 // 右位移超出会返回0或者-1 var_dump(100 &gt;&gt; 32);// 0 var_dump(-100 &gt;&gt; 32);// -1</pre>

3. パラメータ処理メカニズムの変更

繰り返しのパラメータ命名はサポートされません

function func(b, c) {} ; エラーが報告されます

2 つのメソッド func_get_arg() と func_get_args() は、渡された値ではなくパラメータの現在の値を返します。現在の値は変更される可能性があります。

したがって、次のようになります。関数の最初の行に記録するのが最善であることに注意してください。そうしないと、後で変更があった場合に、再度読み取ったときに渡される初期値ではなくなります。

function foo($x) {
$x++;
echo func_get_arg(0);
}
foo(1); //返回2

4.foreach の変更

foreach() ループは配列の内部ポインターでは動作しなくなりました

<pre class="brush:php;toolbar:false">$arr = [1,2,3]; foreach ($arr as &amp;$val) { echo current($arr);// php7 全返回0 }</pre>

値に従ってループする場合、foreach は配列のコピー操作です。

<pre class="brush:php;toolbar:false">$arr = [1,2,3]; foreach ($arr as $val) { unset($arr[1]); }var_dump($arr);</pre>最新の php7 では [1,2,3] が出力されます。 (追記: 7.0.0 は動作しません)

古いものでは [1,3]


リファレンスに従ってループする場合、配列への変更はループに影響します

<pre class="brush:php;toolbar:false">$arr = [1]; foreach ($arr as $val) { var_dump($val); $arr[1]=2; }</pre>最新の php7 では、新しい要素のサイクルが引き続き追加されます。 (ps: 7.0.0 は機能しません)

5. リストの変更

は逆の順序で値を割り当てなくなりました

/ /$arr は、以前の [3,2,1]

list($arr[], $arr[], $arr[]) = [1,2,3];

ではなく [1,2,3] になります。

// $x = null 并且 $y = null
$str = &#39;xy&#39;;
list($x, $y) = $str;
は文字列分割関数をサポートしなくなりました

list() = [123];
空の list() の代入は許可されなくなりました

#
list($a, $b) = (object)new ArrayObject([0, 1]);

#list() は配列オブジェクトに対しても機能するようになりました

$arr = [];
$arr[&#39;a&#39;] = &$arr[&#39;b&#39;];$arr[&#39;b&#39;] = 1;
// php7: [&#39;a&#39; => 1, &#39;b&#39; => 1]
// php5: [&#39;b&#39; => 1, &#39;a&#39; => 1]

6 .変数処理メカニズムの変更

変数、プロパティ、メソッドへの間接的な呼び出しは、いくつかの特殊なケースが混在するのではなく、厳密に左から右の順序で解析されるようになりました。 。以下の表は、解析順序におけるこの変更を示しています。

php7 の新機能: php7 によってもたらされた変更点

#参照代入中に自動的に作成される配列要素またはオブジェクト属性の順序が以前と異なります

rrreee

7. その他

1.debug_zval_dump() は、「long」の代わりに「int」を出力し、「double」の代わりに「float」を出力します。

2.dirname()追加オプション 2 番目のパラメータ Depth は、現在のディレクトリから 1 つ上のレベルの親ディレクトリの名前を取得します。

3.getrusage() は Windows.mktime() をサポートするようになり、gmmktime() 関数は is_dst パラメーターを受け入れなくなりました。

4. preg_replace() 関数は「\e」 (PREG_REPLACE_EVAL) をサポートしなくなりました。代わりに Preg_replace_callback() を使用する必要があります。

5. setlocale() 関数は、カテゴリ入力文字列を受け入れなくなりました。 LC_* 定数を使用する必要があります。

6.exec()、system()、および passthru() 関数には、NULL に対する保護が追加されました。

7.shmop_open() は、int ではなくリソースを返すようになりました。このリソースは次のとおりです。 shmop_size()、shmop_write()、shmop_read()、shmop_close()、および shmop_delete() に渡されます。

8. メモリ リークを回避するために、xml_set_object() は実行終了時に $parse を手動でクリアする必要があります。 。

9.curl_setopt 設定項目 CURLOPT_SAFE_UPLOAD の変更

TRUE は、CURLOPT_POSTFIELDS でのファイル送信の @ プレフィックスを無効にします。これは、@ をフィールドで安全に使用できることを意味します。 CURLFile はアップロードの代替として使用できます。

PHP 5.5.0 で追加されました。デフォルト値は FALSE です。 PHP 5.6.0 では、デフォルト値が TRUE に変更されます。 PHP 7 ではこのオプションが削除されたため、ファイルをアップロードするには CURLFile インターフェイスを使用する必要があります。


推奨チュートリアル:「

PHP7 チュートリアル

以上がphp7 の新機能: php7 によってもたらされた変更点の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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