PHP取代实体中的静态方法,最佳实践

PHP取代实体中的静态方法,最佳实践,php,static,symfony,php-7,Php,Static,Symfony,Php 7,最佳解决方案取决于您的应用程序,但您可以使用的一种方法是将帮助程序代码放入一个特性中: <?php class Entity { /** * @var array|stdClass|Collection|string **/ private $mixed; public function getMixedAsPhpArray(array $filter) { return EntityHelper::toPhpArray($thi

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

<?php
class Entity {
    /**
     * @var array|stdClass|Collection|string
     **/
    private $mixed;
    public function getMixedAsPhpArray(array $filter) {
        return EntityHelper::toPhpArray($this->mixed, $filter);
    }
}
好吧,你可以用

但根据你的(公认简化的)例子,你把责任混为一谈。类型转换的工作(本质上就是这样)应该属于其他地方,而不是烘焙到实体类本身中


我认为让实体返回另一个组件的“脏”输出以进行筛选/清理/任何操作都可以。

为什么要删除它。让它保持内部状态,但确保该方法包含了单元测试。我也想到了这一点,但在我记得这篇文章时,我认为它没有任何改进。TL:DR;Traits是以
$this
作为神奇参数的静态方法。哦,我同意,如果可以的话,我通常会避免性格特征。这就是为什么我还说可以从实体返回数据并使用其他东西进行转换。你可以考虑像命令总线或流水线之类的东西来获得良好的解耦。
<?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);
  }

}
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);
    }
}