2015-10-18 34 views
2

我在這裏有點困惑,我在Google上發現的所有例子都是在其他語言中,我感到更加困惑。類方法:何時傳遞參數以及何時使用屬性?

我應該定義我的方法來獲取參數還是直接使用類的屬性?

我相信一個例子可以幫助:

類與方法接收參數

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"); 

現在你必須具有狀態(姓名和生日)和行爲(返回歲)的對象。您還需要在初始化時進行檢查,以確保您的對象在創建時有效。

相關問題