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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
204
0
232 619
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

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

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

а также

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

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

$cat = new Cat();
Cat() и __cosntruct() делают то же самое в этом контексте, но вы должны быть осторожны: если класс Cat находится в пространстве имен, Cat() не будет рассматриваться как конструктор, начиная с PHP 5.3.3. php.net/manual/en/language.oop5.decon.php
AbcAeffchen 06.08.2014 22:10

Да, этот плохой пример кода внутри самого конструктора.

Kzqai 19.12.2014 22:49
Для обратной совместимости с PHP 3 и 4, если PHP не может найти функцию __construct () для данного класса, он будет искать функцию конструктора в старом стиле по имени класса. Фактически это означает, что проблемы совместимости могут возникнуть только в том случае, если у класса есть метод с именем __construct (), который использовался для другой семантики. Предупреждение: конструкторы старого стиля УСТАРЕВШИЛИ в PHP 7.0 и будут удалены в будущей версии. Вы всегда должны использовать __construct () в новом коде.
WEBjuju 14.09.2017 01:47

почему нет необходимости добавлять public перед определением функции __construct?

Ratibor Yaroslavovich 24.12.2019 14:50
Ответ принят как подходящий

__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: кликните сюда

__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 не поддерживает перегрузку конструктора (то есть наличие нескольких конструкторов, принимающих разные параметры). Добиться этого эффекта можно с помощью статических методов.

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

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

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

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», вы хотите, чтобы кошка «мяукала», а не ждала, пока вы вызовете функцию, чтобы заставить ее мяукать.

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

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

BarclayVision 24.03.2016 03:32
class Person{
 private $fname;
 private $lname;

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

Это не объясняет, это просто код. Пожалуйста, добавьте текст, объясняющий, что происходит в соответствии с вопросом.

Relm 14.10.2015 14:52

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

__construct - это метод инициализации нового объекта перед его использованием. http://php.net/manual/en/language.oop5.decon.php#object.construct

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

Надеюсь на эту помощь:

<?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

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

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

Так:

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

Для получения дополнительных сведений о том, что такое конструктор, см. руководство.

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

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

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

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

Class Person { 

 function __construct() {
   echo 'Hello';
  }

}

$person = new Person();

//the result 'Hello' will be shown.

Мы не создали еще одну функцию, чтобы повторить слово «Hello». Он просто показывает, что ключевое слово __construct весьма полезно при запуске класса или объекта.

Конструктор позволяет вам инициализировать свойства объекта при создании объекта.

Если вы создаете функцию __construct (), PHP будет автоматически вызывать эту функцию, когда вы создаете объект из класса.

https://www.w3schools.com/php/php_oop_constructor.asp

Другие вопросы по теме