2

CodeIgniter を使用して PHP を学習していますが、このコードにたどり着くのは初めてです。

...
$dashboard = 'admin/dashboard';
$this->user_model->loggedin() == FALSE || redirect($dashboard); // <-- ???

...

どういう意味ですか ?2行目以降は行間です。

三項演算子のようなものですか?

==== 質問を明確にするために更新 ====

たとえば、 IF演算子を使用する場合は、次のようにします。

if( $logged_in === TRUE ){
  // do something
}

または、1 行の IF 演算子の{ }中括弧なしで次のようにします。

if( $logged_in === TRUE )
  // do something
  // this line is not a part of 2 lines above

問題は、なぜその後何もないの$this->user_model->loggedin() == FALSE || redirect($dashboard);ですか?なぜ次の行は空で、実際には何を返すのでしょうか? どうすればそれを確認できますか?

4

3 に答える 3

3

||論理 OR 演算子です。左側の式が true と評価された場合、右側の式が評価されます。この場合、loggedin()FALSE を返すのが true の場合、OR の後の式||が評価されます。 redirect($dashboard)- それ以外の場合は評価されません。

これは「短絡」評価として知られています。最初の式が false を返す場合、2 番目の式は評価されません。

ログインが失敗した場合、コードの意図はリクエストをリダイレクトすることだったようです。

Re: あなたの質問--

これ以上何もすることがないので、次の行には何もありません。OR で結合された式は、実行する必要があるすべての処理を行います。あなたの場合、一種の省略形

if(loggedin() == FALSE) 
  redirect ($dashboard); 

わかる?

于 2013-11-09T17:39:50.393 に答える
3

それが論理 OR演算子です。

$a || $b $a または $b のいずれかが TRUE の場合は TRUE。

例えば

<?php
$a=TRUE;    // Set this to FALSE and your function will not be executed.
$b=$a==FALSE || 10;
var_dump($b);    // true because 10 || FALSE is true

?>

ここで注意すべきことは、演算子の優先順位と、後の部分が実行されない場合です。

<?php

// --------------------
// foo() will never get called as those operators are short-circuit

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());
?>

2行目以降は行間です。

それはまったく無意味です、それは何の意味もありません。以下からコードを取得して、何も変更しない空白行を削除できます。

ソース:

編集

あなたが本当に知りたいことに関するあなたの質問の新しい説明に基づいて、この例を考えてみましょう。$login ステータスが true の場合にのみ、誰かにウェルカム メッセージを表示したいとします。これはあなたがそうすることができる1つの方法です:

<?php
$login=FALSE;
$login==TRUE || myFunction();
function myFunction()
{
 echo "Control has reached my function. Welcome You are logged in";
}
?>

なぜこの特定の方法で単純な方法ではないのif elseでしょうか? どの構文を使用し、どの構文を自分が作成する特定のコードに最も適していると判断するかは、完全にプログラマ次第です。これは、このスタイルに従うことを強制するものではなく、他の多くの方法でも行うことができます.

于 2013-11-09T17:38:23.587 に答える
3

ご存じのとおり、論理 OR 演算子 ( ||) は、ブール式のいずれかが真かどうかをチェックします。

ブール値を返す2 つの関数がaあり、そのうちの 1 つが true を返すかどうかを確認したいとします。b

function a() {
    echo "function a was called\n";
    return true;
}

function b() {
    echo "function b was called\n";
    return false;
}

if (a() || b()) {
    echo "hello\n";
}

この場合、出力は次のようになります。

関数 a が呼び出されました

こんにちは

式の少なくとも 1 つが真で、最初の式が に評価されるtrueかどうかをチェックする場合、2 番目の式も真であるかどうかをチェックする必要はありませんよね? function b was calledそのため、この例の出力にも表示されませんでした。

とからの戻り値を交換するabaが返されfalsebtrue返され、 if ステートメントで 2 番目の呼び出しが true を返すかどうかを確認する必要があるため、2 つの関数が実行されます。

あなたのコードにも同様のケースがあります。は、最初の条件 ( ) が false と評価さredirect($dashboard)れた場合にのみ実行されます。$this->user_model->loggedin() == FALSEこのコードは、次のように機能を変更せずに記述できます。

if (!($this->user_model->loggedin() == FALSE)) {
    redirect($dashboard);
}

...また...

if ($this->user_model->loggedin() == TRUE) {
    redirect($dashboard);
}

...あるいは単に...

if ($this->user_model->loggedin()) {
    redirect($dashboard);
}
于 2013-11-09T17:51:10.243 に答える