web-dev-qa-db-fra.com

À quoi sert la fonction __construct?

J'ai remarqué __construct beaucoup avec les classes. Je lisais un peu et surfais sur le Web, mais je ne trouvais pas d'explication compréhensible. Je ne fais que commencer avec OOP.

Je me demandais si quelqu'un pourrait me donner une idée générale de ce que c'est, et un exemple simple de la façon dont il est utilisé avec PHP?

188
Levi

__construct a été introduit en PHP5 et c'est la bonne façon de définir vos constructeurs (en PHP4, vous utilisiez 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 transmettre des paramètres à la construction d'objet, vous en avez besoin d'un.

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

281
Jan Hančič

__construct() est le nom de la méthode pour constructeur . Le constructeur est appelé sur un objet après sa création et constitue un bon emplacement pour insérer du code d'initialisation, etc.

class Person {

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

}

$person = new Person();

Un constructeur peut accepter les paramètres de la manière habituelle, qui sont transmis lors de la création de l'objet, par exemple.

class Person {

    public $name = '';

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

}

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

Contrairement à d'autres langages (Java, par exemple), PHP ne prend pas en charge la surcharge du constructeur (c’est-à-dire qu’il existe plusieurs constructeurs qui acceptent des paramètres différents). Vous pouvez obtenir cet effet en utilisant des méthodes statiques.

Remarque : J'ai extrait ceci du journal de la réponse acceptée (au moment de la rédaction de cet article).

48
Rob

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();
18
Logan Serman

Je pense que cela est important pour comprendre le but 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 coder explicitement tout ce qui est initié ou se produit. En d'autres termes, ce serait ma classe de chat et comment je l'appellerais.

class_cat.php

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

somepage.php

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

Là où, dans les exemples donnés par @Logan Serman "chat de classe", il est supposé que chaque fois que vous créez un nouvel objet de classe "chat", vous voulez que le chat "miaule" plutôt que d'attendre que vous appeliez la fonction pour le faire miauler.

De cette façon, mon esprit pensait explicitement où la méthode du constructeur utilise l'implicité, ce qui le rend difficile à comprendre au début.

16
ian

Le constructeur est une méthode appelée automatiquement lors de l'instanciation de classe. Ce qui signifie que le contenu d'un constructeur est traité sans appel de méthode séparé. Le contenu d'une parenthèse de mot-clé de classe est transmis à la méthode constructeur.

12
Jimmy James

J'espère que cette aide:

<?php
    // The code below creates the class
    class Person {
        // Creating some properties (variables tied to an object)
        public $isAlive = true;
        public $firstname;
        public $lastname;
        public $age;

        // Assigning the values
        public function __construct($firstname, $lastname, $age) {
          $this->firstname = $firstname;
          $this->lastname = $lastname;
          $this->age = $age;
        }

        // Creating a method (function tied to an object)
        public function greet() {
          return "Hello, my name is " . $this->firstname . " " . $this->lastname . ". Nice to meet you! :-)";
        }
      }

    // Creating a new person called "boring 12345", who is 12345 years old ;-)
    $me = new Person('boring', '12345', 12345);

    // Printing out, what the greet method returns
    echo $me->greet(); 
    ?>

Pour plus d'informations, vous devez vous rendre sur codecademy.com

10
Zaman

La méthode __construct est utilisée pour passer des paramètres lorsque vous créez d'abord un objet - c'est ce qu'on appelle 'définir une méthode constructeur', et c'est une chose courante à faire .

Cependant, les constructeurs sont facultatifs - donc si vous ne souhaitez pas transmettre de paramètres au moment de la construction de l'objet, vous n'en avez pas besoin.

Alors:

// Create a new class, and include a __construct method
class Task {

    public $title;
    public $description;

    public function __construct($title, $description){
        $this->title = $title;
        $this->description = $description;
    }
}

// Create a new object, passing in a $title and $description
$task = new Task('Learn OOP','This is a description');

// Try it and see
var_dump($task->title, $task->description);

Pour plus de détails sur ce qu'est un constructeur, voir le manuel .

9
James
class Person{
 private $fname;
 private $lname;

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

__construct est toujours appelé lors de la création de nouveaux objets ou est appelé lors de l'initialisation. il convient à toute initialisation dont l'objet peut avoir besoin avant son utilisation. La méthode __construct est la première méthode exécutée dans la classe.

    class Test
    {
      function __construct($value1,$value2)
      {
         echo "Inside Construct";
         echo $this->value1;
         echo $this->value2;
      }
    }

//
  $testObject  =  new Test('abc','123');
5
yasir kk

Je crois que la fonction __construct () {...} est un morceau de code qui peut être réutilisé encore et encore en remplacement de TheActualFunctionName () {...}. Si vous modifiez le nom de la classe, vous ne devez pas le modifier dans le code car la structure générique __construct fait toujours référence au nom de la classe réelle ... quel qu'il soit. Vous codez moins ... ou?

3
walter

Remarque: Les constructeurs parents ne sont pas appelés implicitement si la classe enfant définit un constructeur. Pour exécuter un constructeur parent, un appel à parent::__construct() dans le constructeur enfant est requis. Si l'enfant ne définit pas de constructeur, il peut être hérité de la classe parente comme une méthode de classe normale (si elle n'a pas été déclarée privée).

3
Vignesh

__construct est une méthode d'initialisation d'un nouvel objet avant son utilisation.
http://php.net/manual/en/language.oop5.decon.php#object.construct

3
Seyedan

__construct lance simplement une classe. Supposons que vous ayez le code suivant.

Class Person { 

 function __construct() {
   echo 'Hello';
  }

}

$person = new Person();

//the result 'Hello' will be shown.

Nous n'avons pas créé d'autre fonction pour faire écho au mot "Bonjour". Cela montre simplement que le mot clé __construct est très utile pour lancer une classe ou un objet.

0
Harris