`return $ this-> foo()=== null`是什么意思?

时间:2012-09-25 16:25:21

标签: php class function return

这是一个代码示例:

class md {
public function __construct() {
    if($this->getIsGuest()){
        echo 'iam guest';
    }
}
public function getIsGuest() {
    return $this->getState('__id')===null;
}
public function getState($val) {
    return '3';
}


返回$ this-> foo()=== null是没有返回的foo的默认值?

3 个答案:

答案 0 :(得分:3)

getIsGuest()将$ this-> getState('__ id')的比较返回null。

如果$this->getState('__id')完全返回null,则getIsGuest()函数返回true。如果它返回除null之外的任何内容,则getIsGuest()函数返回false。

答案 1 :(得分:0)

===是php中的类型相等。在这种情况下,它将用于区分0,'',false或实际值null。

答案 2 :(得分:0)

这不是一个好样本,但它没有什么默认值。您可以确定的是,getIsGuest方法将总是返回布尔值(truefalse)。在您的代码段中,它始终返回false,因为它使用另一个方法(getState)的返回值并严格将其与null进行比较(值类型) 。由于getState成员函数是硬编码的,以便在您的示例中返回一个字符,因此永远不会返回null,因此,getIsGuest始终返回false。

PHP有null作为没有显式return语句的所有函数或方法的默认返回值(可能的例外情况是构造函数,它返回一个对象的实例)。就像JS默认返回undefined(构造函数除外),或者C函数可以返回void,但这是另一回事。
简而言之:不,您的代码没有设置默认返回值。我将尝试通过编辑您的代码段来澄清所有这些:

class md
{
    private $_mdData = array();//no data
    public function __construct(array $params = null)//default value of $params is null
    {//the constructor expects either no parameters, or an array
        if ($params !== null)
        {
            $this->_mdData = $params;
        }
        if($this->getIsGuest())
        {
            echo 'I\'m guest';
        }
    }

    public function getIsGuest()
    {
        return $this->getState('__id') === null;
    }

    public function getState($val)
    {//return whatever value is stored in the private array under $val-key
     //if the key doesn't exist, null is returned
        return (isset($this->_mdData[$val]) ? $this->_mdData[$val] : null);
    }
}

$guest = new md();//no params

构造函数调用getIsGuest,它试图访问$ mdData [' _id']
$ _mdData为空,因此该键不存在,并且null返回给getIsGuest。
getIsGuest将返回值(null)与null进行比较,并返回true(因为它们是相同的)
构造函数接收true,因为这是调用getIsGuest方法的位置,并评估值if ($this->getIsGuest()) - >是的,所以I'm a guest得到回应。

$nonGuest = new md(array('__id'=>123));//same drill, only this time getState will return 123, and getIsGuest returns false

现在=====之间存在差异:

$nullish = new md(array('__id' => ''));

不会回应我是来宾,除非您要将return $this->getState('__id') === null;更改为return $this->getState('__id') == null;,因为''一个空字符串是null-ish,就像0是falsy等...