2011-09-28 5 views
1

empty(strip_tags($string))を代入するときにエラーCan't use function return value in write contextが発生しました。だから、テストのために、私は割り当てと三つのステートメントを取り除いた。しかし、私は明らかに書き込みの文脈ではないときにこのエラーが発生しています。strip_tags()書き込みをしていないときに "書き込みコンテキストで関数の戻り値を使用できません"

私はそれを考えると、どういうことを意味するのかわかりません。write contextの意味 - 私はそれが割り当てと関係していると思っていましたが、確かにそれを知っているとは言えません。

なぜ私はそれがすべきだと思うように動作しないのですか?それは私にとってはかなりストレートなようです。私は何が欠けていますか?

$ cat test.php 
<? 

$string = "<br/>"; 

if (empty(strip_tags($string))) { 
    echo "It's empty.\n"; 
} else { 
    echo "It's not empty.\n"; 
} 

$ php test.php 
PHP Fatal error: Can't use function return value in write context in test.php on line 5 

答えて

5

empty()では、関数の出力ではなく変数を使用する必要があります。代わりに、strip_tags()の出力を変数に格納します。

$stripped = strip_tags($string); 
if (empty($stripped)) { 
    echo "It's empty.\n"; 
} else { 
    echo "It's not empty.\n"; 
} 

これはempty() documentationで説明されています。

注:他の何かがパースエラーになりますよう empty()は、変数のみをチェックします。つまり、次のように動作しません:empty(trim($name))

+0

Ah!私はそれが 'strip_tags()'と間違っていると思った。 – user151841

4

emptyには変数が必要です。あなたは、関数の戻り値を渡す、それは異なっている。

あなたは括弧の中にそれを置くことによってそれを回避することができます。

if (empty((strip_tags($string)))) { 

をしかし、より良いlike Michael wroteを行い、この提案は汚いハックのいくつかの種類です。興味があれば、Parentheses altering semantics of function call resultPHP Bug Report: #55222 Fatal Error disappears when using paranthesisで議論されています。

+1

+1。 parensがそういう評価をするのを知らなかった。汚いハックですが、面白いです。 –