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

Php 如何将对象公开给类中的所有函数?,php,class,Php,Class,我创建了一个类,该类调用_构造中的一个对象。如何使该对象在整个类中都可用 class SocialMedia { function __construct() { $object = "whatever"; } } 如何访问类中其他静态函数中的$object。 我尝试使用$this->object,但当我尝试从其他静态函数调用它时,如果不在对象上下文中,则会出现错误$this。使用 self::$object = 'whatever' 取而代之的是阅读 另一方面,您可能会忘记刚才学到的内容,

我创建了一个类,该类调用_构造中的一个对象。如何使该对象在整个类中都可用

class SocialMedia { function __construct() { $object = "whatever"; } }
如何访问类中其他静态函数中的$object。 我尝试使用$this->object,但当我尝试从其他静态函数调用它时,如果不在对象上下文中,则会出现错误$this。

使用

self::$object = 'whatever'
取而代之的是阅读

另一方面,您可能会忘记刚才学到的内容,转而使用实例变量。

使用

self::$object = 'whatever'
取而代之的是阅读


另一方面,您可能会忘记刚才学到的内容,而改用实例变量。

尝试在类的作用域内,函数的正上方定义对象。例如:

class SocialMedia { public $object; function __construct() { $object = "whatever"; } }
或者您可以尝试将其定义为public static,而不仅仅是public。例如,这:

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

尝试在类的作用域内,函数的正上方定义对象。例如:

class SocialMedia { public $object; function __construct() { $object = "whatever"; } }
或者您可以尝试将其定义为public static,而不仅仅是public。例如,这:

class SocialMedia { public static $object; function __construct() { $object = "whatever"; } }
如果$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是静态的,那么您可以使用scope resolution操作符访问它,正如其他人所提到的:

public static $object;

public static function someMethod($args)
{
   $object = self::$object;
   // do stuff with $object and $args
}
但是你还有另一个问题。。。如果尚未创建任何SocialMedia实例,因此尚未设置SocialMedia::$object,会发生什么情况?

如果$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是静态的,那么您可以使用scope resolution操作符访问它,正如其他人所提到的:

public static $object;

public static function someMethod($args)
{
   $object = self::$object;
   // do stuff with $object and $args
}
但是你还有另一个问题。。。如果尚未创建SocialMedia实例,因此尚未设置SocialMedia::$object,会发生什么情况?

将其设置为静态:

class SocialMedia {

    protected static $object;

    function __construct() {
        self::$object = "whatever";
    }
}
将其设置为静态:

class SocialMedia {

    protected static $object;

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

您可以将您的类设置为单例,但如果您想要可测试性和/或依赖注入,那么这并不是更好的解决方案。不管你怎么建议,你都在寻找一个全局变量,迟早你会发现它们带来的所有麻烦。

你可以把你的类变成一个单例,但如果你想要可测试性和/或依赖注入,那真的不是更好的解决方案。不管你怎么说,你都在寻找一个全局变量,迟早你会发现它们带来的所有麻烦。

我也尝试过将$object公开,但仍然无法访问该对象。我也尝试过将$object公开,但仍然无法访问该对象。感谢链接,这本书读得不错。我以“随便什么”为例。实际上,我正在初始化一个class/lib facebook的sdk,该sdk在脚本运行中只能实例化一次。@然后在引导文件中进行实例化,并将实例传递给需要它的任何对象。这就是所谓的依赖注入,从长远来看,它将使您的应用程序更易于维护。谢谢,我将把这一点传递给我们的首席开发人员。看看他是否对我应该如何处理这一点有任何想法。感谢链接,这本书读得很好。我以“随便什么”为例。实际上,我正在初始化一个class/lib facebook的sdk,该sdk在脚本运行中只能实例化一次。@然后在引导文件中进行实例化,并将实例传递给需要它的任何对象。这就是所谓的依赖注入,从长远来看,它将使您的应用程序更易于维护。谢谢,我将把这一点传递给我们的首席开发人员。看看他对我应该如何以不同方式处理这一问题有何想法。