机器人研究所—机器人品牌|机器人公司
帐号
密码

密码找回? 注册?

【魔术函数】【魔术方法】

发布时间:2016-04-20

收藏

内容


【魔术函数1 __call】

function __call($f_name,$f_args){//当调用类中某不存在的方法(包括类中$this->调用和类外new后$xxx->调用),这个函数被执行

                                //参数$f_name自动获得不存在的方法名称,$f_args自动获得不存在方法参数(参数为数组)。


【注意】__call把接收到的参数$f_args做成了数组。如果在这个魔术函数中再去把参数传递给其他方法,如果其他方法有多个变量参数接收,而传递过去的却只有一


个变量参数。就会出问题。所以可以结合call_user_func_array()【调用回调函数】去再次调用其他方法。这个函数可以把传递过去的参数(数组)再分配到多个参数


变量上。如:call_user_func_array('xxx',$args); //去调用本类中xxx方法,并且传递参数(数组),数组参数会平均分配到xxx方法的多个变量上。

如:call_user_func_array(array('test','xxx'),$args); //去调用test类中xxx方法,并且传递参数(数组),数组参数会平均分配到xxx方法的多个变量上。

//xxx方法例子:

function xxx($a,$b,$c){ 

}




【魔术函数2 __get】

function __get($s_name){ //当调用类中不存在的属性(包括类中$this->调用和类外new后$xxx->调用) 或者 protected受保护的属性 时候触发。 

                         //参数$s_name是不存在属性的名称。


}



【魔术函数3 自动加载函数1】__autoload()方法 //当new 不存在类的时候,该方法被触发。


<?php

function __autoload($classname) //参数会取被new的类名称。

{

    require_once($classname.'.class.php'); //然后可使用被new的类名称去调用该类所在的php文件,最后下面的new就成立了。

}


$books = new Books("PHP5", "Gilmore"); //如这里,实例化Books类是在另一个PHP里(这例子没写),但是却可以在这个PHP直接实例化,因为自动获取了Books类名后调用对应的php文件。



?>

//【注意】貌似不能在类里用

//【注意】不光是new同样xxx::xxx也能触发(实例化xxx类下的xxx方法)

//【注意】但是必须被new的类名和require_once调用的文件名称必须一样,该内部方法主要用在有大量类PHP文件的时候可以自动调用文件并实例化,而不需要每个

都调用一次。

//【注意2】//如果调用的类文件在其他文件夹,记得加路径,如(当前文件下的X文件夹):'./x/'.$classname.'.php'




【魔术函数3 自动加载函数2 强制使用自定义的方法】spl_autoload_register() 

这个函数可以代替__autoload,也就是把__autoload可弄成自定义的方法名称来接收不存在的类名称并且执行调用。(这里写的不够清除,没做测试,看网上的资料。



class xx{


 static function a($classname){


     echo $classname; //得到new的类名称。

     include($classname.'.php'); 

   }


}


spl_autoload_register(  array('xx','a')  );  //xx为类a为方法

或者

spl_autoload_register( 'a' ); //如果调用类外的方法直接写就行。


$lsr=new test;

//【注意】可以写在类里,类外都行,方法也同样可以写在类里类外,更自由。

//【注意】方法貌似必须为static

//【注意】不光是new同样xxx::xxx也能触发(实例化xxx类下的xxx方法)

//【注意】但是必须被new的类名和require_once调用的文件名称必须一样,该内部方法主要用在有大量类PHP文件的时候可以自动调用文件并实例化,而不需要每个

都调用一次。

//【注意2】//如果调用的类文件在其他文件夹,记得加路径,如(当前文件下的X文件夹):'./x/'.$classname.'.php'


评论

桂ICP备13000955号-5