1。__construct()和()__destruct

当实例被创建/销毁时,可以调用0个或多个参数。


班上的一个
{
函数A()
{
回声建造;
}

__destruct()函数
{
回声摧毁一个;
}
}

$ obj =新一();
/ /复原($ obj);


注意:析构函数方法一旦存在就被调用,它也被称为

对于构造函数,php5.3.3开始在一个特定的命名空间中定义的类。它不再被类名所命名的方法视为构造函数,就像在没有名称空间的类中一样,它仍然是一个构造函数:


命名空间Foo;
Class Bar {
公共功能条(){
在构造函数中5.3.0-5.3.2 / /处理PHP
作为普通法作为 / php 5.3.3
}
}


如果没有名称空间,那么bar()也将被视为构造函数:


__construct()函数
{
;
}

函数A()
{
回声建造;
}

__destruct()函数
{
回声摧毁一个;
}
}



那是,它包含两__construct()和一个具有相同名称的函数作为类的名称,然后只__construct()将被称为。

2。__call()和()__callstatic

当尝试调用一个不存在的方法时调用该方法。两个参数,一个是方法的名称,另一个是调用方法的参数数组。


类的方法
{
公共功能__call($name,$参数)
{
注意:$的值是大小写。
调用对象方法$名称
(美元崩溃,争论)。
}

公共静态函数__callstatic($name,$参数)
{
注意:$的值是大小写。
调用静态方法$名称
(美元崩溃,争论)。
}
}

$ obj =新方法;
$ obj ->运行测试(,'object ','context);
方法::运行测试(,静态,'context);


在此,$参数作为数组引入:

调用对象method'runtest'in对象上下文

调用静态method'runtest'in静态语境

还要注意保护和私有的功能范围:


类testmagiccallmethod {
公共函数富()
{
__method__ php_eol回声。;
}

公共功能__call($方法,为args)
{
__method__ php_eol回声。;
如果(method_exists($,$方法))
{
$ $ > $方法();
}
}

受保护函数条()
{
__method__ php_eol回声。;
}

私有函数Baz()
{
__method__ php_eol回声。;
}
}

为测试=新testmagiccallmethod();
$;

*输出:
* testmagiccallmethod::Foo
* /

$测试条();

*输出:
* testmagiccallmethod::__call
* testmagiccallmethod::酒吧
* /

为测试-> baz();

*输出:
* testmagiccallmethod::__call
* testmagiccallmethod::巴兹
* /


3。__get()和()__set

当它试图读取一个对象不存在的属性时,就会调用它。

注:我们可以利用这个功能来执行各种各样的操作类似于java的反射。


类测试
{
公共功能__get($键)
{
回波键。不存在;
}
公共功能__set($,$值)
{
回波键。$;
}
}

$ =新测试();
回声名称。;
$ >名称=abc;



输出:

名称不存在

名称= ABC

4。__tostring()

这种方法类似于toString()方法的java,当我们直接打印对象,调用函数,以及函数必须返回一个字符串。




类测试
{
私有$ =abc;
私人$年龄= 12;

公共功能__tostring()
{
返回名称:$,名称,年龄:$;
}
}

$ =新测试();
回声$;


输出:

姓名:ABC,年龄:12