加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 将加载的类分配给当前范围内的变量

发布时间:2020-12-13 17:12:50 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试设置一些可以使用的类,但我不确定如何完成以下操作. 假设我有一个我正在使用的类“foo”,我想使用另一个名为“loader”的类中的函数.这个loader类的目的是加载我可以在“foo”类中使用的各种其他类. 例: class foo { function foo() { $this-load
我正在尝试设置一些可以使用的类,但我不确定如何完成以下操作.

假设我有一个我正在使用的类“foo”,我想使用另一个名为“loader”的类中的函数.这个loader类的目的是加载我可以在“foo”类中使用的各种其他类.

例:

class foo {
    function foo() {
        $this->load->model();
    }
}

为此,我首先启动类“加载”:

class foo {
    function foo() {
        $this->load = new loader;
        $this->load->model('some_model');
    }
}

现在我可以使用loader类中的函数.我想要的下一件事是可以从类foo中访问加载的模型.例:

class foo {
    function foo() {
        $this->load = new loader;
        $this->load->model('some_model');
        $this->some_model->function_from_this_model();
    }
}

这就是我迷路的地方,因为我不确定如何留在“foo”课程的范围内.在任何给定时间,我都希望能够使用$this-> load->模型(‘some_model’)来加载新模型,该模型可通过$this-> some_model访问.或$this-> load-> something_else(‘some_name’)可通过$this-> some_name获得.

这是一个loader类示例:

class loader {
    function model($model_name) {
        require('models/'.$model_name.'.php');
        $model = new $model_name;
        // and what to do now,to get it back to the $this var from class foo?
    }
}

但所有这些只发生在loader类的范围内.

有关如何实现这一目标的任何想法?

编辑:
我知道我可以将它直接分配给变量,例如$this-> model_name = $this-> load-> model(‘model_name’),但这就是我想要避免的.我希望能够使用这个“load”子类能够在类“foo”的范围内工作.

解决方法

您可以使用Singleton,它允许您从另一个类初始化您的类对象.

例:

// Loader will access class singleton and set object
class loader {
    function model($model_name,$class) {
        require('models/'.$model_name.'.php');
        $class::init()->$model_name = new $model_name;
    }
}

// see new singleton methods
class foo {

    private static $instance
    public static function init(){
        if(is_null(self::$instance)){
            $class = __CLASS__;
            self::$instance = new $class;
        }

        return self::$instance;
    }

    function foo() {
        $this->load = new loader;
        $this->some_model = $this->load->model('some_model',__CLASS__);
        $this->some_model->function_from_this_model();
    }
}

// init class like this
foo::init()->foo();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读