在PHP OOP方法中,我应该在一个类中设置初始值?

时间:2017-11-28 12:12:34

标签: php oop

声明属性时,可以为属性设置初始值。这是一个好习惯还是应该在构造函数中进行?或者,只要我一直在各地做同样的事情,它是否真的无关紧要?

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

class ClassA{
    private $propertyA;

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

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

    public function __construct(){
    }
}

2 个答案:

答案 0 :(得分:0)

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

class Foo {
    private $bar;

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

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

如果您确实需要在类中设置特定值,则应将它们分配给protected参数,但是这些值通过常量别名。

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

答案 1 :(得分:-3)

你可以使用php魔术方法__get和__set。

<?php
class MyClass {
    private $firstField;
    private $secondField;

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

    public function __set($property, $value) {
        if (property_exists($this, $property)) {
            $this->$property = $value;
        }
        return $this;
    }
}
?>