> 백엔드 개발 > PHP 문제 > PHP의 매직 메소드는 무엇입니까?

PHP의 매직 메소드는 무엇입니까?

青灯夜游
풀어 주다: 2023-03-11 06:16:01
원래의
1704명이 탐색했습니다.

Magic 메소드에는 "__construct()", "__destruct()", "__set()", "__get()", "__isset()", "__unset()", "__sleep()", "___wakeup"이 포함됩니다. " ()", "__call()" 등

PHP의 매직 메소드는 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

php 매직 메소드

객체 지향 프로그래밍에서 PHP는 일련의 매직 메소드를 제공합니다. 매직 메소드는 프로그래밍에 많은 편의성을 제공하며 PHP에서 이들의 역할은 매우 중요합니다. PHP의 매직 메소드는 일반적으로 __(두 개의 밑줄)로 시작하며 명시적으로 호출할 필요는 없지만 특정 조건에서 자동으로 호출됩니다.

Magic method Function
__construct() 클래스를 인스턴스화할 때 자동으로 호출됩니다.
__destruct() 클래스 객체가 완료되면 자동으로 호출됩니다
__세트() 정의되지 않은 속성에 값을 할당할 때 자동 호출
__get() 정의되지 않은 속성 호출 시 자동 호출
__isset() isset() 또는empty() 함수 사용 시 자동 호출
__unset() unset() 사용 시 자동 호출
__sleep() serialize를 사용하여 직렬화할 때 자동 호출
__wakeup() unser를 사용하여 직렬화 해제 시 자동 호출 ialize
__call() 존재하지 않는 메소드 호출 시 자동 호출
__callStatic() 존재하지 않는 정적 메소드 호출 시 자동 호출
__toString() 객체를 문자열로 변환할 때 자동으로 Called
__invoke() 객체를 메소드로 호출하려고 할 때 자동으로 호출됩니다.
__set_state() var_export() 함수를 사용할 때 자동으로 호출되고 배열 매개변수를 허용합니다
__clone( ) clone을 사용하여 객체를 복사할 때 자동 호출
__debugInfo() 객체 정보를 인쇄하기 위해 var_dump()를 사용할 때 자동 호출

다음은 일반적으로 사용되는 몇 가지 매직 메소드에 대한 간략한 소개입니다.

1.__set() 메소드

현재 환경에서 정의되지 않거나 보이지 않는 클래스 속성에 값을 할당하면 __set() 메소드가 자동으로 호출됩니다. 이 메소드를 정의하는 구문 형식은 다음과 같습니다.

public function __set($key, $value){
    ... ... ;
}
로그인 후 복사

그 중 $key 매개변수는 연산할 변수의 이름이고, $value는 $key 변수의 값입니다.

2. __get() 메소드

현재 환경에서 정의되지 않았거나 보이지 않는 클래스 속성을 호출하거나 얻을 때 __get() 메소드가 자동으로 호출됩니다. 이 메소드를 정의하는 구문 형식은 다음과 같습니다.

public function __get($name){
    ... ... ;
}
로그인 후 복사

Parameter $ name은 연산을 수행할 변수의 이름입니다.

3. __isset() 메서드

클래스 외부에서 액세스할 수 없거나 클래스에 없는 속성에 대해 isset() 또는empty() 함수를 사용하면 __isset() 메서드가 자동으로 호출됩니다. 이 메소드의 구문 형식은 다음과 같습니다.

public function __isset($name){
    ... ... ;
}
로그인 후 복사

$name 매개변수는 액세스할 속성의 이름입니다.

isset() 함수는 변수가 존재하는지 여부와 NULL이 아닌지 확인할 수 있습니다. 변수를 매개변수로 전달하고 전달된 변수가 존재하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

empty() 함수는 변수가 비어 있는지 확인할 수 있습니다. 또한 변수가 존재하지 않거나 변수 값이 FALSE인 경우 변수를 전달해야 합니다. 존재하지 않는 것으로 간주됩니다.

클래스의 Public 멤버는 클래스 외부에서 접근할 수 있고, Private 멤버는 클래스 외부에서 접근할 수 없습니다. 즉, isset() 또는empty() 함수를 사용하여 클래스에 공개 속성이 있는지 확인할 수 있지만 이 두 함수는 클래스의 비공개 속성에 대해 유효하지 않습니다.

isset() 또는empty() 함수를 사용하여 클래스의 비공개 속성을 감지하려면 클래스 비어 있는 클래스 외부에서 isset() 또는empty()를 사용할 때 클래스에 __isset() 메서드만 추가하면 됩니다. () 함수를 사용하면 클래스의 __isset() 메서드가 자동으로 호출됩니다.

4. __unset() 메서드

접근할 수 없거나 클래스에 존재하지 않는 속성에 대해 클래스 외부에서 unset() 함수를 사용하면 __unset() 메서드가 자동으로 호출됩니다.

public function __unset($name){
    ... ... ;
}
로그인 후 복사

$name 매개변수는 액세스할 속성의 이름입니다.

먼저 unset() 함수를 살펴보겠습니다. unset() 함수의 기능은 지정된 변수를 삭제하는 것입니다. 또한 이 함수에는 반환 값이 없습니다. .

마찬가지로 unset() 함수를 사용하여 클래스 외부의 클래스에 있는 멤버 속성을 삭제할 수도 있습니다. 위에서 소개한 __isset() 메서드와 유사하게, 클래스에서 공개 속성을 삭제하려면 unset() 함수를 직접 사용할 수 있습니다. 클래스에서 비공개 속성을 삭제하려면 __unset을 추가해야 합니다. () 클래스 메소드.

5. __call() 메서드

클래스에 액세스할 수 없거나 존재하지 않는 메서드가 호출되면 __call() 메서드가 호출됩니다. 이 메소드의 구문 형식은 다음과 같습니다.

public function __call($name, $arguments){
    ... ... ;
}
로그인 후 복사

여기서 $name은 호출할 메소드의 이름이고 $arguments는 $name에 전달된 매개변수 배열입니다.

호출된 메소드가 존재하지 않으면 __call() 메소드가 자동으로 호출되어 프로그램이 계속 실행되므로 호출 메소드가 존재하지 않을 때 오류로 인한 프로그램 종료를 방지할 수 있습니다.

6. __clone() 메소드

clone 키워드를 사용하여 객체를 복사할 수 있습니다. 복사가 완료되면 __clone() 메소드가 정의되면 새로 생성된 객체(생성된 객체)에 __clone() 메소드가 정의됩니다. by copying)이 자동으로 호출되며, 이 메서드를 통해 몇 가지 필요한 작업을 수행할 수 있습니다. __clone() 메서드의 구문 형식은 다음과 같습니다.

public function __clone(){
    ... ... ;
}
로그인 후 복사

이 함수에는 매개 변수를 전달할 필요가 없습니다.

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP의 매직 메소드는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿