首页  >  问答  >  正文

有关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()”返回同一个对象呢?谢谢!

天蓬老师天蓬老师2701 天前806

全部回复(2)我来回复

  • 为情所困

    为情所困2017-06-19 09:09:08

    单例模式。

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

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

    回复
    0
  • typecho

    typecho2017-06-19 09:09:08

    雷雷 雷雷

    回复
    0
  • 取消回复