>  기사  >  백엔드 개발  >  PHP 생성자의 이해

PHP 생성자의 이해

巴扎黑
巴扎黑원래의
2016-11-23 11:35:471066검색

프로젝트 작업 중 오류가 발생했습니다. 최종 분석에서 문제를 일으킨 것은 PHP의 생성 방법입니다.
PHP5부터는 클래스에서 __construct 생성 방법을 선언할 수 있습니다. . 개체가 인스턴스화되면 이 메서드가 호출됩니다.
참고:
1. 상속된 하위 클래스에 생성자 메서드가 없지만 상위 클래스에 생성자 메서드가 있는 경우 하위 클래스가 인스턴스화되면 상위 클래스의 생성자 메서드가 암시적으로 호출됩니다.
2. 하위 클래스에 생성자가 있고 상위 클래스에도 생성자가 있는 경우 하위 클래스는 명시적으로 parent::__construct()를 호출하여 상위 클래스의 생성자에 액세스해야 합니다.

이전 버전과의 호환성을 위해 php5 클래스에 __construct() 메소드가 없으면 클래스 이름과 동일한 메소드 이름을 가진 생성자를 찾지만 두 생성자가 동시에 사용되는 경우 , E_STRICT 수준 오류 메시지가 발생할 수 있습니다.
(다음 코드는 내 웹 환경입니다: win32+php5.3.8+apache2.2 테스트)

<?php
class B{
//构造器
public function B(){
echo &#39;this is B()&#39;;
}
public function __construct(){
echo &#39;this is __construct()&#39;;
}
public function other(){
//do something
}
}
$b = new B();
?>

결과: 엄격한 표준: 재정의 8행의 D:xampphtdocstest3Class.php에 클래스 B에 대한 생성자가 이미 정의되어 있습니다.
이것은 __construct()입니다.

그러나 메소드의 위치를 ​​변경하면 다른 결과가 발생합니다.

<?php
class X{
//构造器
public function __construct(){
echo &#39;this is __construct()&#39;;
}
public function X(){
echo &#39;this is X()&#39;;
}
public function other(){
//do something
}
}
$x = new X();
?>

사실 php5.3부터는 클래스와 같은 이름의 메소드가 더 이상 클래스의 생성자로 사용되지 않으며, php5.3.3을 사용하는 경우에도 마찬가지입니다. 이상에서는 클래스와 이름이 같은 메소드를 생성자로 사용할 수 없습니다.

<?php
namespace Foo;
class Bar {
    public function Bar() {
        // PHP 5.3.0-5.3.2 是构造方法
        // PHP 5.3.3 被当做是正常的方法使用
    }
}
?>

php5.3.3 이상에서 두 개의 생성자를 동시에 사용해야 하는 경우 이렇게 하면 됩니다. :

<?php
class Y{
//构造器
public function __construct(){
self::Y();
}
public function Y(){
echo &#39;this is __construct() called Y()&#39;;
// do init
}
public function other(){
//do something
}
}
$y = new Y();
?>


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.