209 votes

à quoi sert la fonction __construct?

J'ai remarqué __construct beaucoup de cours. J'ai lu et surfé un peu sur le Web, mais je n'ai pas trouvé d'explication que je puisse comprendre. Je ne fais que commencer avec OOP.

Je me demandais si quelqu'un pourrait me donner un général ce que c'est, et ensuite un exemple simple de la façon dont il est utilisé avec php?

Merci,
Levi

308voto

Jan Hančič Points 19496

"__Construct" a été introduit en PHP5 et c'est la bonne manière de définir votre, bien, les constructeurs (en PHP4 vous avez utilisé le nom de la classe pour un constructeur). Vous n'êtes pas obligé de définir un constructeur dans votre classe, mais si vous souhaitez passer des paramètres sur la construction de l'objet, puis vous en avez besoin.

Un exemple pourrait aller comme ceci:

class Database {
  protected $userName;
  protected $password;
  protected $dbName;

  public function __construct ( $UserName, $Password, $DbName ) {
    $this->userName = $UserName;
    $this->password = $Password;
    $this->dbName = $DbName;
  }
}

// and you would use this as:
$db = new Database ( 'user_name', 'password', 'database_name' );

Tout le reste est expliqué dans le manuel PHP: cliquez ici

52voto

Rob Points 31432

__construct() est le nom de la méthode pour le constructeur. Le constructeur est appelé sur un objet après qu'il a été créé, et est un bon endroit pour mettre de l'initialisation du code, etc.

class Person {

    public function __construct() {
        // Code called for each new Person we create
    }

}

$person = new Person();

Un constructeur peut accepter des paramètres de la manière normale, qui sont transmis lorsque l'objet est créé, par exemple

class Person {

    public $name = '';

    public function __construct( $name ) {
        $this->name = $name;
    }

}

$person = new Person( "Joe" );
echo $person->name;

Contrairement à d'autres langues (par exemple Java), PHP ne supporte pas la surcharge du constructeur (qui est, le fait d'avoir plusieurs constructeurs qui acceptent des paramètres différents). Vous pouvez obtenir cet effet en utilisant des méthodes statiques.

Note: j'ai récupéré ce à partir du journal de l' (au moment d'écrire ces lignes) ont accepté de répondre.

18voto

Logan Serman Points 11537

C'est une autre façon de déclarer le constructeur. Vous pouvez également utiliser le nom de la classe, par exemple:

 class Cat
{
    function Cat()
    {
        echo 'meow';
    }
}
 

et

 class Cat
{
    function __construct()
    {
        echo 'meow';
    }
}
 

Sont équivalents. Ils sont appelés chaque fois qu'une nouvelle instance de la classe est créée. Dans ce cas, ils seront appelés avec cette ligne:

 $cat = new Cat();
 

16voto

ian Points 61

Je pense que c'est important pour la compréhension de l'objectif du constructeur.
Même après avoir lu les réponses ici, il m'a fallu quelques minutes pour comprendre et voici la raison.
J'ai pris l'habitude de explicitement de codage tout ce qui est entrepris ou se produit. En d'autres termes ce serait mon chat de classe et comment je pourrais l'appeler.

class_cat.php

class cat {
    function speak() {
        echo "meow";  
    }
}

somepage.php

include('class_cat.php');
mycat = new cat;
$speak = cat->speak();
echo $speak;

Où dans la classe "chat" exemples ci-dessus, il est supposé que chaque fois que vous créez un nouvel objet de la classe "chat" vous voulez le chat "miaou" plutôt que d'attendre pour vous appeler la fonction pour la faire miauler.

De cette façon, mon esprit était la pensée explicitement où la méthode constructeur utilise implicity et de ce fait difficile à comprendre au premier abord.

7voto

Hussein Points 11
class Person{
 private $fname;
 private $lname;

 public function __construct($fname,$lname){
  $this->fname = $fname;
  $this->lname = $lname;
 }
}
$objPerson1 = new Person('john','smith');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X