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

标签 php

我正在尝试设置一些要使用的类,但我不确定如何完成以下操作。

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

例子:

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

为了让它工作,我将首先启动类“加载”:

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

现在我可以使用加载器类中的函数了。接下来我想要的是加载的模型可以从类 foo 中访问。示例:

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

这就是我迷路的地方,因为我不确定如何留在“foo”类的范围内。在任何给定时间,我都希望能够使用 $this->load->model('some_model') 加载一个新模型,该模型可以通过 $this-> 访问一些模型。或者 $this->load->something_else('some_name') 通过 $this->some_name 可用。

这是一个加载器类示例:

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?
    }
}

但这一切只发生在加载器类的范围内。

关于如何实现这一点有什么想法吗?

编辑:
我知道我可以将它直接分配给一个变量,比如 $this->model_name = $this->load->model('model_name'),但这就是我'试图避免。我希望能够使用这个“加载”子类,以便能够在类“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();

关于php - 将加载的类分配给当前范围内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11849929/

相关文章:

php - 检查字符串和用户代理

php - #1062 - key '31' 的重复条目 'PRIMARY'

php - 像谷歌图像搜索那样对齐图像

java - PHP/Java Bridge - 在 PHP 中访问 Java 对象

PHP 和问题

php - 如何在 Accordion 中为我的循环发布 wordpress 函数

php - 对复选框单击和取消单击进行 +/- 计数

javascript - 在magento主页上显示多类别产品

Android 中的 PHP 编码

php - Laravel 使用 Monolog\Handler\BrowserConsoleHandler 进行日志记录