- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在搜索和阅读大量关于如何在 PHP 环境中获取应用程序的配置变量的最佳方法(代码方面)的内容。之后我总结了两种更常用的配置文件和变量管理方式。
但我对此有点困惑,其中一个方法 1 正在使用静态类。另一种方法 2 是使用可实例化类。
第一个单元测试比第二个更糟糕。它类似于全局变量。不是吗?
第二个需要一个全局变量才能使用实例化对象。
我会尽力解释一下。
事实: - 应用程序的设置保存在 INI 文件中。 - 此 INI 文件有多个部分,以便维护配置变量。 - 我只有一个 INI 文件。 - 类对配置文件进行一些验证。 - 下面的代码示例并不完整,它只是一个示例来说明我的问题。
此方法使用一个 Config 静态类,它使用静态是因为所有应用程序中只会使用一个 Config 对象。
代码示例:
class Config
{
static private $data;
static public function load($configFile) {
self::$data = parse_ini_file($configFile, true, INI_SCANNER_RAW)
}
static public get($key) {
// code stuff to deal with sections and keys, but basically
return self::$data[$key];
}
}
在我的应用程序中,我使用以下代码创建静态对象一次:
\Config::load('/where/is/my/ini/file.ini');
在这种情况下,每次我想获取一个值时,我都会使用:
$host = \Config::get('database.host');
function example()
{
echo \Config::get('another.value');
}
在此场景中,我使用Config 类对象。
代码示例:
class Config {
private $data = array();
public function __construct($configFile) {
$this->data = parse_ini_file($configFile, true, INI_SCANNER_RAW)
}
public function get($key) {
// code stuff to deal with sections and keys, but basically
return $this->data[$key];
}
public function __get($key) {
return $this->get($key);
}
}
要使用它,首先我们需要实例化一个对象,然后获取值:
$settings = new \Config('/where/is/my/ini/file.ini');
$host = $settings->get('database.host');
echo $settings->database->host;
但是当我在函数中需要这个值时,我需要使用全局变量,我认为这根本不正确:
global $settings;
$settings = new \Config('/where/is/my/ini/file.ini');
function example()
{
global $settings;
echo $settings->get('another.value');
}
我怀念领导什么?
预先感谢您阅读并回答我的问题。
最佳答案
简单地说,您也可以使用 php
文件来保存您的配置,例如 config.php
,然后您可以从任何地方使用 require
获取它:
// config.php
<?php
return array(
'database' => 'mysql',
'pagination' => array(
'per_page' => 10
)
);
然后使用:
$config = require "path/to/config.php";
print_r($config);
您也可以将其与函数一起使用,例如:
function someFunc()
{
$config = require "path/to/config.php";
// Now use it
}
您可以创建一个类来使用以下方法获取配置:
class Config {
static function get()
{
$config = require "path/to/config.php";
return $config;
}
}
所以你可以使用:
$config = Config::get();
这只是另一个简单的想法,您可以扩展它以使用它,例如:
$perPage = Config::get('pagination.per_page');
只需添加一些代码即可使其像这样工作,尝试一下。
顺便说一句,我构建了一个名为 IConfig 的包对于我在 2013
时自己的 MVC 框架
,它也可以在 Packagist 上找到。 。您可以使用它或检查它的源代码,也许您会得到更好的想法并可以构建一个更好的。但网络上可能还有很多更好的。
关于php - 在 PHP 应用程序中获取配置变量的最佳方法(编码方式)是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516134/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!