我在这里有点困惑,我在谷歌上找到的所有例子都是用其他语言编写的,我更加困惑。
我应该定义我的方法来获取参数或直接使用类的属性吗?
我确信一个例子会有所帮助:
使用接收参数的方法分类
class distance {
public function kilometersToMeters($kilometers) {
return $kilometers * 1000;
}
}
$obj = new distance();
echo $obj->kilometersToMeters(4);
使用该方法直接处理类
的类的类class distance {
private $kilometers;
public function __construct($kilometers) {
$this->kilometers = $kilometers;
}
public function kilometerToMeters() {
return $this->kilometers * 1000;
}
}
$obj = new distance(4);
echo $obj->kilometerToMeters();
答案 0 :(得分:0)
这实际上取决于您尝试建模的对象类型。如果您正在构建距离计算器服务,其唯一目的是在距离之间进行转换,那么您可以使用第一种方法,因为您的对象不会有任何状态,只有行为。
如果要对具有状态和行为的对象建模,则第二种形式更合适,因为您可以使用必填字段初始化对象,并验证构造中的对象。例如:
<?php
class Person {
private $fullName;
private $dateOfBirth;
public function __construct($fullName, $dateOfBirth) {
$this->checkInitializationVariables($fullName, $dateOfBirth);
$this->fullName = $fullName;
$this->dateOfBirth = $dateOfBirth;
}
public function getAge() {
// calculate and return based on current date
}
public function getAgeAtDate($dateToCompare) {
// calculate and return based on given date
}
private function checkInitializationVariables($fullName, $dateOfBirth) {
if (empty($fullName)) {
throw new Exception('Person must have a name.');
}
if (empty($dateOfBirth)) {
throw new Exception('Person must have a date of birth.');
}
}
}
$person = new Person("John Doe", "01/01/2000");
echo $person->getAge();
echo $person->getAgeAtDate("01/01/2030");
现在你有一个具有状态(名称和生日)和行为(返回年龄)的对象。您还需要检查初始化,以确保您的对象在创建时有效。