如果我們想從封裝的角度看它,我們需要考慮它。可以,如果一輛汽車知道一個人在裏面?也許我們需要一個採用這個參數的服務/控制器?
function processSomething(Person $person, Car $car) {}
但是你的例子並不糟糕。這取決於用例。它的行事方式,如果一輛汽車可能知道他的人。
如果你可以有多個個人,你可以有這樣的構造:
public function __construct(array $personList) {
//Check for a person
if (count($personList) < 1) {
throw new Exception('No person given');
}
//Validate list
foreach ($personList as $person) {
if (!$person instanceof Person) {
throw new Exception('This is not a person');
}
}
//Keep persons
$this->personList = $personList;
}
另外請注意,如果我們希望有多個對象在我們班,我們可以做出一個ContainerObject:
class ContainerObject {
public $person;
public $moreInfo;
public $manyMoreInfo;
}
class Person {
public function sayHello() {};
}
class Car {
private $containerObj;
function __construct(ContainerObject $obj) {
$this->containerObj= $obj;
}
function foo() {
$this->containerObj->person->sayHello();
}
}
這正是如何做到這一點。這個名稱是「依賴注入」,因此您將實例化對象傳遞給構造函數,而不是在需要它們的對象內實例化它們。你將它分配給'$ this-> person',這樣你就可以在內部像'$ this-> person-> name'那樣使用它 – 2014-12-04 18:57:25
你回答了你看到的問題,儘管你沒有在你的問題中真正談論過「問題標題中提到了很多「方面。 – 2014-12-04 19:04:23
@MichaelBerkowski會破壞Person封裝 – Weltschmerz 2014-12-04 19:23:20