我不认为你可以做你所要求的——不可能阻止一个变量像那样被取消设置。
然而,你上面的评论让我思考。你说:
....如果您想防止在第三方扩展中取消设置系统变量
因此,如果我理解正确,您的目标是确保在使用第三方代码(即您的软件)时,与之相关的所有变量都保持不变?
现在你还没有详细说明这个系统中有哪些变量。我们在问题中看到了一个对象,但想必还有更多?我猜你有很多东西可以联系在一起,对吧?在这类问题中提供更多背景信息会有所帮助;您所要求的实际事情是不可能的,但是对您想要实现的目标有所了解,我们可以提出替代方案。
好的。所以我的建议是:将您的对象创建为单例。纯粹主义者通常不赞成这种做法,但在这种情况下可能效果很好,具体取决于您正在做什么。这里的美妙之处在于您可以将对对象的所有访问封装在类方法中,这意味着使用您的代码的开发人员无权访问对象的主副本以取消设置它。
单例的工作方式如下:
<?php
class mySingletonClass {
private static $masterObject=null;
public static function getInstance() {
if(!isset(self::$masterObject)) {
self::$masterObject = new self;
}
return self::$masterObject;
}
private function __construct() {
//your existing constructor, as it already exists, but marked as private.
}
//...and all the other methods as you already have them.
}
类构造方法是私有的,所以只能从类内的方法中访问。因此,你不能再这样做了new classname()
。获取此类对象的唯一方法是从静态getInstance()
方法中获取它。这里的关键是这个方法总是返回对象的相同副本。
$obj = mySingletonClass::getInstance();
unset($obj);
$obj = mySingletonClass::getInstance(); //will give the exact same object as the first time.
您可以根据需要取消设置,但原始对象仍然存在并且仍然可以访问。您的任何其他类都可以使用该getInstance()
方法从程序中的任何位置获取同一对象的相同副本。这是一个坚不可摧的全局变量。
单例通常用于程序的主数据库连接对象,但在这里它可能对您有用。
我希望这会有所帮助。这是我能想到的接近你想要的东西的唯一方法。