私はあなたがあなたが求めていることをすることができるとは思いません-そのように変数が設定解除されるのを防ぐことはできません。
しかし、上記のあなたのコメントは私に考えさせました。あなたが言った:
....サードパーティの拡張機能でシステム変数が設定されないようにしたい場合のアイデア
それで、私があなたを正しく理解しているなら、ここでのあなたの目的は、サードパーティのコード(つまりあなたのソフトウェア)が使用されている間、それに関連するすべての変数がそのまま残ることを保証することですか?
これで、このシステムにどの変数があるかについてはあまり指定していません。質問に1つのオブジェクトがありますが、おそらくそれ以上あるはずですか?たくさんのことを結びつけていると思いますよね?この種の質問では、もう少しコンテキストを提供するのに役立ちます。あなたが求めている実際のことは不可能ですが、あなたが何を達成したいのかについて少し理解すれば、私たちは代替案を考え出すことができます。
わかった。だから私の提案:あなたのオブジェクトをシングルトンとして作成してください。これは純粋主義者にしばしば眉をひそめられますが、あなたがしていることによっては、この状況ではうまくいくかもしれません。ここでの利点は、オブジェクトへのすべてのアクセスをクラスメソッド内にカプセル化できることです。つまり、コードを使用する開発者は、オブジェクトの設定を解除するためにオブジェクトのマスターコピーにアクセスできません。
シングルトンは次のように機能します。
<?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()
メソッドを使用して、プログラムのどこからでも同じオブジェクトの同じコピーを取得できます。これは破壊不可能なグローバル変数です。
シングルトンは、プログラムのメインデータベース接続オブジェクトによく使用されますが、ここでは便利なパターンになる可能性があります。
それがお役に立てば幸いです。それは私があなたが望むものに近づくために考えることができる唯一の方法についてです。