2010-08-12 3 views
11

최근에 PHP를 시작한 후 __construct()와 클래스와 이름이 같은 메소드가 다른지 궁금합니다.__construct() 클래스와 동일한 이름을 가진 메소드

왜 사용해야합니까? 내가 해결할 수있는 것은 푸 (Foo)라는 메소드를 오버라이드하거나 선호하는 것인가?

예.

class Foo { 

    function Foo() 
    { 
     echo 'Foo stated<br>'; 
    } 

    function __construct() { 
     echo 'Construct started<br>'; 
    } 
} 

감사

+0

PHP의 생성자에 대한 [\ _ \ _ construct() 대 SameAsClassName()의 가능한 복제본] (http://stackoverflow.com/questions/217618/construct-vs-sameasclassname-for-constructor-in-php) – nawfal

답변

3

푸()는 PHP4 방법 (사용되지 않음), __construct() PHP5 방법입니다. PHP는 먼저 __construct를 찾고, 발견되지 않으면 Foo

+0

대단히 고마워. – Joe

7

"을 사용합니다. PHP 5가 해당 클래스에 대해 __construct() 함수를 찾을 수없는 경우, 이전 스타일의 생성자 함수를 검색합니다. 효과적으로, 호환성 문제가있는 유일한 경우는 클래스에 다른 의미 체계에 사용 된 __construct()라는 메서드가있는 경우입니다. "

출처 : __construct()를 사용http://www.php.net/manual/en/language.oop5.decon.php

8

는 생성자를 호출 할 수있는 새로운 PHP5 더 OOP 집중 방법입니다. 클래스와 같은 이름을 가진 메소드를 사용하는 것은 이전에 사용하지 않으려는 방식이었으며, 이름 공간이있는 클래스에 대해서는 PHP 5.3.3에서 생성자로 작동하지 않습니다. the constructors and destructors page에서

: 이전 버전과의 호환성을 위해

, 지정된 클래스를위한 __construct() 함수를 찾을 수 PHP 5 있다면, 그것은 클래스의 이름으로 이루어진 이전 방식의 생성자 함수를 검색합니다. 사실상 호환성 문제가있는 유일한 경우는 클래스에 다른 의미에 사용되는 __construct()라는 메서드가있는 경우입니다.

다른 메서드와 달리 __construct()가 부모 __construct() 메서드와 다른 매개 변수로 재정의되면 E_STRICT 수준의 오류 메시지가 생성되지 않습니다.

PHP 5.3.3부터 이름 공간 클래스 이름의 마지막 요소와 같은 이름의 메서드는 더 이상 생성자로 처리되지 않습니다. 이 변경은 이름 공간이없는 클래스에는 영향을주지 않습니다. 자동으로 생성자로 호출되는 클래스와 이름이 같은 메서드를 가졌

0

는 것, PHP4에 후퇴, 그리고 PHP의 최신 개발 지점에서 ... 사용되지 않는 것으로 간주되어야한다 정상적인 클래스 방법으로 취급됩니다. __construct는 PHP5에서 형식적으로 허용되는 생성자입니다. 현재 릴리스에서는 __construct가없는 경우 PHP4 메소드로 다시 폴백됩니다.

3

왜 사용해야합니까?은 모두 Foo라는 메서드를 재정의하거나 을 선호합니까?

이름 변경 및 상속과 관련하여 __construct()의 이점이 더욱 명확 해집니다. 클래스의 이름을 바꾸면 생성자의 이름을 변경해야합니다.당신은 클래스 A, 당신이 돈의 이름을 바꿀 때

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

을 지금 : 그것은 어떻게하는 것이 훨씬 더 쉽고 유지 보수의

class B extends A { 
    function B() { 
     parent::A(); 
    } 
} 

: 더 큰 문제는, 클래스 B가 클래스 A에서 상속하지만 경우에 당신은 끝낼 수 없었다 모든 자녀들의 부모 전화를 변경하는 것을 기억해야합니다. 물론, 당신의 코드에서 여전히 이름 바꾸기가 있지만 적어도 이것은 그 중 하나가 아닙니다.

관련 문제