⑴ 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中常用的魔术方法有哪些
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魔术方法有哪些
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()
当调用无法访问的普通方法时自动触发
⑷ PHP8中的魔术方法-PHP8知识详解
在PHP8中,魔术方法为开发者提供了更灵活的类行为定义方式,它们以两个下划线(__)开头。通过魔术方法,可以实现如对象创建、方法调用、属性访问与修改等行为。以下为一些常见魔术方法的简介:
__construct(): 类的构造函数。当对象创建时自动调用。
__destruct(): 类的析构函数。当对象销毁时自动调用。
__get($name): 在尝试读取不可访问属性值时自动调用。
__set($name, $value): 在给不可访问属性赋值时自动调用。
__isset($name): 在调用isset()或empty()函数检查不可访问属性时自动调用。
__unset($name): 在调用unset()函数删除不可访问属性时自动调用。
__call($name, $arguments): 在调用不存在或不可访问方法时自动调用。
__call static($name, $arguments): 在调用不存在或不可访问静态方法时自动调用。
__toString(): 在将对象作为字符串输出时自动调用。
__invoke($arguments): 当尝试将对象作为函数调用时自动调用。
__clone(): 当对象被克隆时自动调用。
__debugInfo(): 在使用var_mp()函数输出对象信息时自动调用。
__serialize(): 在对象被序列化时自动调用。
__unserialize($data): 在对象被反序列化时自动调用。
__sleep(): 在对象被序列化时自动调用,返回要序列化的属性列表。
__wakeup(): 在对象被反序列化时自动调用。
本文主要介绍两个魔术方法:__set()和__get()。面向对象设计原则强调封装性,不鼓励直接访问类属性。通过使用__set()和__get(),可以间接访问类属性,避免直接访问,提升代码的可维护性和安全性。
当尝试写入未定义或不可见的成员变量时,会触发__set()方法。该方法接收变量名称和值作为参数。
在调用未定义或不可见的成员变量时,会触发__get()方法。该方法接收要调用的变量名称作为参数。
以下为使用__set()和__get()的参考代码示例:
运行结果表明,尝试访问未定义成员变量时,会自动调用__set()和__get()方法,实现间接访问类属性的功能。