有关PHP的链式调用
天蓬老师
天蓬老师 2017-06-19 09:07:08
[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()”返回同一个对象呢?谢谢!

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
为情所困

单例模式。

<?php
class Site{
    
    public function api(){
        if (!isset($this->api)) {
            $this->api = new Api();
        }
        return $this->api;
    }
}
?>

只是简单写写,还需要很多优化。

typecho
require('class.Api.php');
class Site{
    protected $api;
    
    public function getApi()
    {
        return $this->api;
    }
    
    public function api(){
        $this->api = new Api();
    }
}
?>
$site = new Site();
$site->api();
$site->getApi()->auth();
$site->getApi()->render();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号