类成员变量被赋予实例化对象

时间:2017-02-23 22:33:27 类型:PHP
字号:    

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