Vos deux exemples peuvent en effet sembler équivalents, mais à partir d'une seule perspective (la vôtre, maintenant).
class Person { // First case : using the constructor
public function __construct($person) {
echo $person;
}
}
// ----------------------------------------------------------------
$person = new Person('Name');
Dans cet exemple, vous faites très clairement que chaque objet de la classe Person
(ou un de ses sous-classes) doit donner un nom dès sa création. Il n'y aura jamais de Person
sans nom, à n'importe quel moment. C'est une contrainte de conception que vous choisissez de vous imposer (si vous avez l'intention de créer des objets de classe Person
) ou d'autres, dans le cas où vous partagez votre code d'une manière ou d'une autre. Si l'on tente de violer cette contrainte, PHP va se bloquer avec un message d'erreur/d'avertissement explicite. (Demo: https://3v4l.org/hCXZ8)
class Person { // Second case : no constructor (equivalent to an empty constructor)
public function name($name) {
echo $name;
}
}
// ----------------------------------------------------------------
$person = new Person();
$person->name('Name');
Ceci est une bête différente: vous pouvez créer un objet de classe Person
, et vous pouvez afficher un nom. Vous pouvez également créer un Person
et ne jamais afficher un nom du tout. Vous ne savez peut-être même pas que vous le pouvez, en fait, si vous ne regardez pas le code de classe pour une raison quelconque (il est courant de donner à chaque classe un fichier distinct).
Dans les deux exemples que j'ai dessiné une ligne de commentaire entre la déclaration de classe et de l'utilisation, parce que ce sont deux points de vue différents (pensent qu'ils peuvent même être deux personnes différentes qui ne peuvent pas communiquer entre eux). En tant qu'auteur de classe, vous traduisez précisément vos contraintes dans le code le plus explicite que vous puissiez produire. En tant qu'utilisateur de la classe, vous ne voulez pas perdre de temps à comprendre les subtilités de la classe que vous utilisez: vous souhaitez créer des objets avec une complexité minimale, tirer parti de la fonctionnalité avec un minimum de surcharge et d'apprentissage. et les affaires.
Manuel: [constructeurs et destructeurs] (http://php.net/manual/fr/language.oop5.decon.php) –
constructeur définit simplement le premier comportement requis lors de la création de l'objet – Kazz
Vous ne pouvez pas voir la différence ?! L'un transmet l'argument au moment de la construction, l'autre à une autre méthode d'instance plus tard. Assez nette différence IMO. Vous pourriez vouloir clarifier pourquoi vous pensez que ce n'est pas différent. – deceze