「PHP/入門/変数と値」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎演算子: header('Content-Type: text/plain');
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎unset: header('Content-Type: text/plain');PPHPでは、ループ変数のスコープはループではなく関数スコープ(あるいはグローバルスコープ)なので、ループを抜けたあと悪さをしないように、unset() しましょう(ループから脱走したリファレンスを使って代入すると発見困難なバグになります)。 ドメインによっては、 $ループ変数 = null; で標準化していることもありますが趣旨は同じです。
タグ: 2017年版ソースエディター
541 行
ためしに下記コード例では、unsetの適用後、変数を参照しています。
 
;例:<syntaxhighlight lang=php line>
<?php
header('Content-Type: text/plain');
$num1 = 70;
$num2 = 12;
 
$num1n = 70;
print $num1."<br>";
$num2m = 12;
 
echo $n, PHP_EOL;
print $num2."<br>";
echo $m, PHP_EOL;
 
unset($num2m);
echo $m, PHP_EOL;
 
echo $x, PHP_EOL;
print $num2."<br>";
unset($x);
 
?>
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
 
;実行結果
<pre>
70
12
PHP Warning: Undefined variable $num2m in C:\ファイルアドレス\ファイル名/workspace/Main.php on line 1110
PHP Warning: Undefined variable $x in /workspace/Main.php on line 11
</pre>
</syntaxhighlight>
 
: unset() された $m は、存在しない変数 $x と同じ挙動をします。
上記の実行結果のように、言語処理系が警告をしてくれています。unsetの仕様に反して無理やりにnum2を再使用しているので、警告をしてくれる動作のほうが、言語処理系の動作としては正常な動作結果です。
: unset($x) しても何も起こりません。
 
PHPでは、ループ変数のスコープはループ'''ではなく'''関数スコープ(あるいはグローバルスコープ)なので、ループを抜けたあと悪さをしないように、unset() しましょう(ループから脱走したリファレンスを使って代入すると発見困難なバグになります)。
なお、C++など他の言語で類似の機能をもつ「delete」という名の文ないし関数は、PHPには存在しません<ref>[https://www.php.net/manual/ja/function.delete.php 『PHP: delete - Manual』] 2021年12月7日に確認. </ref>。
ドメインによっては、 $ループ変数 = null; で標準化していることもありますが趣旨は同じです。
 
=== null ===