我有这样的事情:
class foo
{
//code
}
$var = new foo();
$var->newVariable = 1; // create foo->newVariable
$var->otherVariable = "hello, im a variable"; //create foo->otherVariable
我可以在类foo中获取用户定义的所有变量的列表(newVariable,otherVariable等)?像这样:
class foo
{
public function getUserDefined()
{
// code
}
}
$var = new foo();
$var->newVariable = 1; // create foo->newVariable
$var->otherVariable = "hello, im a variable"; //create foo->otherVariable
var_dump($var->getUserDefined()); // returns array ("newVariable","otherVariable");
谢谢!
答案 0 :(得分:2)
是的,使用get_object_vars()和get_class_vars():
class A {
var $hello = 'world';
}
$a = new A();
$a->another = 'variable';
echo var_dump(get_object_vars($a));
echo '<hr />';
// Then, you can strip off default properties using get_class_vars('A');
$b = get_object_vars($a);
$c = get_class_vars('A');
foreach ($b as $key => $value) {
if (!array_key_exists($key,$c)) echo $key . ' => ' . $value . '<br />';
}
答案 1 :(得分:0)
你的问题不明确。
$var->newVariable = 1;
上述表达式有两种可能的上下文
1)您正在访问类公共变量。
像
class foo
{
public $foo;
public function method()
{
//code
}
}
$obj_foo = new foo();
$obj_foo->foo = 'class variable';
或强>
定义类变量运行时class foo
{
public $foo;
public $array = array();
public function method()
{
//code
}
public function __get()
{
//some code
}
public function __set()
{
// some code
}
}
$obj_foo = new foo();
$obj_foo->bar= 'define class variable outside the class';
所以你的问题在哪个上下文中讨论?
答案 2 :(得分:0)
你的目标是什么? Imo这不是很好的练习(除非你真的知道你在做什么)。也许最好考虑创建一些像“$ parameters”这样的类属性,然后为此创建setter和getter并以这种方式使用它:
class foo {
private $variables;
public function addVariable($key, $value) {
$this->variables[$key] = $value;
}
public function getVariable($key) {
return $this->variables[$key];
}
public function hasVariable($key) {
return isset($this->variables[$key]);
}
(...)
}
$var = new foo();
$var->addVariable('newVariable', 1);
$var->addVariable('otherVariable', "hello, im a variable");
然后您可以随意使用它,例如获取定义的变量:
$var->getVariable('otherVariable');
检查是否已定义某些var:
$var->hasVariable('someVariable')
答案 3 :(得分:0)
get_class_vars()
http://php.net/manual/en/function.get-class-vars.php