如何使对象公开给类中的所有函数?

时间:2011-01-12 16:50:52

标签: php class

我创建了一个在“__construct”中调用对象的类,如何在整个课程中使这个对象可用。

class SocialMedia { function __construct() { $object = "whatever"; } }

如何从类中的其他函数(它们是静态的)中访问$ object。 我曾尝试使用“$ this-> object”但当我尝试从其他静态函数调用它时,我收到错误“$ this when when not object context”。

5 个答案:

答案 0 :(得分:5)

使用

self::$object = 'whatever'

而是阅读PHP Manual on the static keyword

在旁注statics are death to testability上,您可能会忘记刚学到的内容并改为使用实例变量。

答案 1 :(得分:2)

尝试在类的范围内定义您的对象,就在函数的正上方。所以,作为一个例子:

class SocialMedia { public $object; function __construct() { $object = "whatever"; } }

或者您可以尝试将其定义为“公共静态”而不仅仅是“公共”。例如,这个:

class SocialMedia { public static $object; function __construct() { $object = "whatever"; } }

答案 2 :(得分:2)

让它静止:

class SocialMedia {

    protected static $object;

    function __construct() {
        self::$object = "whatever";
    }
}

答案 3 :(得分:1)

如果$object不是静态的,那么您就遇到了问题。您需要能够引用该类的特定实例。你需要将SocialMedia的实际实例传递给它的静态方法,或者想出一些其他的恶作剧:

public static function someMethod(SocialMedia $instance, $args)
{
   // do stuff with $instance->object and $args
}

public function methodThatUsesStaticMethod($args)
{
   self::someMethod($this, $args);
}

如果$object是静态的,那么您可以使用范围解析运算符来访问它,正如其他人提到的那样:

public static $object;

public static function someMethod($args)
{
   $object = self::$object;
   // do stuff with $object and $args
}

但是你还有另一个问题......如果还没有创建SocialMedia的实例,那么会发生什么?{/ 1}}尚未设置?

答案 4 :(得分:0)

您可以使您的类成为单例(OOP Patterns in PHP Manual)但如果您想要可测试性和/或依赖注入,那么这确实不是更好的解决方案。无论你如何制作它,你都会追随一个全局变量,迟早你会发现它们带来的所有麻烦。