Home>Article>Backend Development> PHP magic method application example code summary

PHP magic method application example code summary

伊谢尔伦
伊谢尔伦 Original
2017-06-29 13:34:39 1384browse

This article mainly introduces a concise summary ofMagic Method(Magic Method) in PHP classes. These methods include construct(), destruct(), call(), callStatic(), get() , set(), toString(), etc. Friends who need it can refer to

1. construct() and destruct()

when the instance is created/destroyed When called, zero or more parameters can be passed.

class A { function A() { echo "build A"; } function destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj);

Note:The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence.

 AboutConstructor, starting from PHP5.3.3, a method named with the class name in a class defined in a specificnamespacewill no longer be considered a constructor. In a class without a namespace, it is still a constructor as before. For example:

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 } }

If there is no namespace Foo; then Bar() will also be used as a constructor. In addition, if the following situation exists:

function construct() { echo "construct A"; } function A() { echo "build A"; } function destruct() { echo "destroy A"; } }

contains both construct() and a function with the same name as the class name, then only construct() will be called.

2. call() and callStatic()

Called when trying to call a method that does not exist. Two parameters, one is the method name, and the other is the parameterarrayof the called method.

class MethodTest { public function call($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling object method '$name' " . implode(' ', $arguments). "
"; } public static function callStatic($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling static method '$name' " . implode(' ', $arguments). "
"; } } $obj = new MethodTest; $obj->runTest('in','object','context'); MethodTest::runTest('in','static','context');

Among them, $arguments is passed in as an array. Running results:

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context

Also pay attention to the scope protected and private of the function:

class TestMagicCallMethod { public function foo() { echo METHOD.PHP_EOL."
"; } public function call($method, $args) { echo METHOD.PHP_EOL."
"; if(method_exists($this, $method)) { $this->$method(); } } protected function bar() { echo METHOD.PHP_EOL."
"; } private function baz() { echo METHOD.PHP_EOL."
"; } } $test = new TestMagicCallMethod(); $test->foo(); /** * Outputs: * TestMagicCallMethod::foo */ $test->bar(); /** * Outputs: * TestMagicCallMethod::call * TestMagicCallMethod::bar */ $test->baz(); /** * Outputs: * TestMagicCallMethod::call * TestMagicCallMethod::baz */

3.get() and set()

are called when trying to read properties of an object that do not exist.

Note: We can use this function to implement various operations similar to reflection in 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."
"; $t->name = "abc";

Output:
name not exists
name = abc

4. toString()

This method is similar to java toString() method, this function is called when we print the object directly. The function must return a string.

class Test { private $name = "abc"; private $age = 12; public function toString() { return "name : $this->name, age : $this->age"; } } $t = new Test(); echo $t;

Output:

name : abc, age : 12

The above is the detailed content of PHP magic method application example code summary. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn