2012-05-11 4 views
0

나는 어떤 행동을 취하기 위해 자식 클래스의 이름을 부모 클래스에 다시 전달해야하는 상황이있다.parent :: __ construct();를 사용하는 하위 클래스를 결정합니다.

나는이 순간에 설정 한 방법은 다음과 같습니다

class SomeParentClass { 

    public function __construct($c = false){ 
     ... 
    } 

} 

class SomeChildClass extends SomeParentClass { 

    public function __construct(){ 
     parent::__construct(__CLASS__){ 
      ... 
     } 
    } 

} 

이 부모에게 다시 자식 클래스의 이름을 전달하지만, 자식 클래스는 변수 $c을이 작업을 수행하지 않는 경우 부울 값 false을 유지합니다.

이 방법이 효과적이지만 이것이 가장 깨끗한 방법입니까? 어떤 하위 클래스가 변수로 전달하지 않고 parent::__construct()을 호출했는지 자동 검색하는 방법이 있습니까?

많은 감사

당신은 PHP에서 get_called_class() ( http://php.net/manual/en/function.get-called-class.php)이 작업을 수행 할 수 있습니다
+1

'get_called_class()'함수가 있습니다. – Leri

답변

2
<?php 
class SomeParentClass { 

    public function __construct($c = false){  
     echo get_called_class(); 
    } 

} 

class SomeChildClass extends SomeParentClass { 

    public function __construct(){ 
     parent::__construct(__CLASS__);  
    } 

} 

class OtherChildClass extends SomeParentClass { 
    public function __construct(){ 
     parent::__construct(__CLASS__); 
    } 

} 

$a = new SomeChildClass(); 
$b = new OtherChildClass(); 
+0

아 너무 실제로 그것을 코드하려고하여 두들겨 : – gunnx

+0

고마워 : +1 노력을 만들기위한 –

1

내가 잘못 할 수도 있지만 정상적인 상황 아래에서 부모는 자녀 클래스를 인식하면 안됩니다. 네가하려는 일을하는 더 좋은 방법이있을거야.

이 "규칙"의 예외는 아마도 고정 된 (선택적으로 최종적인) 생성자를 노출하는 기본 클래스입니다.이 기본 클래스는 자식 클래스가 접두사로 붙어서 호출됩니다.

class Parent 
{ 
    public final static function create() 
    { 
     return new static; 
    } 
} 

class Child extends Parent 
{ 
    public function __construct() 
    { 
     // special code here 
    } 
} 

var_dump(Child::create()); 
관련 문제