我一直在环顾四周,无法独自解决这个问题,所以我试图将问题外包出去。
我的问题是,我是使用类将键值对存储为数组(配置数据)
<?php
class Config {
protected static $config = [];
private function __construct() {}
public static function init($a) {
self::$config = $a;
}
public static function get($key) {
print self::$config[$key];
}
}
Config::init([
'username' => 'root',
'password' => 'password',
'database_host' => [
'sql' => '3306',
'oracle' => '1521',
]
]);
我遇到的问题是,我无法找到返回database_host->sql
编辑:经过一些编辑后,我不情愿地将private static $config = [];
更改为public static $config = [];
。通过这样做,我已经能够在我的文档中使用Config::$config
函数和变量。到目前为止我所拥有的内容非常简单,只需检查变量的值是否符合我的要求:
<?php
class Config {
public static $config = [];
private function __construct() {}
public static function set($key, $val) {
self::$config[$key] = $val;
}
public static function get($key) {
print self::$config[$key];
}
public static function init($a) {
self::$config = $a;
}
public static function update($a) {
self::$config = array_merge(self::$config, $a);
}
}
Config::init([
'username' => 'root',
'password' => 'RandomPassword1',
'account_type' => [
'admin' => 1,
'mod' => 0,
'user' => 0,
]
]);
# Meat 'n Potatoes
$account_type = Config::$config['account_type']['admin']; # Check for admin
if($account_type = 1) {
# Do admin stuff
} else {
echo 'Sorry! You can\'t do that because you\'re not an admin!';
}
?>
截至目前,我对此功能的方式非常满意,但是,我无法正确使用isset()
$account_type
和此脚本,无论出于何种原因始终< / strong>返回$account_type = 1
为真,即使它设置为0
。
答案 0 :(得分:0)
听起来你在get方法或类似的东西上使用了“isset”。 IE if (isset(MyClass::get("stuff"))
你不能在函数调用上使用isset
(在那种情况下会检查什么?)。
但是,您可以在函数中构建isset检查。
<?php
class Config {
protected static $config = [];
private function __construct() {}
public static function init($a) {
self::$config = $a;
}
public static function get($param) {
// Check if its a data value.
if (isset(self::$config[$param])) {
return self::$config[$param];
}
trigger_error('Undefined property: ' . $param .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}
}
Config::init([
'username' => 'root',
'password' => 'password',
'database_host' => [
'sql' => '3306',
'oracle' => '1521',
]
]);
if (Config::get("database_host") != null) {
var_dump(Config::get("database_host"));
}
修改强> 你还可以使用一些神奇的方法做一些你想要做的事情。
<?php
class Config {
protected static $config = [];
public static $instance = "";
public function __construct() {}
public static function init($a) {
self::$config = $a;
self::$instance = new Config();
}
public function __get($param) {
// Check if its a data value.
if (isset(self::$config[$param])) {
return self::$config[$param];
}
trigger_error('Undefined property: ' . $param .
' in ' . $trace[0]['file'] .
' on line ' . $trace[0]['line'],
E_USER_NOTICE);
return null;
}
public function __isset($param) {
if (isset(self::$config[$param])) {
return true;
}
return false;
}
}
Config::init([
'username' => 'root',
'password' => 'password',
'database_host' => [
'sql' => '3306',
'oracle' => '1521',
]
]);
if (isset(Config::$instance->database_host)) {
var_dump(Config::$instance->database_host);
}