PHP Magic Method Use example, PHP Magic Example
①__get/__set: Taking over the properties of an object
When accessing a non-existent object property:
index.php
Copy the Code code as follows:
<?php
Define (' BASEDIR ', __dir__); Defining a root directory constant
Include BASEDIR. ' /common/loader.php ';
Spl_autoload_register (' \\common\\loader::autoload ');
$obj = new \common\object ();
When accessing a non-existent object property in PHP
Echo $obj->title;
Throws an error: notice:undefined property:common\object:: $title in D:\practise\php\design\psr0\index.php on line 9
After you add the __set and __get methods in common/object.php
object.php
Copy the Code code as follows:
<?php
namespace Common;
Class object{
function __set ($key, $value) {
}
function __get ($key) {
}
}
Execute index.php again, no more error.
Modify common/object.php again
Copy the Code code as follows:
<?php
namespace Common;
Class object{
Protected $array = Array ();
function __set ($key, $value) {
Var_dump (__method__);
$this->array[$key] = $value;
}
function __get ($key) {
Var_dump (__method__);
return $this->array[$key];
}
}
index.php
Copy the Code code as follows:
<?php
Define (' BASEDIR ', __dir__); Defining a root directory constant
Include BASEDIR. ' /common/loader.php ';
Spl_autoload_register (' \\common\\loader::autoload ');
$obj = new \common\object ();
$obj->title = ' Hello ';
Echo $obj->title;
Execute index.php, page output:
Copy the Code code as follows:
String ' Common\object::__set ' (length=20)
String ' Common\object::__get ' (length=20)
Hello
②__call/__callstatic: A call to control the PHP object method (__callstatic is used to control the static method of the Class)
When executing a non-existent PHP method
index.php:
Copy the Code code as follows:
<?php
Define (' BASEDIR ', __dir__); Defining a root directory constant
Include BASEDIR. ' /common/loader.php ';
Spl_autoload_register (' \\common\\loader::autoload ');
$obj = new \common\object ();
When executing a non-existent PHP method
$obj->test (' Hello ', 123);
Execution index.php will report a fatal error: Fatal error:call to undefined method common\object::test () in D:\practise\php\design\psr0\ index.php on line 9
If you define a __call method in Common/object, the callback is automatically when the method does not exist:
Copy the Code code as follows:
<?php
namespace Common;
Class object{
function __call ($func, $param) {//$func method name $param parameter
Var_dump ($func, $param);
Return "Magic function\n"; Returns a string as the return value
}
}
index.php
Copy the Code code as follows:
<?php
Define (' BASEDIR ', __dir__); Defining a root directory constant
Include BASEDIR. ' /common/loader.php ';
Spl_autoload_register (' \\common\\loader::autoload ');
$obj = new \common\object ();
When executing a non-existent PHP method
echo $obj->test (' Hello ', 123);
Page output:
Copy the Code code as follows:
String ' Test ' (length=4)
Array
0 = String ' Hello ' (length=5)
1 = int 123
Magic function
When a static method that does not exist is called
common/object.php
Copy the Code code as follows:
<?php
namespace Common;
Class object{
static function __callstatic ($name, $arguments) {
Var_dump ($name, $arguments);
Return "Magic function\n"; Returns a string as the return value
}
}
Note: The __callstatic method is also declared as a static method
index.php
Copy the Code code as follows:
<?php
Define (' BASEDIR ', __dir__); Defining a root directory constant
Include BASEDIR. ' /common/loader.php ';
Spl_autoload_register (' \\common\\loader::autoload ');
Executes a static method that does not exist
echo common\object::test ("Hello", 1234);
Execute index.php, page output:
Copy the Code code as follows:
String ' Test ' (length=4)
Array
0 = String ' Hello ' (length=5)
1 = int 1234
Magic function
③__tostring: Converts a PHP object into a string
index.php
Copy the Code code as follows:
<?php
Define (' BASEDIR ', __dir__); Defining a root directory constant
Include BASEDIR. ' /common/loader.php ';
Spl_autoload_register (' \\common\\loader::autoload ');
$obj = new \common\object ();
Echo $obj;
This will cause an error: Catchable fatal error:object of class Common\object could not being converted to string in D:\PRACTISE\PHP\DESIGN\PSR 0\index.php on line 8
Adding __tostring methods in object.php
Copy the Code code as follows:
<?php
namespace Common;
Class object{
function __tostring () {
return __class__;
}
}
④__invoke: When a PHP object is executed as a function, this magic method is recalled
index.php
Copy the Code code as follows:
<?php
Define (' BASEDIR ', __dir__); Defining a root directory constant
Include BASEDIR. ' /common/loader.php ';
Spl_autoload_register (' \\common\\loader::autoload ');
$obj = new \common\object ();
echo $obj ("test");
object.php
Copy the Code code as follows:
<?php
namespace Common;
Class object{
function __invoke ($param) {
Var_dump ($param);
Return ' Invoke ';
}
}
Page output:
Copy the Code code as follows:
String ' Test ' (length=4)
Invoke
http://www.bkjia.com/PHPjc/1021094.html www.bkjia.com true http://www.bkjia.com/PHPjc/1021094.html techarticle PHP Magic Method Use example, PHP Magic example ①__get/__set: Take over the object's properties when accessing a nonexistent object property: The index.php copy Code code is as follows: ...