PHP替换实体中的静态方法,最佳实践

时间:2016-07-20 19:07:43

标签: php static symfony php-7

EntityHelper::toPhpArray

鉴于上面的类,你如何删除静态调用$mixed假设new Entity可以通过PHPDoc块中的任何类型? (这只是我面临的一个问题的简化示例,我有一个功能可以采取"脏和清理")(我无法将其添加到实体,因为许多实体需要此功能并且不能使用此方法从Abstrart实体扩展,因为它们已经扩展了其他各种方法。)

我正在使用Symfony并在帮助程序中考虑DI,但是通过调用服务容器替换所有<script src="js/moment.js"></script> <script src="js/moment-timezone-with-data.min.js"></script> 将是一个糟糕(和缓慢)的想法。另一个想法是返回脏输出并使用服务来清理和过滤它但我也认为这是一个坏主意,因为当我认为它将实体的所有数据输入应用程序然后进入服务应该一次性发生并消除错误(也许是内存使用......)。

2 个答案:

答案 0 :(得分:1)

最佳解决方案取决于您的应用程序,但您可能使用的一种方法是将您的帮助程序代码放在特征中:

<?php

trait ArrayCleaner {

  public function toPhpArray($dataToFilter, $filterArray) {
     // ... your code here
  }
}

class Entity {
  use ArrayCleaner;

  /**
   * @var array|stdClass|Collection|string
   **/
  private $mixed;
  public function getMixedAsPhpArray(array $filter) {
    return $this->toPhpArray($this->mixed, $filter);
  }

}

http://php.net/manual/en/language.oop5.traits.php

答案 1 :(得分:1)

好吧,可以使用trait执行此操作。

trait EntityHelperTrait
{
    private function toPhpArray($value, $filter) {
        // body of method
    }
}

class Entity
{
    use EntityHelperTrait;

    /**
     * @var array|stdClass|Collection|string
     **/
    private $mixed;
    public function getMixedAsPhpArray(array $filter) {
        return $this->toPhpArray($this->mixed, $filter);
    }
}

但是基于你的(公认的简化)例子,你要混合责任。类型转换的工作本质上应该属于其他地方,而不是实体类本身。

我认为让Entity返回另一个组件的“脏”输出来过滤/清理/无论是完全没问题。