2017-09-04 2 views
1

부모가 자식에 의해 상속되는 클래스가 2 개 있습니다. 아래에서이 같은 몇 가지 일이있다PHP에서 상위 클래스 생성자에 인수를 전달 하시겠습니까?

class parentClass 
{ 
    private $table_name=''; 

    public function __construct($argument) 
    { 
     $this->table_name=$argument; 
     echo $this->table_name; 
    } 
} 

class child extends parentClass 
{ 
    private $table="student"; 

    public function __construct() 
    { 
     parent::__construct($this->table); 
    } 
} 

사용되어야하지만 방법과 이유를 이해 할 수없는입니다. 올바른 논리 을 달성하고 더 나은 이해를 얻을 수있는 참조를 지원하십시오 올바른 코드해야한다 무엇

$args = func_get_args(); 
call_user_func_array(array($this, 'parent::__construct'), $args); 

도움말 나.

+1

사실, 상속의 개념은 직접, 그것은 자동으로 호출되는 생성자를 호출 할 수 없습니다, 조금 다릅니다. 부모 클래스에서 $ 인수를 전달하려면 자식 클래스에 제공해야합니다. – Merv

+0

@Merv I ** ** $ table_name ** 즉, 자녀를 부모로 이동하려면 ** $ table **의 가치가 필요합니다. –

+2

@Merv 부모 클래스의 생성자는 인수가없는 경우에만 자동으로 호출 될 수 있습니다. 그러나이 경우에도 PHP 작동 방식이 아닙니다. 프로그래머는 파생 클래스의 생성자에서 부모 클래스의 생성자를 명시 적으로 호출해야합니다. – axiac

답변

0

직접적인 대답은 아니지만 코드를 올바르게 읽으면 변수/값을 생성자에 전달하고 싶지는 않습니다. 대신 테이블 이름과 같은 고정 클래스 속성을 전달하려고합니다.

그런 경우 하위 클래스에서 상수를 사용하고 상위 생성자에서 상수를 설정할 수 있습니다. 자식 클래스는 원하는 모든 작업을 수행하는 경우 별도의 생성자가 필요하지 않습니다. 그래서 something like

는 :

class parentClass 
{ 
    private $table_name; 

    function __construct() { 
     $this->table_name = static::TABLE; 
     echo $this->table_name; 
    } 
} 

class childClass extends parentClass 
{ 
    const TABLE = "student"; 
} 

$obj = new childClass(); 
+2

감사합니다. 실제로 질문이 있습니다. 배열의 경우이 작업을 수행해야합니다. (내 생각) 정의 ((배열 ("사과"직렬화 "과일을", "체리", "바나나")));? 은 $ my_fruits = 때 unserialize (과일) –

+1

@AbhijitSrivastava 아니오, 상수가 될 수 있습니다 배열의 경우 serialize 및 unserialize 할 필요가 없습니다. – jeroen

+0

이 클래스 상수 일 필요는 없습니다.일반 오래된 속성은 잘 할 것입니다. – salathe

관련 문제