【发布时间】:2021-08-22 19:55:32
【问题描述】:
我有一个设置数组,其中包含不变的配置值,需要在各种类中使用这些值。
$settings = ['foo' => 'bar', 'license_id' => '12345'];
目前,我正在使用一个静态类,每当我需要一个类中的配置值时,我都会这样做:
$this->global_config = MyClass::get_global_config_array();
if ( $this->global_config['license_id'] ) do this . . .
除了使用全局、依赖注入或单例类之外,还有其他方法吗?我多次调用 MyClass::get_global_config_array() 并正在寻找一种更高效的方法。
仅供参考:我是 OOP 的新手,但不是程序性的。
class Settings() {
public static function global_config_array() {
$settings = ['foo' => 'bar', 'license_id' => '12345'];
return $settings;
}
}
class Render_Setup_Page() {
public function __construct() {
$this->global_settings = Settings::global_config_array();
}
public function check_license() {
if ( $this->global_settings['license_id'] ) do this . . .
}
}
class Render_Profile_page() {
public function __construct() {
$this->global_settings = Settings::global_config_array();
}
public function user_info() {
ret 'first name: ' . $this->global_settings['foo'] );
}
}
更新:
向此请求添加更多内容。我正在构建一个 WordPress 插件,它的插件设置分为三种类型:静态、动态和主题定制器。
我将这三个合并到一个全局设置数组中,并将该数组传递给几个函数。将它们放在一个数组中可以消除大量数据调用。尤其是在主题模板中。
根据@miken32 的建议使用 trait,我想出了以下示例:
trait Global_Settings {
private array $static = [
"foo" => "bar",
"license_id" => "12345"
];
private array $dynamic = [
'plugin_build' => '73686572726965206',
'plugin_version' => '1.0.0',
'plugin_prefix' => 'xyx',
];
private array $customizer = [
'plugin_123' => 'hello',
'plugin_456' => 'there',
];
private function get_static_settings() {
return $this->static;
}
private function get_dynamic_settings() {
return $this->dynamic;
}
private function get_customizer_settings() {
return $this->customizer;
}
private function global_settings() {
return array_merge(
$this->static,
$this->dynamic,
$this->customizer,
);
}
}
class Do_Something {
use Global_Settings;
public function render_something() {
error_log( print_r($this->get_dynamic_settings(), TRUE) );
error_log( print_r($this->get_static_settings(), TRUE) );
error_log( print_r($this->get_customizer_settings(), TRUE) );
error_log( print_r($this->global_settings(), TRUE) );
// Get a specific settings array.
$output = 'Your' . $this->get_dynamic_settings['foo'] . ' license is: ' . $this->get_dynamic_settings['license_id'];
// Or get all of them at once.
extract( $this->global_settings );
$output = $plugin_123 . ' your' . $foo . ' license is: ' . $license_id . ' for version ' . $plugin_version;
return $output;
}
}
$obj = new Do_Something();
$obj->render_something();
我的后续问题是如何将另一个具有设置数组的类的结果分配给特征 Global_Settings 中的 $static 属性?
class Static_Array {
public array() {
return [
"foo" => "bar",
"license_id" => "12345"
];
}
}
【问题讨论】:
标签: php class oop dependency-injection singleton