在TrainBoardingCard中我们有setTrainCode可以在构造函数中使用$ this-> trainCode = $ trainCode,或者我们总是使用setTrainCode,如$ this-> setTrainCode($ trainCode);因为它将来可能有一些逻辑。
对于这两种情况有哪些优点和缺点?请原因告诉我们您的偏好。
class TrainBoardingCard extends BoardingCard
{
/**
* @var string
*/
private $trainCode;
/**
* @param string $trainCode
*/
public function __construct(string $trainCode)
{
$this->trainCode = $trainCode;
}
/**
* @return string
*/
public function getTrainCode(): string
{
return $this->trainCode;
}
/**
* @param string $trainCode
*/
public function setTrainCode(string $trainCode)
{
$this->trainCode = $trainCode;
}
}
答案 0 :(得分:1)
取决于。
你可以说有两种不同的思想流派,它们都兼顾了二者和构造者。
必须创建对象已经有效的状态。可以通过原子操作将该状态从一个有效状态更改为另一个有效状态。这意味着,您的类实际上并没有简单的setter本身。
$client = new Client(
new FullName($name, $surname),
new Country($country);
new Address($city, street, $number));
// do something
$client->changeLocation(
new Country('UK'),
new Address('London', 'Downing St.', '10'));
构造函数仅用于传递依赖关系而不传递状态。默认情况下,对象的状态为空,只能通过外部使用setter进行更改。
$client new Client();
$client->setId(14);
$mapper = new DataMapper(new PDO('...'), $config);
$mapper->fetch($client);
if ($client->getCity() === 'Berlin') {
$client->setCity('London');
$mapper->store($client);
}
或者你可以混合或两者兼而有之,但这会引起一些混乱。
不确定这是否会让你更好或更糟:)