Просто мое предпочтительное решение, даже если другие уже все объясняют: инъекция
class A {
public $a;
public function __construct (ErrorVO $a) {
$this->a = $a;
}
}
Это делает класс тестируемым и позволяет легко заменить желаемое ErrorVO
-внедрение. Конечно, вы можете объединить оба решения в одно
class A {
public $a;
public function __construct (ErrorVO $a = null) {
$this->a = is_null($a) ? new ErrorVO : $a;
}
}
Незначительное обновление: тем временем вы можете написать второй пример, подобный этому
class A {
public $a;
public function __construct (ErrorVO $a = null) {
$this->a = $a ?: new ErrorVO;
}
}
Это немного более компактно, и, следовательно, оно делает намерение более ясным. Сравните ?:
-оператор с MySQLs COALESCE