|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
不懂的问题有很多高手帮你解决。但不要认为你是新手,就不能帮助别人,比如今天你学会了怎样安装PHP,明天还可能有朋友会问这个问题,你就可以给他解答,不要认为这是浪费时间,忙别人其实就是帮助自己。
PHP5.3新增了一个叫做__invoke的魔术办法,如许在创立实例后,可以直接挪用对象。
class testClass
{
public function __invoke
{
print “hello world”;
}
}
$n = new testClass;
$n();
履行了局为:
hello world。
官方示例
class CallableClass
{
public function __invoke($x)
{
var_dump($x);
}
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>
附:PHP其他魔术办法详解
php中的类就能够利用魔术办法了。其划定以两个下划线(__)开首的办法都保存为魔术办法,所以建议人人函数名最好不必__开首,除非是为了重载已有的魔术办法。
The function names __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state and__clone are magical in PHP classes. You cannot have functions with these names in any of your classes unless you want the magic functionality associated with them.
这两个办法是为在类和他们的父类中没有声明的属性而设计的。
◆__get($property)当挪用一个不决义的属性时,此办法会被触发,传递的参数是被会见的属性名。
◆__set($property,$value)给一个不决义的属性赋值时,此办法会被触发,传递的参数是被设置的属性名和值。
这里的没有声明包含当利用对象挪用时,会见掌握为proteced,private的属性(即没有权限会见的属性)。
与__get办法和__set办法不异,这里的没有声明包含当利用对象挪用时,会见掌握为proteced,private的属性(即没有权限会见的属性)。
这里的不决义的办法包含没有权限会见的办法;假如办法不存在就去父类中找这个办法,假如父类中也不存在就去挪用本类的__call()方?法,假如本类中不存在__call()办法就去找父类中的__call()办法。
__autoload函数,它会在试图利用还没有被界说的类时主动挪用。经由过程挪用此函数,剧本引擎在php失足掉败前有了最初一个时机加载所需的类。
注重:在__autoload函数中抛出的异常不克不及被catch语句块捕捉并招致致命毛病,所以应当在函数自己做捕捉。
◆__construct机关办法,当一个对象创立时挪用此办法,相对php4利用此办法的优点是:可使机关办法有一个举世无双的称号,不管它地点的类的称号是甚么.如许你在改动类的称号时,就不需求改动机关办法的称号。
◆__destruct析构办法,php将在对象被烧毁前(即从内存中排除前)挪用这个办法。默许情形下,php仅仅释放对象属性所占用的内存并烧毁对象相干的资本,析构函数答应你在利用一个对象以后履行恣意代码来排除内存。当php决意你的剧本不再与对象相干时,析构函数将被挪用。
在一个函数的定名空间内,这会产生在函数return的时分。关于全局变量,这产生于剧本停止的时分。假如你想明白地烧毁一个对象,你可以给指向该对象的变量分派任何其它值.凡是将变量赋值勤为null或挪用unset。
php5中的对象赋值是利用的援用赋值,假如想复制一个对象则需求利用clone办法,在挪用此办法是对象会主动挪用__clone魔术办法,假如在对象复制需求履行某些初始化操作,可以在__clone办法完成。
__tostring办法在将一个对象转化成字符串时主动挪用,好比利用echo打印对象时。
在php5.2.0之前,__tostring办法只要联合利用echo()或print()时才干失效。php5.2.0以后,则可以在任何字符串情况失效(例如经由过程printf(),利用%s润色符),但不克不及用于非字符串情况(如利用%d润色符)。从php5.2.0,假如将一个不决义__tostring办法的对象转换为字符串,会报出一个e_recoverable_error毛病。
◆__wakeup反串行化的时分挪用
serialize()反省类中是不是有魔术称号__sleep的函数。假如如许,该函数将在任何序列化之前运转。它可以排除对象并应当前往一个包括有该对象中应被序列化的一切变量名的数组。
利用__sleep的目标是封闭对象能够具有的任何数据库毗连,提交守候中的数据或停止相似的排除义务。另外,假如有十分大的对象而其实不需求完整贮存上去时此函数也很有效。
PHP相反地,unserialize()反省具有魔术称号__wakeup的函数的存在。假如存在,此函数可以重建对象能够具有的任何资本。利用__wakeup的目标是重建在序列化中能够丧失的任何数据库毗连和处置其它从头初始化的义务。
当测验考试以挪用函数的体例挪用一个对象时,__invoke办法会被主动挪用。
它的任务体例相似于__call()魔术办法,__callstatic()是为了处置静态办法挪用。
php的确增强了对__callstatic()办法的界说;它必需是公共的,而且必需被声明为静态的。一样,__call()魔术办法必需被界说为公共的,一切其他魔术办法都必需如斯。
<P style="TEXT-INDENT: 2em">
你的确对PHP有兴趣,那么选择教材也是很重要的。 |
|