2014-04-15 122 views
0

如果我有以下setter和getter方法:setter方法和構造方法有什麼區別?

<?php 
class Name{ 
protected $first ; 
public function setNameType($value) { 
    $this->first = $value; 
} 
public function getNameType() { 
    return $this->first; 
} 
} 

$name = new Name; 
$name->setNameType("My Name"); 
echo $name->getNameType(); 
?> 

像這樣

<?php 
class Name{ 
protected $first ; 
public function __construct($value) { 
    $this->first = $value; 
} 
public function getNameType() { 
    return $this->first; 
} 
} 

$name = new Name("My Name"); 
echo $name->getNameType(); 
?> 

的構建方法,我可以用兩個交替在任何時候或有情況下一個將是最優先於其他?

回答

1

一般來說,如果你的類不能存在或者沒有價值,那麼你會使用構造函數來設置值。如果允許改變該值,則添加一個setter。如果施工後永遠不應該改變,那麼不要添加setter。

0

一個例子代碼:

class Book { 

    public function __construct() { 

     $registry = RegistrySingleton::getInstance(); 
     $this->_database = $registry->database; 

     // or 

     global $databaseConnection; 
     $this->_database = $database; 
    } 

} 

class Book { 

    private $_databaseConnection; 

    public function __construct() { } 

    public function setDatabaseConnection($databaseConnection) { 
     $this->_databaseConnection = $databaseConnection; 
    } 

} 

$book = new Book(); 
$book->setDatabase($databaseConnection); 

$book = new Book($databaseConnection, $configFile); 

$book = new Book(); 
$book->setDatabase($databaseConnection); 
$book->setConfigFile($configFile); 

class Container { 

    public static $_database; 

    public static function makeBook() { 

     $book = new Book(); 
     $book->setDatabase(self::$_database); 
     // more injection... 

     return $book; 
    } 

} 

然後:

$book = Container::makeBook(); 
相關問題