不允许使用PHP语法

不允许使用PHP语法,php,Php,我想知道为什么下面的语法不能用于PHP。任何有洞察力的人也许都没有任何意义 ($this->getState($state))->getEvent('eventOpen')->attach($observeCallback); 基本上,getState($state)方法返回一个对象,该对象本身既有getEvent($eventName)又有attach($observerCallbackToAttach) 但是,这会抛出一个错误,不起作用 我是否违反了认为这是有效语法的规则

我想知道为什么下面的语法不能用于PHP。任何有洞察力的人也许都没有任何意义

($this->getState($state))->getEvent('eventOpen')->attach($observeCallback);
基本上,
getState($state)
方法返回一个对象,该对象本身既有
getEvent($eventName)
又有
attach($observerCallbackToAttach)

但是,这会抛出一个错误,不起作用


我是否违反了认为这是有效语法的规则?

如果
getState
方法返回一个对象,该对象有两个方法
getEvent
attach
,那么要实现这一点,必须使用
getEvent
/
attach
返回相同的对象。当您执行
getEvent()->attach()
操作时,您使用的是
getEvent
的返回值,而不是
getState

请注意
->attach($observeCallback)
->getEvent('eventOpen')
的结果上运行,而不是
$this->getState($state)
的结果

检查
getEvent()
方法返回的内容。要使其工作,需要
返回$this

否则,请澄清您的代码:

$tmp = $this->getState($state);
$tmp->getEvent('eventOpen');
$tmp->attach($observeCallback);

或者,将
attach()
方法移动到由
getEvent()

返回的对象中使用的类中。要使此操作起作用,您需要在方法中返回
$this

class Something
{
    function setState($state)
    {
        if ($state != '') {
            $this->state = $state;
        }
        return $this;
    }

    function setUberState($uberState)
    {
        if ($uberState != '') {
            $this->uberState = $uberState;
        }
        return $this;
    }
}
使用上述课程,您应该能够:

$something = new Something();
$object = $something->setState('state')->setUberState('uberstate');

“我是否违反了认为这是有效语法的规则?”很明显,如果php抛出错误,那么您就是。
getEvent()
method是否返回对象?
返回一个对象,该对象**本身**既有getEvent($eventName)又有attach($observer callbacktoattach)
在较新版本的PHP中,我相信它是有效的。有趣的是,有多少次人们声称“这会抛出一个错误”,但对哪一个却讳莫如深。:-)这就是我最后做的。我只是想知道这在我看来是可以接受的。然而,我也意识到,我的命令行并不是使用PHP7,而是使用我可以轻松切换到该版本的web。除非我要在环境变量中更改PHP可执行文件,以查看PHP7的反应。