2013-07-23 3 views
14

특히 Codeigniter에서 PHP의 상위 클래스에서 상속받을 때 parent::__construct or parent::model()은 무엇을합니까?PHP Codeigniter - parent :: __ construct

부모님이 아니라면 어떻게 달라질까요? __construct 부모 클래스? 그리고 어떤 방법을 제안합니까?

-Added-

초점은 다른 방법으로 버전에 따라이는 경우 생략 할 수있는 경우도 CodeIgniter는 자동으로 이런 짓을 했을까에 parent::__construct의 호출에 대한 된답니다 특정에 더

.

+3

'생성자'에 대해 알아보십시오. –

+0

parent :: __ construct() SubClass 생성자 [Doc] (http://php.net/manual/fr/language.oop5.decon.php) – Bora

+0

음, 나는 생성자가 무엇인지 알고 있습니다. 클래스가 시작될 때 자동으로 실행되는 마술 메서드 중 하나입니다.하지만 결과가 Codeigniter와 크게 다르지 않은 것으로 판단되면 선언하지 않으면 차이점이 있습니다. –

답변

60

정상적인 클래스 생성자입니다. 우리가 생성자를 추가 한 때문에

보시다시피
class A { 
    protected $some_var; 

    function __construct() { 
     $this->some_var = 'value added in class A'; 
    } 

    function echo_some_var() { 
     echo $this->some_var; 
    } 
} 

class B extends A { 
    function __construct() { 
     $this->some_var = 'value added in class B'; 
    } 
} 

$a = new A; 
$a->echo_some_var(); // will print out 'value added in class A' 
$b = new B; 
$b->echo_some_var(); // will print out 'value added in class B' 

, 클래스 B가 클래스 멤버 $some_var가에서뿐만 아니라 B.에서 액세스 할 수 있도록 A. 모든 가치와 기능을 상속의 다음 예를 살펴 보자

class C extends A { 
    // empty 
} 
$c = new C; 
$c->echo_some_var(); // will print out 'value added in class A' 

당신이 볼 수 있듯이, 우리가 가지고 있기 때문에 : 당신은 클래스 B의 새로운 객체를 생성 할 때 클래스 B에, 클래스 A의 생성자는

이제 다음 예를 살펴 사용되지 않습니다 생성자, c의 생성자를 선언하지 않았습니다. lass A는 암묵적으로 사용됩니다. 그러나 우리는 클래스 C에 해당 다음을 수행도 할 수 있습니다

class D extends A { 
    function __construct() { 
     parent::__construct(); 
    } 
} 
$d = new D; 
$d->echo_some_var(); // will print out 'value added in class A' 

그래서 당신은 단지 당신이 뭔가를 자식 클래스의 생성자를 할 때 라인 parent::__construct();을 사용하고, 부모 생성자를 실행해야합니다. 예 주어진 :

class E extends A { 
    private $some_other_var; 

    function __construct() { 
     // first do something important 
     $this->some_other_var = 'some other value'; 

     // then execute the parent constructor anyway 
     parent::__construct(); 
    } 
} 

자세한 내용은 여기에서 찾을 수 있습니다 : http://php.net/manual/en/language.oop5.php

+2

@webber .. 편집을 거부해서 죄송합니다. 참으로 정확했기 때문에 그것을 밀어 냈습니다. 'private' 버그를 잘 잡아 냈습니다. – arserbin3

0

부모가 :: __ 구성 또는 부모 :: 모델()의 기능은 무엇입니까?

이러한 함수는 정확히 동일하므로 PHP5 이전의 클래스 자체의 이름을 사용하는 구문 함수 만 사용합니다. 귀하의 예제에서 Model 클래스를 확장하고 있다고 가정합니다. CI_model을 사용할 필요가 없으므로 일부 이전 버전의 CI에서이 올바른 경우이 __construct는 model()과 동일합니다.