可能我有点累了,但我错过了一些东西,但到目前为止,这是我用过的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
。{} p>
如果在不满足条件时将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会以这种方式运行?我错过了什么吗?。
答案 0 :(得分:3)
get_class()
函数返回当前类的名称(当从类中调用时)在该上下文中不带参数调用时(相当于null参数),从而解释了您的行为。重看。