新学习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();
