声明属性时,可以为属性设置初始值。这是一个好习惯还是应该在构造函数中进行?或者,只要我一直在各地做同样的事情,它是否真的无关紧要?
为了说清楚,我在说什么,这是一个例子:
class ClassA{
private $propertyA;
public function __construct(){
$this->propertyA = "value: A";
}
}
或
class ClassB{
private $propertyB = "value: B";
public function __construct(){
}
}
答案 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;
}
}
?>