【问题标题】:What is the difference between setter methods and construct methods?设置方法和构造方法有什么区别?
【发布时间】:2014-05-30 03:52:34
【问题描述】:

如果我在下面有一个 setter 和 getter 方法:

<?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();
?>

我可以随时交替使用这两者吗?还是在某些情况下,其中一种会比另一种更受青睐?

【问题讨论】:

    标签: php oop methods constructor setter


    【解决方案1】:

    您的问题也有一些很好的解释:http://www.potstuck.com/2009/01/08/php-dependency-injection/

    【讨论】:

      【解决方案2】:

      试试这个网站。它通过示例解释了所有内容。 http://ralphschindler.com/2012/03/09/php-constructor-best-practices-and-the-prototype-pattern

      【讨论】:

        【解决方案3】:

        一般来说,如果你的类不能存在或者没有值就没有意义,你会使用构造函数来设置值。如果允许更改该值,则添加一个 setter。如果在构造后永远不应该更改它,则不要添加 setter。

        【讨论】:

          【解决方案4】:

          示例代码:

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

          【讨论】:

            猜你喜欢
            • 2019-10-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-02
            • 1970-01-01
            • 2012-11-03
            • 2017-03-30
            相关资源
            最近更新 更多