我在使用PHP链式调用时遇到了一个问题:
下面有一个类“Site”:
<?php
class Site{
public function api(){
require('class.Api.php');
$this->api = new Api();
return $this->api;
}
}
?>
位于“class.Api.php”中还有一个类“Api”:
<?php
class Api{
public function auth(){
//quiet a few
}
public function render(){
//quiet a few
}
}
?>
用下面代码实例化:
$site = new Site();
再调用下列代码:
$site->api()->auth();
$site->api()->render();
请问php会重复require()和创建新对象Api吗?如果是,require()可以用require_once()替代,但是该如何使“$site->api()”返回同一个对象呢?谢谢!
PHP的单例模式可以很好解答你的疑问。
以上会输出:
说明第一次调用
auth()
进了api()
的else
执行语句,第二次调用render()
进入if
语句,说明返回的是同一个实例。不管你调用多少次,返回的都是一个实例,这就是单例模式