2012-08-23 133 views
3

會更有意義在下列情況下,以創建一個新的對象類型,而不是使用數組:使用對象而不是數組

我有一個簡單的結構有兩個值:名稱&年齡

$ages = array(
    array(
     'name' => 'bill', 
     'age' => 22 
    ), 
    array(
     'name' => 'bob', 
     'age' => 50 
    ), 
    // etc 
); 

問題是這個結構是在一個類中生成的,然後通過一個控制器,然後在另一個類中使用。

因此,感覺就像這兩個類綁定在一起,因爲必須知道在另一箇中生成的此結構的數組鍵。

有沒有解決這個問題的設計模式?

回答

0

由於它是一個簡單的結構,您可以使用它,但一般建議使用對象。如果你要在將來添加字段,添加水平(嵌套數組) - 爲你的程序將更加模塊化,減少耦合,容易維護:

// I - easier to use 
$bill_age = $ages->get_age('bill'); 
// function get_age() is implemented in the class which 
// makes you code easier to maintain and easier to understand 

// II - this implementation is dependent on the structure of $ages 
// if you'll change $ages - you'll have to change all the uses: 
$bill_arr = $ages[0]; 
$bill_age = $bill_arr['age']; 

而且,如果你有在代碼中的不同位置調用II,更改$ages結構將導致更改所有這些位置,而如果實施I - 代碼中只有一個位置需要更改(在類內執行get_age($name))。

1

我不認爲你需要(即使有)設計模式來生成一個類中的對象/數據結構,並在另一個類中使用它。這是與課程合作的基本前提。另外,正如alfasin提到的,處理對象比數組更好。同樣在未來,如果出現這種需求,您可以與其他對象進行更好的交互。

1

我會一路走下去,定義一個Person模型類。事情是這樣的

Class Person { 

    protected _age; 

    protected _name; 


    public function __construct($name = null, $age = null) { 
    if ($name) setName($name); 
    if ($age) setAge($age); 
    } 

    public function getName() { 
    return $this->_name; 
    } 

    public function setName($name) { 
    return $this->_name = (string) $name; 
    } 

    public function getAge() { 
    return $this->_age; 
    } 

    public function setAge($age) { 
    return $this->_age = (int) $age; 
    } 
} 

然後,您可以使用這個類來創建你的數據結構如下:

$persons = array(new Person('bill', 22),new Person('bob', 50)); 

這個數組就可以通過你的控制器傳遞,並在視圖中使用這樣的:

foreach($persons as $person) { 
    echo $person->getName(); 
    echo $person->getAge(); 
} 

這種設計模式被稱爲MVC(模型視圖控制器),非常流行和有據可查,雖然解釋我不同。

對於簡單的結構,這可能看起來過於誇張,但在將來需要擴展代碼時,這會爲您節省大量時間。

(代碼沒有測試,但我認爲它應該只是罰款)

+0

這不是MVC,因爲你可能有一個模型(數據),但沒有'view'(可以說因爲你可以把用法看作'view'),當然也沒有'controller'。 – alfasin

0

我認爲你可以有一個類將包含鍵爲這個結構,然後這兩個班將分享這一類獲取關鍵實例。 這樣你就不必跟蹤兩個類中的鍵。而且,無論何時,您都可以在此處添加更多的按鍵而無需進行任何更改。更少的耦合和更多的靈活性。

相關問題