سؤال

If I have a setter and getter methods below :

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

and a construct method like this

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

Can I use the two interchangeably at all times or is there situations where one will be most prefered over the other ?

هل كانت مفيدة؟

المحلول

There is also some great explaination about your question: http://www.potstuck.com/2009/01/08/php-dependency-injection/

نصائح أخرى

Generally you would use constructors to set values if your class cannot exist or doesn't make sense without the value. If the value is allowed to be changed, than add a setter. If it should never be changed after construction, then don't add a setter.

An example code:

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;
    }

}

And then:

$book = Container::makeBook();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top