PHP magic method application example code summary

伊谢尔伦
Release: 2023-03-12 06:16:01
Original
1433 people have browsed it

This article mainly introduces a concise summary of Magic 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);
Copy after login

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 specific namespace will 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
  }
}
Copy after login

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";
  }
 }
Copy after login

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 parameter array of the called method.

class MethodTest
{
  public function call($name, $arguments)
  {
    // Note: value of $name is case sensitive.
    echo "Calling object method '$name' "
       . implode(&#39; &#39;, $arguments). "<br>";
  }

  public static function callStatic($name, $arguments)
  {
    // Note: value of $name is case sensitive.
    echo "Calling static method &#39;$name&#39; "
       . implode(&#39; &#39;, $arguments). "<br>";
  }
}

$obj = new MethodTest;
$obj->runTest(&#39;in&#39;,&#39;object&#39;,&#39;context&#39;);
MethodTest::runTest(&#39;in&#39;,&#39;static&#39;,&#39;context&#39;);
Copy after login

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."<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
 */
Copy after login

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."<br>";
$t->name = "abc";
Copy after login

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;
Copy after login

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template