Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一种“全局”PHP类_Php - Fatal编程技术网

一种“全局”PHP类

一种“全局”PHP类,php,Php,在我的web应用程序中,首先要创建数据库连接适配器。在此之前,将构建应用程序配置。它们都是通过ZF2中相应的Zend组件实例化的。我注意到,我只是将ZF2用作库,而不是框架本身 基本上,这就是我的应用程序初始化过程中发生的事情 $config = new \Zend\Config\Config(array()); $database = new \Zend\Db\Adapter\Adapter($config->database->toArray); /** *Create t

在我的web应用程序中,首先要创建数据库连接适配器。在此之前,将构建应用程序配置。它们都是通过ZF2中相应的Zend组件实例化的。我注意到,我只是将ZF2用作库,而不是框架本身

基本上,这就是我的应用程序初始化过程中发生的事情

$config   = new \Zend\Config\Config(array());
$database = new \Zend\Db\Adapter\Adapter($config->database->toArray);

/**
*Create the session, start the session
*Set error handling
*/
很酷,这就是它的主要部分。现在,我们来处理这个请求:

$router = new \ils\Router($_SERVER['REQUEST_URI'], $database]);
$router->dispatch();
在我的路由器中,我基本上是将URI分解成它的组件,检查路由是否有效,然后使用以下命令分派它:

$dispatchedController = new $this->controller($this->database);
$method = $this->method;
我基本上是通过路由器将初始化时提供的数据库组件注入控制器。离迪奥够近吗?我怎样才能改进它

所以在我的控制器类中,我有承包商

public function __construct($database){
    $this->database = $database;
}
就这样。然后,我可以根据需要将其传递到相关DAO等

我的问题是,在应用程序的某些地方,特别是视图和其他一些类中,我得到了服务——可能不是您想要的类型!这些服务仅中继信息,通常不会实例化为对象:

class UserService {

  public static function getUsername(){

   $container = new \Zend\Session\Container('application_session');

   return $sessionContainer->userId;

  } 
然后我们有一个方法,看起来像这样,这就是问题所在:

public function getCurrentUser(){

    $user = new \ils\objects\user();
    $user->setUserId(self::currentUserId());

    $data = new \model\dao\users($database);
    $user = $data->loadUser($user);

    return $user;
}
现在,我从哪里获得$database?虽然我可以在某些地方将类服务实例化为对象,然后从中获取信息,但也有一些地方我不能

我在考虑可能使用Zend的ServiceManager将一些东西连接到它中,但是我如何获得ServiceManager呢


潜在地,可以使用单例来创建一种标准对象配置、数据库等的全局容器?

我以前有过一次这个问题,但我通过将数据库库传递给我的视图来解决它!我有一个加载视图的调用,在$data数组中,它将被传递到适当的视图中,我将数据库和其他库放在其中

$data = array(
  'DATABASE' => &$this->db,
  'INPUT' => &$this->input
);

我试图传递变量的地址,这样过载就不会发生。

我以前有过一次这个问题,但我通过将数据库库传递给视图解决了这个问题!我有一个加载视图的调用,在$data数组中,它将被传递到适当的视图中,我将数据库和其他库放在其中

$data = array(
  'DATABASE' => &$this->db,
  'INPUT' => &$this->input
);

我试图传递变量的地址,这样重载就不会发生。

我想它可能会传递指向对象的指针,所以我把&。但不太确定:数据库适配器对象是我们真正想要传递给视图的对象吗?我想在我的HTML类中,我可以在它的构造函数中使用它,但它看起来很凌乱:/Shamil,我知道它凌乱,但我自己没有找到任何其他方法。我想它可能会将指针传递到对象,所以我把&。但不太确定:数据库适配器对象是我们真正想要传递给视图的对象吗?我想在我的HTML类中,我可以在它的构造函数中使用它,但它看起来很凌乱:/Shamil,我知道它很凌乱,但我自己没有找到任何其他方法。