PHP에는 생성자가 있으며 구문 설명은 "__construct(mixed...$values = ""): void"입니다. 생성자가 있는 클래스는 새 객체가 생성될 때마다 이 메서드를 먼저 호출합니다. 이므로 매우 적합합니다. 객체를 사용하기 전에 몇 가지 초기화 작업을 수행하십시오.
이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터
PHP에 생성자가 있나요?
php 생성자
__construct(mixed ...$values = ""): void
PHP를 사용하면 개발자는 클래스의 생성자로 메서드를 정의할 수 있습니다. 생성자가 있는 클래스는 새 객체가 생성될 때마다 이 메서드를 호출하므로 객체를 사용하기 전에 일부 초기화 작업을 수행하는 데 매우 적합합니다.
참고: 생성자가 하위 클래스에 정의된 경우 해당 상위 클래스의 생성자는 암시적으로 호출되지 않습니다. 상위 클래스의 생성자를 실행하려면 하위 클래스의 생성자에서 parent::__construct()를 호출해야 합니다. 하위 클래스가 생성자를 정의하지 않으면 일반 클래스 메서드와 마찬가지로 상위 클래스에서 상속됩니다(private으로 정의되지 않은 경우).
예제 #1 상속의 생성자
<?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } class OtherSubClass extends BaseClass { // 继承 BaseClass 的构造函数 } // In BaseClass constructor $obj = new BaseClass(); // In BaseClass constructor // In SubClass constructor $obj = new SubClass(); // In BaseClass constructor $obj = new OtherSubClass(); ?>
다른 메서드와 달리 __construct()는 상속 시 서명 호환성 규칙을 따르지 않습니다.
PHP 5.3.3부터 네임스페이스에서 클래스 이름과 동일한 이름을 가진 메서드는 더 이상 생성자로 사용되지 않습니다. 네임스페이스에 없는 클래스는 영향을 받지 않습니다. 생성자는 해당 객체가 인스턴스화될 때 자동으로 호출되는 일반적인 메서드입니다. 따라서 필수이거나 유형이 있거나 기본값을 가질 수 있는 매개변수를 원하는 수만큼 정의할 수 있습니다. 생성자의 매개변수는 클래스 이름 뒤에 괄호 안에 표시됩니다.
예제 #2 생성자 매개변수 사용
<?php class Point { protected int $x; protected int $y; public function __construct(int $x, int $y = 0) { $this->x = $x; $this->y = $y; } } // 两个参数都传入 $p1 = new Point(4, 5); // 仅传入必填的参数。 $y 会默认取值 0。 $p2 = new Point(4); // 使用命名参数(PHP 8.0 起): $p3 = new Point(y: 5, x: 4); ?>
클래스에 생성자가 없고 생성자의 매개변수가 필요하지 않은 경우 괄호를 생략할 수 있습니다.
이전 스타일 생성자
PHP 8.0.0 이전에는 전역 네임스페이스의 클래스에 동일한 이름의 메서드가 있으면 이전 스타일 생성자로 해석되었습니다. 함수를 생성자로 사용할 수 있지만 이 구문은 더 이상 사용되지 않으며 E_DEPRECATED 오류가 발생합니다. __construct()와 동일한 이름의 메서드가 동시에 존재하면 __construct()가 호출됩니다.
클래스와 이름이 같은 메서드는 네임스페이스의 클래스와 PHP 8.0.0 이후의 모든 클래스라는 두 가지 경우에서 더 이상 특별한 의미를 갖지 않습니다.
새 코드에서는 __construct()를 사용하세요.
생성자 속성 개선
PHP 8.0.0부터 생성자의 매개변수도 이에 따라 클래스 속성으로 업그레이드될 수 있습니다. 클래스 속성에 생성자 매개변수를 할당하는 것이 일반적입니다. 그렇지 않으면 작동할 수 없습니다. 생성자 승격 기능은 이 시나리오에 편의를 제공합니다. 따라서 위의 예는 다음과 같이 다시 작성할 수 있습니다.
예제 #3 생성자 속성 승격 사용
<?php class Point { public function __construct(protected int $x, protected int $y = 0) { } }
생성자 매개변수에 액세스 제어(가시성 수정자)가 있는 경우 PHP는 이를 객체 속성 및 생성자로 처리합니다. 동시에 매개변수를 지정하고 속성에 값을 할당합니다. 생성자는 비어 있거나 다른 문을 포함할 수 있습니다. 매개변수 값이 해당 속성에 할당된 후 텍스트의 추가 코드 문이 실행됩니다.
모든 매개변수를 개선할 필요는 없습니다. 승격된 매개변수와 승격되지 않은 매개변수를 속성으로 혼합할 수 있으며 순서대로일 필요는 없습니다. 제기된 매개변수는 생성자 내의 코드 호출에 영향을 주지 않습니다.
참고:
엔진에 대한 혼동을 피하기 위해 객체 속성 유형을 호출할 수 없습니다. 따라서 승격된 매개변수도 호출할 수 없습니다. 다른 유형 선언이 허용됩니다.
참고:
생성자의 부스트 매개변수에 배치된 속성은 속성과 매개변수로 동시에 복사됩니다.
정적 생성 방법
PHP에서는 각 클래스마다 생성자가 하나만 있을 수 있습니다. 그러나 다양한 입력을 사용하여 객체를 다양한 방식으로 구성해야 하는 상황이 있습니다. 이 경우 정적 메서드 래핑 구성을 사용하는 것이 좋습니다.
예제 #4 정적을 사용하여 메서드 만들기
<?php class Product { private ?int $id; private ?string $name; private function __construct(?int $id = null, ?string $name = null) { $this->id = $id; $this->name = $name; } public static function fromBasicData(int $id, string $name): static { $new = new static($id, $name); return $new; } public static function fromJson(string $json): static { $data = json_decode($json); return new static($data['id'], $data['name']); } public static function fromXml(string $xml): static { // 自定义代码逻辑。 $data = convert_xml_to_array($xml); $new = new static(); $new->id = $data['id']; $new->name = $data['name']; return $new; } } $p1 = Product::fromBasicData(5, 'Widget'); $p2 = Product::fromJson($some_json_string); $p3 = Product::fromXml($some_xml_string);
생성자를 비공개 또는 보호로 설정하여 직접 추가 호출을 방지할 수 있습니다. 현재로서는 정적 메서드만 클래스를 인스턴스화할 수 있습니다. 동일한 정의된 클래스에 있기 때문에 전용 메서드에 액세스할 수 있으며 동일한 객체 인스턴스에 있을 필요가 없습니다. 물론 생성자를 반드시 private으로 설정할 필요는 없습니다. 합리적인지 여부는 실제 상황에 따라 다릅니다.
세 가지 정적 메서드는 객체를 다양한 방식으로 인스턴스화하는 방법을 보여줍니다.
fromBasicData()는 모든 필수 매개변수를 생성자에 전달하고 객체를 생성한 후 결과를 반환합니다.
fromJson()은 JSON 문자열을 받아 생성자가 요구하는 형식으로 전처리한 후 새 객체를 반환합니다.
fromXml()은 XML 문자열을 받아 구문 분석하고 간단한 객체를 생성합니다. 매개변수는 선택사항이므로 모든 매개변수를 무시하고 생성자를 호출할 수 있습니다. 그런 다음 객체의 속성에 값을 할당하고 결과를 반환합니다.
위의 세 가지 예에서 static 키워드는 코드가 위치한 클래스의 클래스 이름으로 변환됩니다. 이 경우에는 제품입니다.
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP에 생성자가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!