动态创建方法

时间:2016-09-20 10:25:37

标签: php oop

我有一个config.php,结构与此类似

$config = array(
'database' => array(
    'username' => '',
    'password' => '',
    'host' => '',
    'database' => ''
),
'smtp' => array(
    'host' => '',
    'protocol' => '',
    'username' => '',
    'password' => ''
)
);

如何在类中动态创建方法来获取值?具有这种结构的东西:

class Config{
    public function getDatabaseUsername(){}
    public function getDatabasePassword(){}
    .......
}

2 个答案:

答案 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)

您可以使用魔术方法__call__get

__呼叫

魔术方法是预定义的函数,允许您捕获对不存在的对象的访问权限,例如:

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;