导航:首页 > 编程语言 > php中的魔术方法

php中的魔术方法

发布时间:2025-02-10 17:57:46

① 如何在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()
当调用无法访问的普通方法时自动触发

阅读全文

与php中的魔术方法相关的资料

热点内容
安卓天气挂件怎么放到第一页 浏览:865
兰州理工大学51单片机实验 浏览:35
程序员需要高深吗 浏览:98
农行app怎么查询公户账户余额 浏览:330
美国疾控发防疫命令 浏览:141
用固定循环编程可以 浏览:880
硅胶压缩比测试 浏览:801
vc命令行编译c 浏览:674
php用户登录界面 浏览:82
安卓车载导航如何卸载自带软件 浏览:714
阶乘的编程c 浏览:415
java视频教程达内 浏览:825
单片机应该怎么学 浏览:420
空气压缩机品牌名称 浏览:346
word文档部分内容加密 浏览:63
压解压软件 浏览:936
java设置excel格式 浏览:957
单片机锁存器地址怎么看 浏览:576
手机硬件编程 浏览:835
如何去除你看文件夹时间 浏览:442