3.5. 객체 인스턴스화 방법 위에서 언급했듯이 PHP 객체지향 프로그램의 단위는 객체이지만 객체는 클래스를 통해 인스턴스화됩니다. 우리의 클래스가 선언될 것이므로 다음 단계는 객체를 인스턴스화하는 것입니다. 클래스를 정의한 후 new 키워드를 사용하여 객체를 생성합니다. $객체 이름 = 새 클래스 이름(); 개체->속성 $p1->name; $p3->***; 객체->메서드 $p1->say(); $p2->run(); 5.7. 특수 참조 "$this" 사용 이제 개체 외부에서 개체의 멤버에 액세스하는 "Object->Member"를 통해 액세스하는 방법을 알았습니다. 그러면 객체에 있는 메서드가 객체 내부에 있는 이 객체의 속성에 액세스하도록 하거나 객체에 있는 메서드가 이 객체의 다른 메서드를 호출하도록 하려면 어떻게 해야 합니까? 객체의 내부 구성원 간의 호출을 포함하여 객체의 모든 구성원은 객체를 사용하여 호출되어야 하기 때문에 PHP는 이 객체에 대한 참조인 $this를 제공하고 각 객체에는 이 객체를 나타내는 $this가 있습니다. this의 원래 의미는 "this"입니다. 위의 예에서는 $P1, $P2 및 $P3라는 세 개의 인스턴스 개체를 인스턴스화합니다. $p1, $p2, $p3.
8. 파기방법 및 방법 대부분의 클래스에는 생성자라는 특수 메서드가 있습니다. 객체가 생성되면 자동으로 생성자를 호출합니다. 즉, new 키워드를 사용하여 객체를 인스턴스화하면 생성자가 자동으로 호출됩니다. 생성자의 선언은 이름이 __construct()여야 한다는 점을 제외하면 다른 작업의 선언과 동일합니다. 이는 PHP5의 변경 사항입니다. 이전 버전에서는 생성자의 이름이 클래스 이름과 동일해야 합니다. 이는 PHP5에서도 계속 사용할 수 있지만 현재는 생성자를 사용할 수 있다는 장점이 있습니다. 클래스 이름과 관계없이 클래스 이름이 변경될 때 해당 생성자 이름을 변경할 필요가 없습니다. 이전 버전과의 호환성을 위해 클래스에 __construct()라는 메서드가 없으면 PHP는 클래스 이름과 동일한 이름을 가진 php4로 작성된 생성자 메서드를 검색합니다. 형식: function __construct ([매개변수]) { ... ... } 클래스에서는 하나의 생성자만 선언할 수 있지만 생성자는 객체가 생성될 때마다 한 번만 호출됩니다. 이 메서드는 적극적으로 호출할 수 없으므로 일반적으로 몇 가지 유용한 초기화 작업을 수행하는 데 사용됩니다. 예를 들어 해당 속성에는 객체 생성 시 초기값이 할당됩니다.
생성자의 반대말은 소멸자입니다. 소멸자는 PHP5에 새로 추가된 내용입니다. PHP4에는 소멸자가 없습니다. 소멸자를 사용하면 클래스를 삭제하기 전에 파일 닫기, 결과 집합 해제 등과 같은 일부 작업을 수행하거나 일부 기능을 완료할 수 있습니다. 소멸자는 개체에 대한 모든 참조가 삭제되거나 개체가 명시적으로 삭제되면 삭제됩니다. 즉, 객체가 메모리에서 소멸되기 전에 소멸자가 호출됩니다. 생성자 이름과 마찬가지로 클래스 소멸자 이름은 __destruct()여야 합니다. 소멸자는 매개변수를 사용할 수 없습니다. 형식: function __destruct ( ) { ... ... }
클래스 외부에 인터페이스를 제공하는 경우 클래스 외부의 비공개 속성에 대한 설정 메서드 및 가져오기 메서드를 제공하여 비공개 속성을 조작할 수 있습니다. 예: prvate $age //Private attribute age;
위 방법은 구성원 속성에 대한 값을 설정하고 가져오는 것입니다. 물론 동일한 방법을 사용하여 각 속성에 대한 값을 할당하고 가져와 외부에서 액세스 작업을 완료할 수도 있습니다. 수업. JAVABEAN도 마찬가지입니다! ! ! 10. __set() __get() __isset() __unset() 네 가지 메서드 적용 일반적으로 클래스 속성은 항상 비공개로 정의되며 이는 현실적인 논리에 더 부합합니다. 그러나 속성을 읽고 할당하는 작업은 매우 빈번하므로 PHP5에서는 속성을 가져오고 할당하기 위해 "__get()" 및 "__set()" 두 함수가 미리 정의되어 있고 속성을 확인하기 위해 "__isset"()"이 있습니다. 속성 "__unset()"을 삭제하는 방법입니다. 이전 섹션에서는 각 속성에 대한 메서드를 설정하고 획득했습니다. PHP5는 "__set()" 및 "__get()" 메서드에 대한 값을 설정하고 획득하기 위한 특수 메서드를 제공합니다. 기본적으로 클래스에 수동으로 추가됩니다. 생성자 메서드(__construct())와 마찬가지로 이 두 메서드는 클래스에 추가되는 경우에만 존재합니다. 물론 다음과 같은 방법으로 메서드를 추가할 수도 있습니다. 개인 스타일에 따라 추가할 수도 있습니다.
__get() 메소드: 프라이빗 멤버 속성의 값을 가져오는 데 사용되는 메소드입니다. 매개변수는 가져오려는 멤버 속성의 이름으로 전달되며, 가져온 속성 값이 반환됩니다. . 이 메서드를 수동으로 호출할 필요가 없습니다. 왜냐하면 이 메서드를 개인 속성을 직접 얻을 때 개체가 자동으로 호출하는 개인 메서드로 만들 수도 있기 때문입니다. 프라이빗 속성이 캡슐화되어 있기 때문에 값을 직접 얻을 수는 없지만(예: "echo $p1->name"은 직접 가져오는 것이 잘못됨) 클래스에 이 메서드를 추가하는 경우에는 "echo $p1->를 사용합니다. name". $p1->name" 이러한 문이 값을 직접 얻으면 자동으로 __get($property_name) 메서드를 호출하여 속성 이름을 $property_name 매개 변수에 전달하고 이 메서드의 내부 실행을 통해 우리가 전달한 사유 재산의 값이 반환됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다. __set() 메소드: 프라이빗 멤버 속성에 대한 값을 설정하는 데 사용됩니다. 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 값을 설정하려는 속성의 이름입니다. 속성에 대해 설정되었습니다. 반환 값이 없습니다. 이 메소드는 수동으로 호출할 필요도 없으며, private 속성 값을 직접 설정할 때 자동으로 호출됩니다. __set() 메소드가 없으면 Not입니다. 예를 들어 $this->name='zhangsan'이면 오류가 발생하지만, 프라이빗 속성에 직접 값을 할당할 때 클래스에 __set($property_name, $value) 메서드를 추가하면 오류가 발생합니다. $property_name에 name과 같은 속성을 전달하고 $value에 할당할 값 "zhangsan"을 전달하여 자동으로 호출됩니다. 멤버 속성이 비공개로 캡슐화되지 않은 경우 개체 자체는 이 메서드를 자동으로 호출하지 않습니다. 잘못된 값을 전달하지 않기 위해 이 방법으로 판단할 수도 있습니다.
|