이름 공간 등을 무시하면 정적 배열에 대한 참조를 반환 할 수없는 이유를 설명 할 수 있습니까? 효과적으로 클래스는 getter와 setter입니다. 클래스를 응용 프로그램 수명주기 전체에 걸쳐 다시 인스턴스화 할 필요가 없기 때문에 정적 메서드를 사용하려고했습니다. 이 문제에 더 이상 지식을 감상 할 수있다 -PHP는 참조로 정적 변수를 반환합니다.
는 난 그냥 "나쁜 연습"이 될 수도 뭘하는지 이해합니다.
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"
);
}
}
}
내가 다시
array("notmy","array");
을 얻을 귀하는 가정 것이
$test = array("my","array");
\xtend\core\classes\registry::add("config",&$test);
$test2 =& \xtend\core\classes\registry::get("config");
$test2[0] = "notmy";
print_r($test);
처럼 것이다 사용하지만 난 그냥 원본을 다시 얻을.
당신이 :: 레지스트리를 통해 액세스가 제대로을 사용하고 ($ 키 $ 저장소) –
을 추가 할 수 있습니다위한 운동에 다음 코드를 사용할 수 있습니까? See [php.net reference] (http://php.net/manual/en/language.references.return.php) –
@AlvinWong은 내 질문을 어떻게 사용하고 있는지 업데이트했습니다. –