6

コーディング忍者h4xのスキルを向上させようとしています。現在、さまざまなフレームワークを検討していますが、グーグルで検索するのがかなり難しいサンプルコードを見つけました。

プロジェクトで使用されているFUELフレームワークを見ています。

わからないサンプルは

$data and $this->template->set_global($data);

このコード行でandキーワードは何をしていますか?フレームワークの多くの場所で使用されており、それを使用しているのは私が最初に見つけたものです。

4

5 に答える 5

13

これは「短絡評価」の一種です。は、比較のand/&&両側がに評価される必要があることを意味しTRUEます。

の左側の項目and/&&が評価され、のTRUE/FALSE場合TRUE、右側の項目が実行されて評価されます。左側の項目がの場合FALSE、実行は停止し、右側は評価されません。

$data = FALSE;
// $this->template->set_global($data) doesn't get evaluated!
$data and $this->template->set_global($data);

$data = TRUE;
// $this->template->set_global($data) gets evaluated
$data and $this->template->set_global($data);

これらは実際のブール値TRUE/FALSEである必要はありませんが、PHPの評価ルールに従って真偽の値である可能性もあることに注意してください。評価ルールの詳細については、 PHPブール値のドキュメントを参照してください。

于 2011-10-05T17:19:35.027 に答える
4

論理演算子を使用する場合、オペランド(左側の値と右側の値)はブール値として評価されるため、基本的に、コードはこれをより短い方法で実行します。

$o1 = (Bool)$data; // cast to bool
if($o1)
    $o2 = (Bool)$this->template->set_global($data); // cast to bool

編集:

いくつかの追加情報:

$a = 33;
isset($a) && print($a) || print("not set");
echo "<br>";
isset($a) AND print($a) OR print("not set");
echo "<br>";

コメント/コメントを外してみてください$a = 33;。これは、との間、&&およびANDとの間の違いです(文字列に変換されると、「1」にキャストされるtrueを返します)。||ORprint

于 2011-10-05T17:23:06.463 に答える
2

これは有効なステートメントであり、次のように機能します。

$ dataが有効な場合(''、0、またはNULLではない場合)、$ this-> template-> set_global($ data)を実行します。

それは簡単な言い方です:

if ($data)
{
    $this->template->set_global($data);
}

&&ところで、代わりに使用することもできますand

于 2011-10-05T17:21:21.403 に答える
0

PHPはと論理積演算の両方&&をサポートしており、演算子の優先順位がhttp://php.net/manual/en/language.operators.precedence.phpよりもわずかに低いことandを除いて、通常は同じように機能します。and&&

于 2011-10-05T17:27:33.343 に答える
-2

これはブール演算子です。つまり、2つのオペランドを取り、ブール値を返します-trueまたはfalse。両方のオペランドがtrue(空の文字列、PHPではゼロまたはnull以外の)と評価された場合は、を返します。trueそれ以外の場合、結果は。になりますfalse

and演算子に関するPHPの公式ドキュメントは次のとおりです。http ://www.php.net/manual/en/language.operators.logical.php

<?php
$a = true and false; # FALSE
$b = true and 5; # TRUE
$c = '' and 0; # FALSE
$d = null and true; # FALSE
?>
于 2011-10-05T17:22:08.297 に答える