Php 如何将配置传递给数据库类
我有一个数据库类,我想在其中传递配置。我必须将“框架”和应用程序文件分开。 这是我的配置类Php 如何将配置传递给数据库类,php,oop,pdo,Php,Oop,Pdo,我有一个数据库类,我想在其中传递配置。我必须将“框架”和应用程序文件分开。 这是我的配置类 如果您排除了IOC和标准构造函数注入,那么您只能使用global$config(恶心)或将config设置为单例。我会选择后者。既然大家都知道单例和全局(是吗?)都是不好的做法,你建议我构建一个基本的IoC容器?我排除了保持一切简单的可能性,但如果这是我能实现它的最佳方法,那么坏的做法是主观的。我在php中看到的大多数IOC容器都用作服务定位器(许多人认为这是一种反模式)。由于php是一种无共享体系结构
如果您排除了IOC和标准构造函数注入,那么您只能使用global$config
(恶心)或将config设置为单例。我会选择后者。既然大家都知道单例和全局(是吗?)都是不好的做法,你建议我构建一个基本的IoC容器?我排除了保持一切简单的可能性,但如果这是我能实现它的最佳方法,那么坏的做法是主观的。我在php中看到的大多数IOC容器都用作服务定位器(许多人认为这是一种反模式)。由于php是一种无共享体系结构,构建整个依赖关系图并在合成根目录中更新所有这些对象的好处可能会在一定程度上被这样一个事实所抵消,即这必须在每次页面加载时完成,而这些对象中的大多数对于当前页面生命周期都是无用的。Imho单例完全适合配置类型的类,所以这将是单例的lecit用例?谢谢你,如果你的回复我可以接受,我会看一看。我倾向于使用两个非常不同的框架,Symphony2,它功能强大,但不容易学习,而且可能非常冗长,还有fatfreephp,它是一个非常实用、简单的框架。我更喜欢后者,但对于任何涉及开发团队的大型项目来说,symphony的刚性和代码库都非常出色。我建议你看看这两个,因为每一个都会教你一些东西。
<?php namespace Fzaffa\System;
class Config {
private $items = [];
public function get($name)
{
list($file, $key) = $this->parseName($name);
$this->includeIfNotCached($file);
$item = $this->parseItemToReturn($key, $file);
return $item;
}
/**
* @param $file
*/
private function includeIfNotCached($file)
{
if ( ! array_key_exists($file, $this->items))
{
$arr = include __DIR__ . '/App/Config/' . $file . '.php';
$this->items[$file] = $arr;
}
}
/**
* @param $name
* @return array
*/
private function parseName($name)
{
if (strpos($name, '.'))
{
list($file, $key) = explode('.', $name);
return [$file, $key];
}
return [$name, null];
}
/**
* @param $key
* @param $file
* @return mixed
*/
private function parseItemToReturn($key, $file)
{
if ($key)
{
return $this->items[$file][$key];
}
else
{
return $this->items[$file];
}
}
}
<?php namespace Fzaffa\System;
use PDO;
class Database {
private $host = 'localhost';
private $dbname = 'mycms';
private $user = 'homestead';
private $pass = 'secret';
private $dbh;
private $error;
private $statement;
public function __construct()
{
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ";charset=utf8";
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try
{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
} catch (PDOException $e)
{
$this->error = $e->getMessage();
}
}