巧用PHP中__get()魔术方法
16lz
2021-01-22
PHP中的魔术方法有很多,这些魔术方法可以让PHP脚本在某些特定的情况下自动调用。比如 __construct() 每次实例化一个类都会先调用该方法进行初始化。这里我们讲一下__get() 魔术方法的使用。读取不可访问属性的值时,__get() 会被调用。也就是,当想要获取一个类的私有属性,或者获取一个类并为定义的属性时。该魔术方法会被调用。
下面有段代码:
class Model { //不存在的成员属性自动调用 function __get($name) { //自动加载数据库 if(substr($name, 0,2) =='db'){ $config = strtolower(substr($name, 2)); if(empty($this->objDb)){ $this->objDb = new LibDatabase($config); }else{ $this->objDb->config($config); } return $this->objDb; } // 自动加载redis if(substr($name, 0,5) =='redis'){ $config = strtolower(substr($name, 5)); if(empty($this->objRedis)){ $this->objRedis = new LibRedis($config); }else{ $this->objRedis->config($config); } return $this->objRedis; } //自动加载excel插件 if(substr($name, 0,5) =='excel'){ if(empty($this->objExcel)){ $this->objExcel = new LibExcel(); } return $this->objExcel; } throw new LinkException("变量{$name}不被支持,请预先Model中定义",EXCEPT_CORE); } } ?>
更多相关文章
- PHP魔术方法之 __toString()
- 关于静态方法不能调用类中的非静态属性的理解
- 通过PHP设置html属性的最佳做法是什么?
- 如何使用基于条件的PHP来改变CSS属性?
- 关于如何更好的监听元素属性的变化(转)
- JavaScript 中 Object ,Prototype 相关的属性和方法
- Dojo:不能在AccordionContainer.js中读取未定义的属性“h”。
- ng- repeat显示的行等于no属性,甚至不显示html视图上的数据
- .addEventListener不是null [duplicate]的属性