① 如何在php类中执行某方法的时候自动执行另一个方法比如我执行数据插入的时候自动运行数据过滤的方法
PHP没有事件机制。有一些模拟事件的方法,但我觉得代码太繁琐了,不实用。这里我向你推荐PHP的魔术方法。
魔术方法会在调用一个不存在或是非公有的方法之前,自动根据某种规则调用另外一个方法。比如下面的类就是了这样:在调用insert方法时,判断类中是否有before_insert方法。如果有则先调用before_insert方法,并检查它的返回值,决定是否继续调用insert。如果before_insert是一个过滤函数,如果验证失败就会返回false,insert插入就不会进行了。
如果不明白可以阅读PHP手册中介绍魔术方法的部分。
<?php
classMyClass{
//如果使用类的实例调用$method,但$method方法不是公有的,就会触发此函数。
publicfunction__call($method,$args){
//检查是否存在方法$method
if(method_exists($this,$method)){
$before_method='before_'+$method;
//检查是否存在方法$before_method
if(method_exists($this,$before_method)){
//调用$before_method,检查其返回值,决定是否跳过函数执行
if(call_user_func_array(array($this,$before_method),$args)){
retruncall_user_func_array(array($this,$method),$args)
}
}else{
//$before_method不存在,直接执行函数
retruncall_user_func_array(array($this,$method),$args)
}
}else{
thrownewException('nosuchmethod'.$method);
}
}
//注意这里不要写成public
privatefunctioninsert(){}
//低调!不要写出公有的
privatefunctionbefore_insert(){}
}
$myobj=MyClass;
$myobj->insert('mytable',array('name'=>'2012'));
② php中常用的魔术方法有哪些
php规定以两个下划线__开头的方法都保留为魔术方法,建议自定义函数的函数名最好避开。
__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
③ php中怎么使用call
__call是php语言里的一个魔术方法,其作用是:当调用的方法不存在时会自动调用这个方法。
语法:
function__call(string$function_name,array$arguments)
{
宏瞎......
}
该方握绝祥法有两个参数,第一个参数$function_name会自动接收不存在的方法名,第二个$args则以数组的方段搏式接收不存在方法的多个参数。
在类里面加入:
function__call($function_name,$args)
{
echo"你所调用的函数:$function_name(参数:<br/>";
var_mp($args);
echo")不存在!";
}
当调用一个不存在的方法时(如test()方法):
$p1=newPerson();
$p1->test(2,"test");
输出的结果如下:
你所调用的函数:test(参数:
array(2){
[0]=>int(2)
[1]=>string(4)"test"
}
)不存在!
④ php魔术方法有哪些
1.constuct()构造函数
通常实例化完一个对象之后,都要对该对象的属性进行初始化!在实例化一个对象的时候,PHP系统会自动的调用一个名字叫作construct()的方法,我们把这个方法叫作“构造方法”!
2.destruct()析构方法
与构造方法是一对,构造方法是在一个对象“出生”的时候由系统自动调用的,而析构方法是在一个对象“消失”的时候由系统自动调用的!
析构方法的名字叫destruct();注意里面不能有任何的参数!
3.clone()克隆
触发时机:是在克隆一个对象的时候,对新对象进行初始化的工作
4.autoload()自动加载类
当调用不存在的类的时候自动调用!
5.tostring()
当将对象当成字符串使用的时候自动调用
6.invoke()
当将对象当成函数使用的时候自动调用
7,set()
当对无法访问的属性赋值时自动调用(比如:类外调用私有属性)
8.get()
当对获取无法访问的属性值的时候自动调用
9.unset()
当销毁无法访问的属性的时候自动调用
10.isset()
当判断无法访问的属性是否存在的时候自动调用
11.call()
当调用无法访问的普通方法时自动触发