我有一个config.php,结构与此类似
$config = array(
'database' => array(
'username' => '',
'password' => '',
'host' => '',
'database' => ''
),
'smtp' => array(
'host' => '',
'protocol' => '',
'username' => '',
'password' => ''
)
);
如何在类中动态创建方法来获取值?具有这种结构的东西:
class Config{
public function getDatabaseUsername(){}
public function getDatabasePassword(){}
.......
}
答案 0 :(得分:0)
在java中,IDE非常智能,可以为类属性生成getter和setter。我假设在某些IDE中也必须有相同的功能用于php。
可能你可以像这样写一个通用函数:
function getSystemconfig($innerArray,$key){
if(key_exists($innerArray,$config) && key_exists($key,$config[$innerArray])
return $config[$innerArray][$key];
}
您可以将其称为
getSystemconfig("database","username");
基本上检查密钥是否有效,它们是否存在于数组中,然后根据该密钥返回值。
答案 1 :(得分:0)
魔术方法是预定义的函数,允许您捕获对不存在的对象的访问权限,例如:
class Magic
{
public function __call($name, $arguments) {
if ($name === "hello") {
echo "Hello " . $arguments[0];
}
}
}
请注意"你好"不是已定义的函数,但它现在可以由$ magic对象调用。
$magic = new Magic();
$magic->hello("World");
结果
Hello World
因此,在您的示例中,您可以编写
class Config{
public function __call($name, $arguments) {
if ($name === "getDatabaseUsername") {
return $this->config["database"]["username"];
}
}
}
您还可以使用__get
魔术方法,它可以让您获得无法访问的属性。所以你可以写:
class Config{
public function __get($name) {
if ($name === "username") {
return $this->config["database"]["username"];
}
}
}
然后可以访问用户名,就像它是属性一样:
$config = new Config();
echo $config->username;