어쩌면 그 늦은 것이나 뭔가가 나를 괴롭 히고 있습니다. 기본적으로 나는 운동을위한 프레임 워크를 쓰고, 나의 oop 기술을 구르려고 노력하지만, 나는 다소 붙어 다닙니다. 나는 신의 오류를 범할 수 있다고 생각한다. 나는 단지 모른다. :)싱글 톤 인스턴스 var가 초기화시 null이 아닙니다.
그래서 전체 프로그램을 초기화하는 부트 스트랩 클래스가있다. 나는 당신이 app (또는 원하는 경우 모델)을 호출 할 수있는 컨트롤러를 생성한다. 모든 컨트롤러와 앱은 싱글 톤 패턴을 구현하는 초기화 클래스의 하위 클래스입니다. 이것은 내가 주어진 컨트롤러/애플 리케이션을 기반으로 다른 init 물건에 대한 구조 함수를 사용하고 싶습니다.
이제 컨트롤러 내에서 응용 프로그램을 초기화하려고하면 인스턴스 var가 이미 컨트롤러 객체 (null로 생각됨)로 설정됩니다. 충분히 메신저 명확하지, 여기 아주 간단하고 원시 형태의 코드입니다 :
<?php
final class Bootstrap {
public function __construct() {
$controller = Controller::init();
$controller->index();
}
}
abstract class Initialization {
private static $_instance = NULL;
final public static function init() {
$c = get_called_class();
var_dump(self::$_instance);
self::$_instance = new $c();
return self::$_instance;
}
final protected function app($app) {
$app::init();
}
}
final class Form extends Initialization { }
final class Controller extends Initialization {
final public function Index() {
$this->app('form');
}
}
$bootstrap = new Bootstrap();
?>
출력은
null
object(Controller)[2]
임 혼란 이유 인스턴스가 이미 양식 응용 프로그램에서 설정은? 나는 그것이 "자신의"정적 인스턴스 var의 상속 줄 알았는데 ??
이 youself에게 부탁을하고 싱글 제거. 당신은 거기 필요가 없습니다. [싱글 톤이 필요한 사람] (http://stackoverflow.com/questions/4595964/who-needs-singletons/4596323#4596323)을 참조하십시오. 또한 OOP를 수행하려면 솔리드 원칙을 숙지하십시오. 또한 정적 클래스를 최소한으로 줄이고 기본 클래스를 사용하여 상속을 남용하지 마십시오. 마지막 키워드도 없애고 Unit-Tests를 작성하여 위의 코드가 얼마나 발을 쏠 수 있는지 느껴보십시오. – Gordon
내 __construct()를 유지할 수 있도록 싱글 톤만 사용했습니다. 이것은 내가 보통 구현하는 패턴이 아닙니다. SOLID를 읽을 때 권장되는 리소스가 있습니까? 위키에 대한 설명을 읽었습니다. 마지막 키워드를 생략해야하는 어떤 particulary 이유? – Esben
Wikipedia 항목은 실제로 좋은 시작입니다. 내부 링크와 하단의 링크 된 리소스 중 일부는 오랫동안 계속 읽어야합니다. 단위 테스트를 수행 할 때 의존성을 조롱하지 못하도록하기 때문에 최종 키워드를 생략해야합니다. – Gordon