【问题标题】:In PHP OOP approach where should I set initial values in a class?在 PHP OOP 方法中,我应该在哪里设置类的初始值?
【发布时间】:2017-11-28 12:12:33
【问题描述】:

在声明属性时可以为属性设置初始值。这是一个好习惯还是我应该在构造函数中这样做?或者,只要我在任何地方始终如一地做同样的事情,这并不重要?

为了清楚起见,我在说什么,这里是一个例子:

class ClassA{
    private $propertyA;

    public function __construct(){
         $this->propertyA = "value: A";
    }
}

class ClassB{
    private $propertyB = "value: B";

    public function __construct(){
    }
}

【问题讨论】:

  • 在创建该类的任何对象时,始终在constructor bcoz 中设置初始值,然后使用默认值自动初始化变量...
  • 如果是纯静态赋值,在属性定义中设置;如果它们依赖于运行时信息,或者基于传递给构造函数的参数,则在构造函数中设置它们
  • 我不同意@YashParekh,你可以看看流行的库,看看属性是在正文中设置的,而不是在 __cosnstruct() 中设置的。
  • 我也肯定会选择第二个变体。恕我直言,它更干净,而且它对 phpDocumentor 等文档解析工具有意义。

标签: php oop


【解决方案1】:

为了不违反OCP,定义初始值的最简单方法是在构造函数中作为“默认”值:

class Foo {
    private $bar;

    public function __construct(string $bar = 'default') {
        $this->bar = $bar;
    }
}

其他可行的方法是在工厂或(更有可能)DI 容器的配置中定义。通过这些选项,您还可以使用单独的 setter 来分配那些预定义的 默认值

如果你真的需要在一个类中设置特定的值,你应该将它们分配给protected 参数,但这些值通过常量来别名。

这样您就可以通过扩展基类来覆盖它们。并且常量将允许您(如果没有其他方法)不仅在单个类中而且在整个代码库中更改默认值的特定值。

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 2021-01-29
    • 2011-02-12
    • 2021-04-18
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多