PHP只在对象数组中检索对象的getter方法一次

时间:2016-06-01 07:44:34

标签: php oop object

我有20个对象的数组都是一样的。这些对象都是相同的,包含一些属性和一些getter和setter。我将属性数据转换为HTML表格,如下所示:

=SUM(A2:A6)-SUMIF(C2:C10,"Yes",B2:B10)

我遍历我的对象数组,然后我得到每个对象的所有方法,我只过滤了getter(使用strpos)。该功能有效,但检索所有对象方法是浪费时间。我能想到的解决方案是获取第一个对象并检索其所有方法(getter)并在我的addBody函数中使用它。

这会是一个更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

检查一下:

public function addBody($objects) {
    $ret = '';
    $obectMethods = get_class_methods(current($objects));
    $methods = array_filter($obectMethods, function($method) {
        return strpos($method, 'get') !== false;
    });

    foreach($objects as $object) {
        $ret .= '<tr>';

        foreach($methods as $method) {
            $ret .= '<td>' . call_user_func(array($object, $method)) . '</td>';
        }

        $ret .= '</tr>';
    }

    return $ret;
}

首先,我们从第一个对象中检索方法,并在foreach循环中使用它们。

答案 1 :(得分:0)

我不确定你的定义是否更好,但确定还有另外一个...更少的代码和一个getter访问任何属性为您的具体情况。

我们简单的实体:

class myEntity {
   private $name;
   private $age;

   public function __get($property) {
      if (property_exists($this, $property)) {
         return $this->$property;
      }
      return null;
   }
}

然后在你的方法中:

public function addBody($entities, $properties) {        
    $ret = '';

    foreach($entities as $entity) {
        $ret .= '<tr>';
        foreach($properties as $property) {
           $ret .= '<td>' . $entity->__get($property) . '</td>';
        }
        $ret .= '</tr>';
    }

    return $ret;
}

你有一个实体列表:

$entities = array ( new myEntity(), new myEntity()); 
$properties = array ('name', 'age');

var_dump($object->addBody($entities, $properties));