2012-02-25 10 views
-3

私自身のパーソナライズされた未設定機能を作成しますが、機能しません。 ここでは動作しないコードの例を示します。パーソナライズされた未設定を作成できません

<?php 
function remove_var($mixedVar) 
{ 
unset($mixedVar); 
} 
$sExample='Php'; 
remove_var($sExample); 
echo $sExample; 
?> 
+1

私が間違っていない場合、unsetはarg $ mixedVarに関連し、$ sExample変数には関係ありません。見てみましょう:http://php.net/manual/en/function.unset.php –

+1

ローカルの '$ mixedVar'変数の設定を解除します。あなたがしようとしていることをする方法がないと言うことができる限り、 '$ sExample'をグローバルにすることはできません。 [PHP documentation](http://php.net/manual/en/function.unset.php)を参照してください。 – spencercw

答えて

1

それはその関数の外に存在するため$sExampleあなたの機能は解除しません。なぜかunsetを使用しないでください。

変数を参照渡ししても、unsetはその変数を削除しません。例:

function remove_var(&$mixedVar) 
{ 
    unset($mixedVar); 
} 

$sExample='Php'; 
remove_var($sExample); 
echo $sExample; // Php 

代わりにunsetを使用してください。

1

最初の問題は、引数を値渡しにすることです。つまり、remove_var()の中で何をするかは、関数外の元の変数には影響しません。次のように代わりに参照渡しするには、関数の宣言を変更:

function remove_var(&$mixedVar) 

しかし、まだunset()この方法を使用して癖があります - 変数が参照渡しされた場合でも、私のために動作しません。ただし、代わりにnullに変数を設定すると、になります。これはほぼ同等です。関数内の変数がunset()の場合、その参照は削除されますが、元の参照は残り、値は変更されません。代わりにnullに値を変更すると、参照は単独で残されますが、値は明らかにnullに変更されます。とにかく設定されていない変数の値を取得すると、nullが得られます。これは事実上同等です。したがって、試してみてください:

function remove_var(&$mixedVar) 
{ 
    $mixedVar = null; 
} 
+0

それは本当ですが、 'null'は' unset'の目的に反するメモリ内の参照をまだ保持しています。ここでのポイントは、OPに彼が 'unset'を使うべきことを説明しなければならないということです。不要なコードやむしろそのような悪い練習を避けてください:) – Sarfraz

+0

私は彼がその機能で何か他のことをしたいと思っていました。まあ、彼はそれを示していない - そうでなければ、パーソナライズされたバージョンではポイントがありません。しかし、それ以外の、言及されていないもののための関数を持ち、とにかく 'unset()' *を呼び出すのが最良だと思います。 – Dmitri

+0

私はその場合あなたに同意しますが、何か間違った答えがOPによって受け入れられたと推測します、面白い:) – Sarfraz

関連する問題