千家信息网

php的魔术方法详解

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"php的魔术方法详解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"php的魔术方法详解"吧!从PHP 5以后的版本,PHP中的类就可以使
千家信息网最后更新 2026年10月31日php的魔术方法详解

本篇内容主要讲解"php的魔术方法详解",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"php的魔术方法详解"吧!

从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。PHP 将所有以 _ _(两个下划线)开头的类方法保留为魔术方法。

__toString() 和__invoke()

public string __toString ( void ):当对象被当做string使用时,这个方法会被自动调用。此方法必须返回一个字符串

复制代码 代码如下:


class Magic{
public function __tostring(){
return "hello world!";
}
}
$obj = new Magic();
echo $obj;//hello world!
?>

__invoke():当对象被当成方法调用时,这个方法会被自动调用。

复制代码 代码如下:


class Magic{
public function __tostring(){
return "hello world!";
}
public function __invoke($x){
echo "__invoke called with param ".$x."\n";
}
}
$obj = new Magic();
$obj(10);//__invoke called with param 10
?>

__call()和__callStatic()

__call():当对象访问不存在的方法名称时,__call()方法会被自动调用

__callStatic():当对象访问不存在的静态方法名称时,__callStatic()方法会被自动调用

通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现

复制代码 代码如下:


class Magic{
//`$name` 参数是要调用的方法名称。`$arguments` 参数是一个枚举数组,
//包含着要传递给方法 `$name` 的参数。
public function __call($name,$arguments){
//implode() 函数把数组元素组合为一个字符串。implode(separator,array)
echo "Calling " . $name ." with param: ".implode(", ",$arguments)."\n";
}
}
$obj = new Magic();
$obj->run("para1","para2");//obj去调用run方法,输出:Calling run with param: para1, para2
?>

__get()和__set()

在给不可访问属性赋值时,__set()会被调用
读取不可访问属性的值时,__get()会被调用

复制代码 代码如下:


class Magic{
//function 前要有static关键字
public function __get($name){
return "Getting the property " . $name;
}
}
$obj = new Magic();
echo $obj->className."\n";//Getting the property className
?>

读取不可访问属性的值时,__get()会被调用

复制代码 代码如下:


class Magic{

public function __set($name,$value){
echo "Setting the property " . $name ."to value ". $value ."\n";
}
}
$obj = new Magic();
$obj->className = 'MagicClass';//Setting the property classNameto value MagicClass
?>

__isset()和__unset()

当对不可访问属性调用isset()或empty()时,__isset()会被调用
当对不可访问属性调用unset()时,__unset()会被调用

复制代码 代码如下:


class Magic{
public function __isset($name){
echo "__isset invoked\n";
return true;
}
}
$obj = new Magic();
echo '$obj->className is set?'.isset($obj->className)."\n";//__isset invoked $obj->className is set?1
?>

到此,相信大家对"php的魔术方法详解"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

方法 代码 魔术 属性 名称 对象 两个 参数 开头 下划线 内容 函数 字符 字符串 数组 学习 不同 实用 更深 不用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 中国互联网科技股 今日互联网科技 互联网通讯科技 科技企业和互联网企业 唐信互联网科技 广西互联网科技公司 广西拼得多互联网科技有限公司 互联网时代科技改变生活 互联网科技革命什么开始 苏州铭阳互联网科技有限公司 呼和浩特新华互联网科技学院 广东工业互联网大赛深圳学泰科技 深圳无忧互联网科技 东营紫格互联网科技 南京一网一红互联网科技有限公司 福建互联网展示科技馆设计 科技互联网行业投资研究 互联网科技自媒体灵感 六子台科技互联网展会 科技互联网 广东万易互联网科技有限公司惠州分公司 科技互联网政务服务 中国互联网有什么科技含量 承德科技产业互联网发展 洛阳昕诺飞互联网科技有限公司 互联网科技研发水平 深圳市罗太互联网科技有限公司 明优互联网科技有限公司 互联网科技公司营业执照怎么办理
0