有关PHP的链式调用
本文介绍了有关PHP的链式调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我在使用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的单例模式可以很好解答你的疑问。
class Api
{
public function auth(){
//quiet a few
var_dump(222);
}
public function render(){
//quiet a few
}
}
class Site{
static private $_api;
public function api(){
if(self::$_api != NULL) {
var_dump(1);
return self::$_api;
}else {
var_dump(2);
self::$_api = new Api();
return self::$_api;
}
}
}
$site = new Site();
echo $site->api()->auth();
echo $site->api()->render();
以上会输出:
E:\WWW\test\test.php:21:int 2
E:\WWW\test\test.php:6:int 222
E:\WWW\test\test.php:18:int 1
说明第一次调用auth()
进了api()
的else
执行语句,第二次调用render()
进入if
语句,说明返回的是同一个实例。
不管你调用多少次,返回的都是一个实例,这就是单例模式
这篇关于有关PHP的链式调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文