从公共静态函数数组中获取索引值

时间:2014-02-12 03:49:14

标签: php function static

我一直在环顾四周,无法独自解决这个问题,所以我试图将问题外包出去。

我的问题是,我是使用类将键值对存储为数组(配置数据)

<?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

1 个答案:

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