我对OOP相当新,但不是PHP的新手。我正在尝试从另一个类中初始化一个类。
的index.php
<?
error_reporting(E_ALL);
require("classes/memcache.php");
require("classes/video_test.php");
$videos = new video;
?>
video_test.php
<?php
class video {
private $mcache;
public function __construct() {
$this->mcache = new MCACHE();
}
public static function get_scene($scene_id) {
$info = $this->$mcache->get_item("mykey");
}
}
?>
产地: PHP致命错误:在
中不在对象上下文中时使用$ this答案 0 :(得分:7)
不在
中的对象上下文中时使用$ this
您不能在声明为static的方法中使用$ this。只需删除static关键字并通过对象句柄使用您的方法:
$vid = new video()
$vid->get_scene();
答案 1 :(得分:1)
静态方法属于类,而不是您使用 new 创建的对象。 $ this伪变量是指对象而不是类。这就是您的代码中断的原因。您只需在函数前删除static关键字即可修复此段代码。或者你可以静态地重新定义整个事物(你可以使用 self :: 而不是$ this,声明$ mcache static并创建一个静态方法来初始化该变量)
您犯的另一个错误是: $ this-&gt; $ mcache 。要正确访问属性,请编写 $ this-&gt; mcache 。您的代码试图访问一个名为$ mcache变量的属性,该属性未在函数中定义(因此您尝试访问 $ this-&gt; null )
答案 2 :(得分:-1)
要添加,类和实例之间存在关键差异。当我们说静态方法或属性属于一个类时,它意味着该类的所有实例共享这一个属性。相反,对象实例具有其自己的一组单独属性。要掌握OOP,这种理解非常重要。