>  기사  >  백엔드 개발  >  PHP의 매직 메소드 및 매직 상수

PHP의 매직 메소드 및 매직 상수

不言
不言원래의
2018-06-01 16:30:021777검색

이 글은 주로 PHP의 매직 메소드와 매직 상수를 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

Magic 메소드

__construct()생성자 메소드

객체를 인스턴스화할 때 클래스 이름 뒤에 괄호로 묶인 매개변수 목록을 추가합니다. (생성자 메소드의 실제 매개변수로 이해될 수 있습니다.)

__destruct() 소멸자 메서드

는 생성자 메서드와 쌍을 이루는 것입니다. 생성자 메서드는 개체가 "탄생"될 때 자동으로 호출되는 반면, 소멸자 메서드는 개체가 "사라질" 때 시스템에 의해 자동으로 호출됩니다. ! 객체가 사라지기 전에 소멸자 메서드가 호출됩니다.

객체가 사라지는 여러 상황

1, 변수를 삭제하려면 명시적으로

unset

함수를 사용하세요.

2,

스크립트가 완료된 후 실행이 끝나면 자동으로 소멸됩니다3, 객체 변수의 값을 변경하면 자동으로 소멸됩니다

소멸자 메소드의 역할

릴리스하는 것이 주요 역할입니다 개체가 차지하는 추가 리소스! 물건 자체보다는! ㅋㅋㅋ ) 정의!

생성자 및 소멸자의 특성을 요약하십시오. 상황이 발생했을 때만

위의 세 가지 특성을 동시에 충족하는 메소드가

php에 많이 있는데, 이를 "마법의 메소드"라고 합니다!


__clone()

객체를 복제할 때 자동으로 호출되는 매직 메소드입니다.

객체를 복제할 때 자동으로 이 매직 메소드를 호출합니다! 새로 복제된 개체를 초기화하는 역할을 담당합니다!

__set()

액세스할 수 없는 속성에 값 할당

액세스할 수 없는 속성에 값 할당

:

__set()

일단

__set()

Magic 메소드를 정의하면 가 액세스할 수 없는 속성에 값을 할당하면 가 자동으로 이 메소드를 실행합니다. 이때 처리 능력은 사용자 자신에게 부여됩니다!

이 매직 메소드에는 두 개의 매개변수가 필요합니다.

하나는 액세스할 수 없는 속성의 속성 이름입니다.

하나는 액세스할 수 없는 속성의 값입니다.


__get() 액세스할 수 없는 속성의 값 가져오기

액세스할 수 없는 속성의 값 가져오기: __get()

정의된 후 __get() 매직 메소드, 가 접근할 수 없는 속성의 값을 얻으면 가 자동으로 메소드를 실행합니다. 이때 처리 능력은 사용자 자신에게 부여됩니다!

이 매직 메소드에는 속성의 속성 이름인 하나의 매개변수만 필요합니다!


참고:

__get__set 실제 프로젝트에서는 두 방법 모두 쌍으로 나타나는 경우가 많습니다! 게다가 이 두 가지 방법은 개체의 개인 속성을 일괄 처리하는 데 자주 사용됩니다!


위 코드는 속성의 원래 내부 구조가 변경되지 않도록 사용자가 속성을 추가하지 못하도록 제한할 수도 있습니다!


__unset()액세스할 수 없는 속성 삭제

액세스할 수 없는 속성 삭제: __unset()

일반적으로 말하면 , unset 함수를 전달할 수 있습니다. 공개 속성 삭제 개체의:

그러나 속성에 액세스할 수 없는 경우(예: private 또는 존재하지 않는 경우) __unset 메서드가 자동으로 실행됩니다. 삭제할 수 있는지 여부는 여전히 다릅니다. __unset 내부 구현에 대해 알아보세요!

이 방법에는 현재 삭제된 속성의 이름인 하나의 매개변수만 필요합니다!


__unset에서 ​​아무 것도 수행되지 않으면 기본값은 삭제할 수 없다는 것입니다(물론 오류는 보고되지 않습니다!)

__isset() 속성이 존재합니다

액세스할 수 없는 속성이 있는지 확인하려면: __isset()

속성이 액세스할 수 없는 속성인 경우 속성이 존재하는지 확인할 때 이 메서드의 실행이 자동으로 트리거됩니다!

마찬가지로 이 방법에도 현재 기술이 결정해야 하는 속성 이름인 매개변수가 필요합니다!

__call()접근할 수 없는 객체 메소드(비정적 메소드)를 호출할 때

접근할 수 없는 객체 메소드(비정적 메소드)를 호출하면 매직 메소드가 자동으로 실행됩니다!

생각하기:

현재 이 매직 메서드에는 몇 개의 매개변수가 필요합니까?

매개변수 1: 메서드 이름, stringtype

매개변수 2: arraytype, 매개변수 개수가 불확실하므로 모든 매개변수를 배열에만 넣을 수 있습니다

이 메서드가 아무 작업도 수행하지 않는 경우:

__callstatic() 액세스할 수 없는 클래스 메서드(정적 메서드) 호출

액세스할 수 없는 클래스 메서드(정적 메서드)를 호출하면 매직 메서드가 자동으로 이 메소드를 정의할 때 메소드는 정적 메소드여야 하므로 메소드 이름 앞에 static 키워드를 추가해야 합니다!

작은 사례

다음 목적을 달성하도록 수학 클래스를 설계합니다.

Call 메서드 f1:

1, 11 매개변수가 전달되면 해당 값을 반환합니다. 의 제곱

2, 2 매개변수가 전달되면 제곱의 합

3이 반환되고, 3 매개변수가 전달되면 세제곱의 합

이 반환됩니다. 이것은 메소드 오버로딩을 사용하여 수행됩니다:

__invoke()

객체를 함수(또는 메소드)로 호출하면 매직 메소드가 자동으로 실행됩니다! 현재는 많이 사용되지 않습니다!

앞서 배운 익명 함수를 떠올려보세요:

참고:

클로저 객체로 함수를 성공적으로 호출하기 위해 $func를 사용할 수 있는 이유는 함수가 있기 때문입니다. 클로저 객체에 __invokeMagic method

__toString()

객체를 문자열로 사용하면 모방 메소드가 자동으로 실행됩니다!

그리고 이 메소드의 반환 값은 일반적으로 객체를 문자열로 직렬화한 결과일 수 있습니다!

실제로 이때 시스템은 자동으로 __toString 이 메서드의 실행을 트리거합니다.

Magic 상수

__CLASS__

은 현재 클래스 이름을 나타냅니다!

self와의 차이점에 유의하세요.

self는 클래스 자체(클래스 이름뿐만 아니라 구조)를 나타내는 반면, __CLASS__는 클래스 이름(클래스 이름)입니다. )

__METHOD__

은 현재 메소드 이름을 나타냅니다!

여러 PHP "마법 상수"

Name

Description

__LINE__

파일의 현재 줄 번호입니다.

__FILE__

파일의 전체 경로 및 파일 이름입니다. 포함된 파일 내에서 사용되는 경우 포함된 파일의 이름을 반환합니다.

__DIR__

파일이 위치한 디렉터리입니다. 포함된 파일 내에서 사용되는 경우 포함된 파일이 있는 디렉터리를 반환합니다. dirname(__FILE__)과 동일합니다. 디렉터리 이름은 루트 디렉터리가 아닌 이상 뒤에 슬래시를 포함하지 않습니다.

__FUNCTION__

함수 이름. 이 상수는 함수가 정의되었을 때 함수의 이름을 반환합니다(대소문자 구분).

__CLASS__

클래스 이름입니다. 이 상수는 클래스가 정의되었을 때의 이름을 반환합니다(대소문자 구분). PHP 5.4부터 __CLASS__는 특성에도 작동합니다. 특성 메서드 내에서 사용되는 경우 __CLASS__는 특성 메서드를 호출하는 클래스의 이름입니다.

__TRAIT__

특성의 이름입니다. PHP 5.4부터 이 상수는 정의된 대로 특성의 이름을 반환합니다(대소문자 구분). 특성 이름에는 해당 특성이 선언된 범위가 포함됩니다(예: FooBar).

__METHOD__

클래스의 메소드 이름 (PHP 5.0.0에서 새로 추가됨). 정의된 대로 메서드의 이름을 반환합니다(대소문자 구분).

__NAMESPACE__

현재 네임스페이스의 이름입니다(대소문자 구분).

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

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