0

これはコードサンプルです:

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のデフォルト値ですか?

4

3 に答える 3

3

getIsGuest()$ this-> getState('__ id')の比較をnullに返します。

$this->getState('__id')が正確に返される場合nullgetIsGuest()関数はtrueを返します。正確に以外のものを返す場合nullgetIsGuest()関数はfalseを返します。

于 2012-09-25T16:27:15.047 に答える
0

これはあまり良いサンプルではありませんが、デフォルト値のようなものはありません。確かなことは、getIsGuestメソッドは常にtrueブール値(またはのいずれか)を返すということfalseです。コードスニペットでは、別のメソッド()の戻り値を使用し、厳密に(値型)getStateと比較するため、常にfalseを返します。この例では、メンバー関数はcharを返すようにハードコーディングされているため、nullを返すことはなく、したがって常にfalseを返します。nullgetStategetIsGuest

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())-> trueを評価するため、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' => ''));

空の文字列が偽物などのようにnullっぽいために変更する場合を除いて、これゲストです。return $this->getState('__id') === null;return $this->getState('__id') == null;''0

于 2012-09-25T16:56:42.557 に答える
0

===はphpの型の同等性です。この場合、0、''、false、または実際の値nullの違いを示すために使用されます。

于 2012-09-25T16:29:45.127 に答える