我正在尝试设置一些要使用的类,但我不确定如何完成以下操作。
假设我有一个正在使用的类“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/