Для чего используется функция __construct? - PullRequest
181 голосов
/ 19 января 2009

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

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

Ответы [ 12 ]

273 голосов
/ 19 января 2009

__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: нажмите здесь

46 голосов
/ 19 января 2009

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

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

19 голосов
/ 19 января 2009

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

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

и

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

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

$cat = new Cat();
16 голосов
/ 22 мая 2011

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

class_cat.php

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

somepage.php

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

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

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

12 голосов
/ 24 августа 2014

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

10 голосов
/ 03 мая 2016

Надеюсь, эта справка:

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

9 голосов
/ 10 августа 2016

Метод __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);

Подробнее о конструкторе см. В руководстве .

7 голосов
/ 09 апреля 2012
class Person{
 private $fname;
 private $lname;

 public function __construct($fname,$lname){
  $this->fname = $fname;
  $this->lname = $lname;
 }
}
$objPerson1 = new Person('john','smith');
5 голосов
/ 07 февраля 2017
Конструкция

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

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

//
  $testObject  =  new Test('abc','123');
3 голосов
/ 18 ноября 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...