php - 检测对象属性是否在 PHP 中是私有(private)的

标签 php oop properties

我正在尝试创建一个 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/

相关文章:

php - 使用 Zend_Db_Expr 选择 Zend DB

php - 查询未在PHP中使用MySQL执行

无法使用 ip :port via network cable 访问内置网络服务器的 php

c# - 将属性传递给 C# 中的方法

java - 在java中为Properties.load定义动态分隔符

php - SQL 准备语句 (PHP)

c++ - 如何在不需要对其他文件进行多次更改的情况下处理派生类的多个重载

r - 当 `methods` 失败时,如何判断函数调用正在使用什么方法?

python - 我如何处理部分初始化的类

ios - 如何从 AppDelegate.m 访问一些实例类变量