函数返回的PHP null值被解释为$ this

时间:2015-11-24 15:50:42

标签: php

可能我有点累了,但我错过了一些东西,但到目前为止,这是我用过的PHP最奇怪的问题,我会尽力以最好的方式解释它。

在课程Compiler\Bids中,我有一个compileData函数:

namespace Compiler;

class Bids extends CompilerItem
{
    protected $service;

    public function compileData()
    {
        foreach($bids as $bid)
        {
            $buyerGroup = $this->service->serviceProperty->whereEqual('id', 'idgoeshere');
            if($buyerGroup || $buyerGroup === null)
            {
                echo 'BuyerGroup class: '.get_class($buyerGroup).'<br>';
            }
        }
    }
}

正如您在上一课中所看到的,在compileData函数中,我正在调用whereEqual函数,该函数在BuyerGroup类扩展的抽象类上设置。

这是由whereEqual扩展的父抽象类上设置的BuyerGroup函数:

public function whereEqual($field, $value)
{
    foreach($this->{$this->className()} as $model)
    {
         // I'm skipping some logic here but basically the model
         // matching the conditions is returned...
         return Model;
    }

    // ... otherwise the conditions are not met and null is returned instead.
    return null;
}

以下是正在发生的事情:代码运行并执行echo函数中的compileData语句,生成以下输出:

BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: Compiler\Bids
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: Compiler\Bids
BuyerGroup class: BuyerGroup
BuyerGroup class: Compiler\Bids

如您所见,在whereEqual函数null中未满足条件时,会返回$this函数中的compileData

如果在不满足条件时将whereEqual函数修改为return;,则输出如下:

BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup
BuyerGroup class: BuyerGroup

哪个是正确的。

为什么PHP会以这种方式运行?我错过了什么吗?。

1 个答案:

答案 0 :(得分:3)

get_class()函数返回当前类的名称(当从类中调用时)在该上下文中不带参数调用时(相当于null参数),从而解释了您的行为。重看。

http://php.net/manual/en/function.get-class.php