有关PHP的链式调用

查看:85
本文介绍了有关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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆