我正在尝试使用变量$ this访问构造函数上的实例;在所有其他方法中,当我调用$this->event->method()
时看起来效果很好但是在这个方法上它会给我一个错误
不在对象上下文中时使用$ this
我刚刚对此问题进行了研究,我发现的答案都是关于PHP的版本,但我的版本是5.4。可能是什么问题?
这是我尝试调用实例的方法。
// all protected variable $event , $team , $app
function __construct(EventTeamInterface $event,TeamInterface $team) {
$this->event = $event;
$this->team = $team;
$this->app = app();
}
/**
* @param $infos array() |
* @return array() | ['status'] | ['msg'] | ['id']
*/
public static function createEvent($infos = array()){
$create_event = $this->event->create($infos);
if ($create_event) {
$result['status'] = "success";
$result['id'] = $create_event->id;
} else {
$result['status'] = "error";
$result['msg'] = $create_event->errors();
}
return $result;
}
答案 0 :(得分:17)
当您使用静态方法时,不能使用$this
。静态方法不知道对象状态。您只能使用self::
引用静态属性和对象。如果你想使用对象本身,你需要觉得自己不在课堂上,所以你需要创建一个实例,但是这将无法理解之前在对象中发生的事情。即如果某个方法将属性$_x
更改为某个值,则在重新生成对象时,将丢失此值。
但是,在你的情况下,你可以做
$_this = new self;
$_this->event->create($info);
您也可以将非静态方法称为静态self::method()
,但在较新版本的PHP中,您会收到错误,因此最好不要这样做。
关于它的信息,你可以在官方的php文档中找到:http://www.php.net/manual/en/language.oop5.static.php
因为静态方法可以在没有对象实例的情况下调用 创建时,伪变量$ this在方法中不可用 声明为静态
静态调用非静态方法会生成E_STRICT级别 警告。