__construct()��
__destruct()��
__call()��
__callStatic()��
__get()��
__set()��
__isset()��
__unset()��
__sleep()��
__wakeup()��
__toString()��
__invoke()��
__set_state()��
__clone() ��
__debugInfo()
�ȷ����� PHP �б���Ϊħ������
��Magic
methods�����������Լ������ʱ����ʹ����Щ����������������ʹ����ħ�����ܡ�
PHP �������� __�������»��ߣ���ͷ���������Ϊħ�������������ڶ������ʱ����������ħ�����������鲻Ҫ�� __ Ϊǰ��
serialize() �������������Ƿ����һ��ħ������
__sleep()��������ڣ��÷������ȱ����ã�Ȼ���ִ�����л��������˹��ܿ������������������һ����������������Ӧ�����л��ı������Ƶ����顣����÷���δ�����κ����ݣ���
NULL
�����л���������һ�� E_NOTICE
����Ĵ���
Note:
__sleep() ���ܷ��ظ����˽�г�Ա�����֡������������һ��
E_NOTICE
����Ĵ������� Serializable �ӿ��������
__sleep() �����������ύδ�ύ�����ݣ������Ƶ����������ͬʱ�������һЩ�ܴ�Ķ�������Ҫȫ�����棬������ܾͺܺ��á�
��֮�෴��unserialize() �����Ƿ����һ�� __wakeup() ������������ڣ�����ȵ��� __wakeup ������Ԥ����������Ҫ����Դ��
__wakeup() �������ڷ����л������У��������½������ݿ����ӣ���ִ��������ʼ��������
Example #1 Sleep �� wakeup
<?php
class Connection
{
protected $link;
private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db)
{
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->connect();
}
private function connect()
{
$this->link = mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);
}
public function __sleep()
{
return array('server', 'username', 'password', 'db');
}
public function __wakeup()
{
$this->connect();
}
}
?>
__toString() ��������һ���౻�����ַ���ʱӦ������Ӧ������
echo $obj; Ӧ����ʾЩʲô���˷������뷵��һ���ַ�����������һ��
E_RECOVERABLE_ERROR
�������������
������ __toString() �������׳��쳣����ô���ᵼ����������
Example #2 ��ʾ��
<?php
// Declare a simple class
class TestClass
{
public $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
public function __toString() {
return $this->foo;
}
}
$class = new TestClass('Hello');
echo $class;
?>
�������̻������
Hello
��Ҫָ�������� PHP 5.2.0 ֮ǰ��__toString()
����ֻ����ֱ��ʹ���� echo �� print
ʱ������Ч��PHP 5.2.0 ֮����������κ��ַ���������Ч������ͨ��
printf()��ʹ�� %s ���η��������������ڷ��ַ�����������ʹ��
%d ���η������� PHP 5.2.0 �������һ��δ����
__toString() �����Ķ���ת��Ϊ�ַ����������
E_RECOVERABLE_ERROR
����Ĵ���
�������Ե��ú����ķ�ʽ����һ������ʱ��__invoke() �����ᱻ�Զ����á�
Note:
������ֻ�� PHP 5.3.0 �����ϰ汾��Ч��
Example #3 ʹ�� __invoke()
<?php
class CallableClass
{
function __invoke($x) {
var_dump($x);
}
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>
�������̻������
int(5) bool(true)
$properties
) : object�� PHP 5.1.0 ���� var_export() ������ʱ������̬ �����ᱻ���á�
��������Ψһ������һ�����飬���а����� array('property' => value, ...) ��ʽ���е������ԡ�
Example #4 ʹ�� __set_state()>��PHP 5.1.0 ��
<?php
class A
{
public $var1;
public $var2;
public static function __set_state($an_array) // As of PHP 5.1.0
{
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}
$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';
eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
// 'var1' => 5,
// 'var2' => 'foo',
// ));
var_dump($b);
?>
�������̻������
object(A)#2 (2) { ["var1"]=> int(5) ["var2"]=> string(3) "foo" }
This method is called by var_dump() when dumping an object to get the properties that should be shown. If the method isn't defined on an object, then all public, protected and private properties will be shown.
This feature was added in PHP 5.6.0.
Example #5 Using __debugInfo()
<?php
class C {
private $prop;
public function __construct($val) {
$this->prop = $val;
}
public function __debugInfo() {
return [
'propSquared' => $this->prop ** 2,
];
}
}
var_dump(new C(42));
?>
�������̻������
object(C)#1 (1) { ["propSquared"]=> int(1764) }