【发布时间】:2010-11-05 10:52:43
【问题描述】:
有没有一种方法可以创建一个包含类中所有公共变量的数组,而无需在 PHP5 中手动添加它们?
我正在寻找在一个类中顺序设置一组变量的最快方法
【问题讨论】:
有没有一种方法可以创建一个包含类中所有公共变量的数组,而无需在 PHP5 中手动添加它们?
我正在寻找在一个类中顺序设置一组变量的最快方法
【问题讨论】:
【讨论】:
get_class_vars() 是显而易见的 - 请参阅 PHP 网站上的 get_class_vars 文档。
编辑:使用此功能的设置示例:
$foo = new Foo();
$properties = get_class_vars("Foo");
foreach ($vars as $property)
{
$foo->{$property} = "some value";
}
您还可以使用反射 API - 来自 PHP docs:
<?php
class Foo {
public $foo = 1;
protected $bar = 2;
private $baz = 3;
}
$foo = new Foo();
$reflect = new ReflectionClass($foo);
$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
foreach ($props as $prop) {
print $prop->getName() . "\n";
}
var_dump($props);
?>
...示例直接取自上面链接的 PHP 文档,但为了您的目的进行了调整以仅检索公共属性。您可以根据需要过滤公共、受保护等。
这将返回一个ReflectionProperty 对象数组,其中包含适当的名称和类。
编辑:使用上述$props数组的设置示例:
$props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC);
foreach ($props as $prop)
{
$foo->{$prop->getName()} = "some value";
}
【讨论】:
看看 PHP 的Reflection API。您可以通过ReflectionClass::getProperties 获取属性。
要设置属性,请执行以下操作:
$propToSet = 'somePropName';
$obj->{$propToSet} = "newValue";
【讨论】:
试试get_class_vars($obj);
【讨论】: