gpt4 book ai didi

php: 类延迟加载?

转载 作者:可可西里 更新时间:2023-11-01 13:46:16 25 4
gpt4 key购买 nike

我这里有一个问题,这几天一直在思考这个问题。在 php 应用程序中,您需要对对象执行某些操作:

  1. 定义它
  2. 用它运行一个函数像这样:(具有自动加载和注册表对象)
  3. $registry->obj = new mathClass($var1,$var2);//创建对象,其中 $var1 保存数据库对象,$var2 保存值 1,例如
  4. $registry->obj->calculate('value');//获取产品行并返回它们的总值。这样,在脚本中的任何时候我都可以简单地运行我事先定义的计算函数(或其他一些函数)。

想象一个 Web 应用程序有数百个类,这些类可能需要也可能不需要用于此特定页面加载,但只能在应用程序开始时定义。所需的解决方案是我只需运行

$obj->calculate('price'); 

不创建对象,例如像这样

mathclass::calculate('price'); 

这会根据需要自动加载数学类,而不会产生主要开销,这里的问题是我不能再在开始时给数学类任何变量

($var1,$var2).

我想要的是能够在不自动加载类的情况下伪创建对象,而不是增加开销,但是对象使用变量创建自己,但只有当我真正需要做一些事情时

我的意思是 php 真的希望我在开始时定义每个类以便我以后可以使用它们吗?这是延迟加载吗?急于加载?

我可能解释得不好,所以请指出正确的方向。

Edit 2015:简单的伪代码示例解决方案:

class Service {
private $cb, $instance;
public function __construct($cb){
$this->cb = $cb;
}
public function __invoke() {
if(!$this->instance){
$this->instance = call_user_func($this->cb);
}
return $this->instance;
}
}

// setup autoloading
set_include_path(__DIR__.'/vendor'. PATH_SEPARATOR .get_include_path()); // optional
spl_autoload_register(function($c){
include preg_replace('#\\\|_(?!.+\\\)#','/',$c).'.php';
});

// simple dependency injection
$service['db'] = new Service(function(){
return new Database('sqlite::filename.sqlite');
});
$service['config'] = function() use(&$service){
return new Config($service['db']());
};
$service['math'] = function() use(&$service){
return new Math($service['config']());
};

// usage
$service['math']()->calculate('price');

最佳答案

使用 Dependency Injection Framework .它允许您从配置文件配置您的类,当您需要一个类时,您只需通过服务构建器调用它。

关于php: 类延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3343208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com