新学习PHP, 对php访问类属性$this->name,$this->age,$this->getName()等可能会比较容易理解接受, 但看到$this->db->query()这种用法往往会比较困惑, 感觉有些怪怪的, 为什么会有连续"->"的用法呢?
其实, 这个也不是很难, 当$this->db = new Db()这样操作后, 那么$this->db整个就是一个实例化对象了, 所以, 就可以通过$this->db->query()这里访问Db类里面的方法了, 基本上一些PHP框架的控制器都是按照这种原理来写的,具体可以看下面的例子.
1. db.php文件代码[将在构造函数中被实例化的类文件]
class db{ public function query(){ echo "实际代码自行脑补"; } }2. Controller.php文件
header("Content-Type: text/html; charset=UTF-8"); include("db.php"); class Controller{ public $db; public function __construct(){ $this->db = new db(); //$this->db被赋值一个实例化对象, 所以子类就可以通过$this->db->query()来访问了,之前的PHP框架可以在控制器中如此调用如:$this->db->query();$this->load->help()等, 实际上都是利用的这样一个原理
} } class Test extends Controller{ public function getAll(){ $this->db->query(); //因为父类实现了 对 类属性 $db 实例化 赋值, 所以 //所以这里$this->db是一个实例化对象, 故而可以直接访问对象的方法 } } //$test = new Test(); //$test->db->query();