1

我对 OOP 相当陌生,但对 PHP 并不陌生。我正在尝试从另一个类中初始化一个类。

索引.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

4

3 回答 3

7

不在对象上下文中时使用 $this

您不能在声明为静态的方法中使用 $this。只需删除 static 关键字并通过对象句柄使用您的方法:

$vid = new video()
$vid->get_scene();
于 2012-07-25T14:27:19.517 回答
1

静态方法属于类,而不是您使用new创建的对象。$this 伪变量指的是对象而不是类。这就是您的代码中断的原因。您只需删除函数前的 static 关键字即可修复这段代码。或者您可以静态地重新定义整个事物(您可以使用self::而不是 $this,声明 $mcache 静态并创建一个静态方法来初始化该变量)

您犯的另一个错误是:$this->$mcache。要正确访问属性,请编写$this->mcache。您的代码试图访问以 $mcache 变量中未在函数中定义的内容命名的属性(因此您试图访问$this->null

于 2012-07-25T14:37:33.597 回答
-1

补充一点,类和实例之间存在关键区别。当我们说一个静态方法或属性属于一个类时,这意味着该类的所有实例都共享这个属性。相反,一个对象实例有它自己的一组单独的属性。要掌握 OOP,这种理解非常重要。

于 2012-07-27T19:10:55.627 回答