2011-08-16 5 views
22

私はちょうど、PHPの型キャストが(unset)になっていることに気付きました。変数を実際には設定しなくても、単にNULLにキャストします。つまり、(unset)$anythingは、単にNULLと書くだけです。誰もPHPの(設定されていない)キャストを使ったことがありますか?

# Really unsetting the variable results in a notice when accessing it 
[email protected]:~$ php -r '$foo = 123; unset($foo); echo $foo;' 
PHP Notice: Undefined variable: foo in Command line code on line 1 
PHP Stack trace: 
PHP 1. {main}() Command line code:0 

# (unset) just set it to NULL, and it doesn't result in a notice 
[email protected]:~$ php -r '$foo = 123; $foo=(unset)$foo; echo $foo;' 

誰でもこれまで何でも使用しましたか?私はそれのためにすべての可能な使用法を考える...

を追加することはできません。
質問の主な考え方は次のとおりです。(unset)$smthだけではなくNULLを使用する理由は何

答えて

14

は、私の知る限り、(unset)$yは常にnullに評価され、unset($y)を呼び出すとは異なり、キャストにはない

$x = NULL; 

$x = (unset)$y; 

を使用することのない点は本当にありません$yにはまったく影響しません。

唯一の違いは、$yが定義されていない場合は、キャストを使用して、まだ「未定義の変数」の通知を生成することです。

関連する問題についてPHP bugがあります。バグは、実際には(私の考えでは)文章のどこかにある誤解を招くような文章です。

変数をnullにキャストすると変数が削除され、その値は設定解除されます。

は、そして、それは明らかにそうではありません。

+0

通知生成が正しく見つかりました。その見通しについては、実際にはある場所ではかなり役に立つかもしれません。 – Smar

+0

私はPHPで全く役に立たない機能を見て驚いています...彼らはそれを追加したときに何を考えていたのだろうか。私は何かが欠けているかもしれないと思った...しかし、私はそれはまったく役に立たないと思います。 – shesek

+0

通知ビヘイビアは、値を気にしなくても変数が未定義であることを記録するための扉を開きます。私の頭の上から私は実際にその能力のユースケースを考え出すことはできません。私が考えることができる唯一の他のものは、値をnullに置き換えるための一種の「略記」編集として使用できますが、その場所の値が何であったかというコードにはまだ何らかの概念があります。 –

6

私は(PHPを知り、それがnotaribly ...別のもののための興味深い選択肢は、私は完全に間違っている可能性があります)値がVARに設定する必要がないように、それがあることを推測すると思います。コードのためにそれを使用する正確な理由から、私は例を考えることはできませんが、このような何か:

あり
$foo = bar((unset) baz()); 

あなたがしたいか、バーの引数としてnullを持っている必要があり、まだあまりにもbaz()を呼び出す必要があります。関数の構文が変更され、誰かがPHPで熱くなっているようなダックテープ修正をしました。

だから私は言わないだろう:よく考えアーキテクチャをそれを使用する理由を。最初の場所で私が投票するのはあまりにも曖昧な解決策に使用されるかもしれません。

+3

最初に 'bar'に' null'を渡す場合、なぜこのように関数呼び出しを連鎖させたいのかわかりません... – deceze

1

例えば、fallback()戻り、「動物園」(unset)は、その値がクリアされます場合でも、この

function fallback() 
{ 
    // some stuff here 
    return 'zoo'; 
} 

var_dump(false ? 'foo' : fallback()); // zoo 
var_dump(false ? 'foo' : (unset) fallback()); // null 

ように使用することができます。

関連する問題