在我的班级中,我有一个像这样定义的数组
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()具有的代码块来混淆所有函数?
我很感激帮助..谢谢:)。
答案 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”类并立即将这些键用作类成员。