PHP 상속에 문제가 있습니다.PHP 싱글 톤 및 상속
나는이 기본 클래스를 가지고, 싱글 :
namespace My_Namespace;
abstract class Singleton {
protected static $instance = null;
static function get() {
if (null == static::$instance) {
static::$instance = new static;
}
return static::$instance;
}
private function __construct() {
}
}
내가, B, C, D 그들을를 호출하는 싱글 톤 클래스를 상속 클래스의 무리가 여기 거래입니다. 그 중 하나는 다음과 같다 : 이제
namespace My_Namespace;
class A extends Singleton {
protected function __construct() {
B::get();
if (some_condition()) {
C::get();
}
else {
D::get();
}
}
}
, 난 그냥 모든 압연 얻을 수있는 A::get()
을한다. A의 생성자가 예상대로 호출됩니다. 그러면 B의 생성자가 문제없이 다시 호출됩니다. 이제 이상해진다. C::get()
을 호출하면 static::$instance
을 이미 B 클래스의 객체로 인식하고 C를 인스턴스화하지 않습니다. 나는 B3의 __construct
이 C::get
또는 D::get
으로 전화를 걸지 만 내 목적에는 적합하지 않다는 것을 데이지 체인 방식으로 알고 있는지 알고 있습니다. 그것은 그것들이 같은 범위에 있다는 이유로 야기 된 것입니까? 그렇다면 주위에 어떤 방법이 있습니까? 나는 실용적인 목적보다는 호기심을 더 많이 요구하고있다. 나는 그들 각각의 싱글 톤 패턴을 쉽게 구현할 수 있다는 것을 안다. 그래서, 어떤 아이디어? 감사!
P. 제발 '독신은 악하고 당신은 지옥에 타야합니다'라고 말하십시오. 나는 그것을 완벽하게 잘 압니다.
+1 '지옥 주석에 불타오다' – phpisuber01
상속 된 클래스에 인스턴스를 넣을 정적 속성이 필요하다고 생각합니다. 따라서 하위 클래스에'protected static $ instance = null; '을 추가하십시오. . – Orangepill
@Orangepill 당신이 가지고있어. 그 라인을 추가하면 모든 것이 예상대로 작동합니다. '하지만 그것은 전체 싱글 톤 (Singleton) 클래스와 상속 (unheritance) 클래스를 쓸모 없게 만든다. 그 아이디어는 그 클래스에 싱글 톤 기능을 넣는 것이었다. 그게 가능합니까? –