1. __construct() 및 __destruct()
는 인스턴스가 생성/파괴될 때 호출되며 둘 다 0개 이상의 매개변수를 전달할 수 있습니다.
class A { function A() { echo "build A"; } function __destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj);
참고: 소멸자 메서드는 특정 개체에 대한 다른 참조가 없거나 종료 시퀀스 중에 어떤 순서로든 호출됩니다. .
생성자 관련하여 PHP 5.3.3부터 특정 네임스페이스에 정의된 클래스에서 클래스 이름으로 명명된 메서드는 더 이상 생성자로 간주되지 않습니다. 네임스페이스가 없는 클래스에서는 이전과 마찬가지로 여전히 생성자입니다. 예:
namespace Foo; class Bar { public function Bar() { // treated as constructor in PHP 5.3.0-5.3.2 // treated as regular method as of PHP 5.3.3 } }
Foo 네임스페이스가 없으면 Bar()도 생성자로 사용됩니다. 또한, 다음과 같은 상황이 존재하는 경우:
function __construct() { echo "construct A"; } function A() { echo "build A"; } function __destruct() { echo "destroy A"; } }
즉, __construct()와 클래스 이름과 동일한 이름의 함수가 모두 포함되어 있는 것입니다. , 그러면 _만 _construct()로 호출됩니다.
2. __call() 및 __callStatic()
존재하지 않는 메서드를 호출하려고 할 때 호출됩니다. 두 개의 매개변수 중 하나는 메소드 이름이고 다른 하나는 호출된 메소드의 매개변수 배열입니다.
class MethodTest { public function __call($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling object method '$name' " . implode(' ', $arguments). "<br>"; } public static function __callStatic($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling static method '$name' " . implode(' ', $arguments). "<br>"; } } $obj = new MethodTest; $obj->runTest('in','object','context'); MethodTest::runTest('in','static','context');
그 중 $arguments 가 배열로 전달됩니다. 실행 결과:
객체 컨텍스트에서 객체 메서드 'runTest' 호출
정적 컨텍스트에서 정적 메서드 'runTest' 호출
또한 protected 및 private 함수의 범위에 주의하세요.
class TestMagicCallMethod { public function foo() { echo __METHOD__.PHP_EOL."<br>"; } public function __call($method, $args) { echo __METHOD__.PHP_EOL."<br>"; if(method_exists($this, $method)) { $this->$method(); } } protected function bar() { echo __METHOD__.PHP_EOL."<br>"; } private function baz() { echo __METHOD__.PHP_EOL."<br>"; } } $test = new TestMagicCallMethod(); $test->foo(); /** * Outputs: * TestMagicCallMethod::foo */ $test->bar(); /** * Outputs: * TestMagicCallMethod::__call * TestMagicCallMethod::bar */ $test->baz(); /** * Outputs: * TestMagicCallMethod::__call * TestMagicCallMethod::baz */
3.__get() 및 __set()
은 존재하지 않는 개체의 속성을 읽으려고 할 때 호출됩니다.
참고: 이 함수를 사용하여 Java의 리플렉션과 유사한 다양한 작업을 구현할 수 있습니다.
class Test { public function __get($key) { echo $key . " not exists"; } public function __set($key,$value) { echo $key . " = ".$value; } } $t = new Test(); echo $t->name."<br>"; $t->name = "abc";
출력:
이름이 존재하지 않습니다
name = abc
4. 🎜>이 메소드는 Java의 toString() 메소드와 유사합니다. 객체를 직접 인쇄할 때 이 함수를 호출하면 문자열이 반환됩니다.
class Test { private $name = "abc"; private $age = 12; public function __toString() { return "name : $this->name, age : $this->age"; } } $t = new Test(); echo $t;
출력:
이름: abc, 나이: 12
PHP 클래스의 추가 매직 메소드(Magic 방법) 관련 기사의 간략한 요약을 보시려면 PHP 중국어 홈페이지를 주목해주세요!