#PHP7 による変更
#1. 文字列処理機構の変更
#16 進文字を含む文字列は数値として見なされなくなり、別の扱いもされなくなりました。<pre class="brush:php;toolbar:false">var_dump("0x123" == "291"); // false
var_dump(is_numeric("0x123")); // false
var_dump("0xe" + "0x1"); // 0
var_dump(substr("f00", "0x1")) // foo</pre>
Int64 サポート、さまざまなプラットフォームで整数の長さを統一し、2GB を超える文字列とファイルのアップロードをサポートします。64 ビット PHP7 文字列の長さは 2^31 バイトを超えることがあります。
<pre class="brush:php;toolbar:false">// 无效的八进制数字(包含大于7的数字)会报编译错误
$i = 0681; // 老版本php会把无效数字忽略。
// 位移负的位置会产生异常
var_dump(1 >> -1);
// 左位移超出位数则返回0
var_dump(1 << 64);// 0
// 右位移超出会返回0或者-1
var_dump(100 >> 32);// 0
var_dump(-100 >> 32);// -1</pre>
繰り返しのパラメータ命名はサポートされません
function func(b, c) {} ; エラーが報告されます
したがって、次のようになります。関数の最初の行に記録するのが最善であることに注意してください。そうしないと、後で変更があった場合に、再度読み取ったときに渡される初期値ではなくなります。
function foo($x) { $x++; echo func_get_arg(0); } foo(1); //返回24.foreach の変更
foreach() ループは配列の内部ポインターでは動作しなくなりました
<pre class="brush:php;toolbar:false">$arr = [1,2,3];
foreach ($arr as &$val) {
echo current($arr);// php7 全返回0
}</pre>
<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 は動作しません)
<pre class="brush:php;toolbar:false">$arr = [1];
foreach ($arr as $val) {
var_dump($val);
$arr[1]=2;
}</pre>
最新の php7 では、新しい要素のサイクルが引き続き追加されます。 (ps: 7.0.0 は機能しません)
は逆の順序で値を割り当てなくなりました
/ /$arr は、以前の [3,2,1]
list($arr[], $arr[], $arr[]) = [1,2,3];ではなく [1,2,3] になります。
// $x = null 并且 $y = null $str = 'xy'; list($x, $y) = $str;
は文字列分割関数をサポートしなくなりました
list() = [123];
空の list() の代入は許可されなくなりました #list($a, $b) = (object)new ArrayObject([0, 1]);
#list() は配列オブジェクトに対しても機能するようになりました
$arr = []; $arr['a'] = &$arr['b'];$arr['b'] = 1; // php7: ['a' => 1, 'b' => 1] // php5: ['b' => 1, 'a' => 1]
6 .変数処理メカニズムの変更
変数、プロパティ、メソッドへの間接的な呼び出しは、いくつかの特殊なケースが混在するのではなく、厳密に左から右の順序で解析されるようになりました。 。以下の表は、解析順序におけるこの変更を示しています。
rrreee
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 によってもたらされた変更点の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。