名前空間などを無視すると、静的配列への参照を返すことができない理由を誰かが説明できますか?事実上、クラスはゲッターとセッターです。アプリケーションのライフサイクル全体でクラスを再度インスタンス化する必要がないため、静的メソッドを使用したかったのです。
私がしていることは単に「悪い習慣」であるかもしれないことを理解しています-この問題についてのこれ以上の知識をいただければ幸いです。
namespace xtend\core\classes;
use xtend\core\classes\exceptions;
class registry {
private static $global_registry = array();
private function __construct() {}
public static function add($key, $store) {
if (!isset(self::$global_registry[$key])) {
self::$global_registry[$key] = $store;
} else {
throw new exceptions\invalidParameterException(
"Failed to add the registry. The key $key already exists."
);
}
}
public static function remove($key) {
if (isset(self::$global_registry[$key])) {
unset(self::$global_registry[$key]);
} else {
throw new exceptions\invalidParameterException(
"Cannot remove key $key does not exist in the registry"
);
}
}
public static function &get($key) {
if (isset(self::$global_registry[$key])) {
$ref =& self::$global_registry[$key];
return $ref;
} else {
throw new exceptions\invalidParameterException(
"Cannot get key $key does not exist in the registry"
);
}
}
}
このように使う
$test = array("my","array");
\xtend\core\classes\registry::add("config",&$test);
$test2 =& \xtend\core\classes\registry::get("config");
$test2[0] = "notmy";
print_r($test);
あなたは私が戻ってくると思います
array("notmy","array");
しかし、私は元の状態に戻るだけです。