Question

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 ?

Was it helpful?

Solution

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

OTHER TIPS

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();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top