이 글에서는 주로 PHP 클래스의 Magic Method(Magic Method)에 대한 간략한 요약을 소개합니다. 이러한 메소드에는 constructor(), destruct(), call(), callStatic(), get(), set(), toString이 포함됩니다. () 등 필요한 친구가 참고하면 됩니다
1. constructor() 및 destruct()
는 인스턴스 생성/파기 시 호출되며 둘 다 0개 이상의 매개변수를 전달할 수 있습니다.
class A { function A() { echo "build A"; } function destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj);
참고: 소멸자 메서드는 특정 객체에 대한 다른 참조가 없거나 종료 시퀀스 중에 어떤 순서로든 호출됩니다.
constructor에 대해 PHP5.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"; } }
에 클래스 이름과 동일한 이름을 가진 constructor() 및 함수가 모두 포함되어 있으면 constructor()만 호출됩니다.
2. call() 및 callStatic()
존재하지 않는 메소드를 호출하려고 할 때 호출됩니다. 두 개의 매개변수, 하나는 메소드 이름이고 다른 하나는 호출된 메소드의 매개변수 array입니다.
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 not presents
name = abc
4.toString()
이 메소드는 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 매직 메소드 적용 예제 코드 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!