什么$ this-> something()|| PHP简写/快捷方式中的somefunction($ somevar)是什么意思?

时间:2013-11-09 17:30:40

标签: php codeigniter

我正在使用CodeIgniter学习PHP,这是我第一次遇到这段代码:

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

...

这是什么意思?第二行后面有一个行间距。

它是否像三元运算符?

====由于澄清问题而更新====

例如,如果我想使用 IF 运算符,我会这样做:

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

或者像这样没有 {} 大括号的IF运算符,其中包含一行:

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

问题是,为什么$this->user_model->loggedin() == FALSE || redirect($dashboard);之后什么都没有?为什么下一行是空的,它真正返回了什么?我怎么检查呢?

3 个答案:

答案 0 :(得分:3)

这是 Logical 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());
?>
  

第二行后面有一个行间距。

这绝对毫无意义,没有任何意义。您可以从下面拉取代码并删除该空行,它不会改变任何内容。

Source:

修改

根据您在问题中的新解释,您可以考虑这个示例。假设您希望仅在其登录状态为真时向某人显示欢迎消息。这是单向你可以这样做:

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

为什么这样做的具体方式而不是简单的if else?完全取决于程序员他们使用哪种语法以及他们认为哪种语法最适合他们编写的某些代码。这可以通过许多其他方式来完成,而不是强迫遵循这种风格。

答案 1 :(得分:3)

||是逻辑OR运算符。如果左侧的表达式求值为true,则将评估右侧的表达式。在这种情况下,如果loggedin()返回FALSE为真,则将评估OR ||之后的表达式:redirect($dashboard) - 否则不会。{/ p>

这被称为“短路”评估。如果第一个表达式返回false,则永远不会计算第二个表达式。

如果登录失败,代码的意图似乎是重定向请求。

回复:你的问题 -

以下行没有任何内容,因为没有什么可以做的。 OR加入的表达式可以处理需要完成的所有事情。在你的情况下,是

的简写
if(loggedin() == FALSE) 
  redirect ($dashboard); 

有意义吗?

答案 2 :(得分:3)

如您所知,逻辑OR运算符(||)将检查其中一个布尔表达式是否为真。

假设我们有两个函数ab返回布尔值,我们想检查其中一个是否返回true:

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被称为

     

您好

如果我们检查至少有一个表达式是否为真且第一个表达式是否为true,我们不需要检查第二个表达式是否也是真的,对吧?这就是我们在这个例子的输出中没有看到function b was called的原因。

如果我们交换ab的返回值,那么a将返回falseb将返回true,将执行两个函数,因为它必须检查第二个调用是否在if语句中返回true。

您的代码中也有类似的情况。仅当第一个条件(redirect($dashboard))被评估为false时,才会执行$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);
}