Для чего используется функция __construct?

Я много замечаю __construct с классами. Я немного читал и занимался серфингом в Интернете, но я не мог найти объяснения, которые я мог понять. Я только начинаю с ООП.

Мне было интересно, может ли кто-нибудь дать мне общее представление о том, что это такое, а затем простой пример того, как он используется с PHP?

Ответ 1

__construct был введен в PHP5, и это правильный способ определить ваши, ну, конструкторы (в PHP4 вы использовали имя класса для конструктора). Вы не обязаны определять конструктор в своем классе, но если вы хотите передать какие-либо параметры при построении объекта, вам нужен он.

Пример может выглядеть так:

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' );

Все остальное объясняется в руководстве PHP: нажмите здесь

Ответ 2

__construct() - это имя метода для конструктора . Конструктор вызывается на объект после его создания и является хорошим местом для ввода кода инициализации и т.д.

class Person {

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

}

$person = new Person();

Конструктор может принимать параметры обычным образом, которые передаются при создании объекта, например.

class Person {

    public $name = '';

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

}

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

В отличие от некоторых других языков (например, Java), PHP не поддерживает перегрузку конструктора (то есть наличия нескольких конструкторов, которые принимают разные параметры). Вы можете добиться этого эффекта, используя статические методы.

Примечание: я получил это из журнала принятого ответа (в момент написания).

Ответ 3

Другой способ объявить конструктор. Вы также можете использовать имя класса, например:

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

и

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

Являются эквивалентными. Они вызывается всякий раз, когда создается новый экземпляр класса, в этом случае они будут вызываться с помощью этой строки:

$cat = new Cat();

Ответ 4

Я думаю, что это важно для понимания цели конструктора.
Даже после прочтения ответов мне потребовалось несколько минут, чтобы понять, и в этом причина.
У меня появилась привычка явно кодировать все, что инициируется или происходит. Другими словами, это был бы урок моей кошки и как бы я это назвал.

class_cat.php

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

somepage.php

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

Где в @Logan Serman приведены примеры "class cat", предполагается, что каждый раз, когда вы создаете новый объект класса "cat", вы хотите, чтобы cat "мяукал", а не ждал, когда вы вызовете функцию, чтобы сделать ее мяу.

Таким образом, мой ум явно думал, где метод конструктора использует простоту, и это поначалу затрудняло понимание.

Ответ 5

Конструктор - это метод, который автоматически вызывается при создании экземпляра класса. Это означает, что содержимое конструктора обрабатывается без отдельных вызовов метода. Содержимое скобки ключевого слова класса передается методу конструктора.

Ответ 6

Надеюсь, что эта помощь:

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

Для получения дополнительной информации вам нужно перейти на codecademy.com

Ответ 7

Метод __construct используется для передачи параметров при первом создании объекта - это называется "определение метода конструктора" и является обычной практикой.

Однако конструкторы являются необязательными --so, если вы не хотите передавать какие-либо параметры во время создания объекта, вам это не нужно.

Так:

// 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);

Для получения более подробной информации о том, что такое конструктор, смотрите руководство.

Ответ 8

class Person{
 private $fname;
 private $lname;

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

Ответ 9

Конструкция

__ всегда вызывается при создании новых объектов или их вызывается при инициализации. Это подходит для любой инициализации, которая может понадобиться объекту до его использования. Метод __construct - это первый метод, выполняемый в классе.

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

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

Ответ 10

Я считаю, что функция __construct () {...} - это часть кода, которую можно снова и снова использовать в подстановке для TheActualFunctionName () {...}. Если вы измените имя CLASS, вам не нужно изменять код, потому что общий __construct всегда ссылается на фактическое имя класса... что бы это ни было. Вы кодируете меньше... или?

Ответ 12

Примечание. Родительские конструкторы не называются неявно, если дочерний класс определяет конструктор. Для запуска родительского конструктора требуется вызов parent::__construct() внутри дочернего конструктора. Если дочерний элемент не определяет конструктор, он может быть унаследован от родительского класса, как метод нормального класса (если он не был объявлен как закрытый).

Ответ 13

__construct просто инициирует класс. Предположим, у вас есть следующий код;

Class Person { 

 function __construct() {
   echo 'Hello';
  }

}

$person = new Person();

//the result 'Hello' will be shown.

Мы не создали другую функцию, которая повторяла бы слово "Hello". Это просто показывает, что ключевое слово __construct весьма полезно для инициации класса или объекта.