在php类中,有一种使用函数定义变量的简单方法吗?

时间:2012-01-30 20:28:54

标签: php class variables

在我的班级中,我有一个像这样定义的数组

class t {
    var $settings = array();
}

我将使用这些设置相当多,所以我不想在所有地方编写$this->settings['setting'],而是想部署一个自动在局部变量中定义这些设置的函数。

private function get_settings () {

            $array = $this->settings['array'];
            $foreign_key = $this->settings['foreign_key'];
            $limit = $this->settings['limit'];
            $tableclassid = $this->settings['tableclassid'];
            $pager = $this->settings['pager'];
            $container = $this->settings['container'];
            $extracolumn = $this->settings['extracolumn'];
    }

现在,我想要做的是获取这些变量并在类中的另一个函数中使用它们。例如

public function test () {
     $this->get_settings();
     return $foreign_key;
}

我希望它返回$this->settings['foreign_key']

有没有办法做到这一点?或者我是否必须使用get_settings()具有的代码块来混淆所有函数?

我很感激帮助..谢谢:)。

3 个答案:

答案 0 :(得分:3)

使用内置的extract()函数,该函数将数组提取到当前范围内的各个变量中。

extract($this->settings);

如果您需要修改这些局部变量以反映在原始数组中,请将它们作为参考提取。

extract($this->settings, EXTR_REFS);

我不能说我宁愿自己使用这种方法,甚至建议你这样做。在类的内部,将它们保存在数组属性中更具可读性和可理解性。一般来说,我从未真正使用extract()

答案 1 :(得分:1)

将其作为财产传递。像这样:

$class = new T();

然后:

$class->getSettings('varname');

功能:

function get_settings($varname){
    return $this->settings[$varname];
}

或使用__get()重载功能:

public function __get($ name){     返回$ this->设置[$ name]; }

并称之为:

$ class-> varname;

(类中不存在的函数/变量,将被发送到get()重载函数

答案 2 :(得分:1)

您可以随时重载魔术功能:

<?php

class DynamicSettings
{
    /**
     * Stores the settings
     * @var array
     **/
    protected $settings = array();

    /**
     * Called when something like this: 
     *  $dynset->name = value;
     * is executed.
     **/
    public function __set($name, $value)
    {
        $this->settings[$name] = $value;
    }

    /**
     * Called when something like this: 
     *  $value = $dynset->name;
     * is executed.
     **/
    public function __get($name)
    {
        if (array_key_exists($name, $this->settings)) 
        {
            return $this->data[$name];
        }
        $trace = debug_backtrace();
        trigger_error('Undefined dynamic property ' . $name .
            ' in ' . $trace[0]['file'] .
            ' on line ' . $trace[0]['line'],
            E_USER_NOTICE);
        return null;
    }

    /**
     * Called when checking for variable existance
     **/
    public function __isset($name)
    {
        return isset($this->settings[$name]);
    }

    /**
     * Called when unsetting some value.
     **/
    public function __unset($name)
    {
        unset($this->settings[$name]);
    }

}

$dynset = new DynamicSettings();
$dynset->hello = "Hello "; // creates array key "hello" with value "Hello "
$dynset->world = "World!"; // creates array key "world" with value "World!"

echo $dynset->hello . $dynset->world; // outputs "Hello World!"

尝试扩展“DynamicSettings”类并立即将这些键用作类成员。