我正在尝试创建一个 PHP (5) 对象,该对象可以遍历其属性,仅基于其公共(public)属性而非私有(private)属性构建 SQL 查询。
由于这个父对象方法是给子对象使用的,所以我不能简单地选择按名称跳过私有(private)属性(我不知道它们在子对象中是什么)。
是否有一种简单的方法可以从对象中检测其哪些属性是私有(private)的?
这是迄今为止我得到的一个简化示例,但此输出包含 $bar 的值:
class testClass {
public $foo = 'foo';
public $fee = 'fee';
public $fum = 'fum';
private $bar = 'bar';
function makeString()
{
$string = "";
foreach($this as $field => $val) {
$string.= " property '".$field."' = '".$val."' <br/>";
}
return $string;
}
}
$test = new testClass();
echo $test->makeString();
给出输出:
property 'foo' = 'foo'
property 'fee' = 'fee'
property 'fum' = 'fum'
property 'bar' = 'bar'
我希望它不包含“bar”。
如果有更好的方法来遍历对象的公共(public)属性,那么这里也可以。
最佳答案
检查来自 http://php.net/manual/reflectionclass.getproperties.php#93984 的代码
public function listProperties() {
$reflect = new ReflectionObject($this);
foreach ($reflect->getProperties(ReflectionProperty::IS_PUBLIC /* + ReflectionProperty::IS_PROTECTED*/) as $prop) {
print $prop->getName() . "\n";
}
}
关于php - 检测对象属性是否在 PHP 中是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2821927/