Рубрики
Uncategorized

Построение и разрушение объектно-ориентированного программирования PHP

Автор оригинала: David Wong.

Эта статья иллюстрирует построение и деструктивные методы объектно-ориентированного программирования PHP. Поделитесь для вашей справки следующим образом:

Конструктивный метод и деструктивный метод-это два специальных метода в объекте, которые связаны с жизненным циклом объекта. Метод построения-это Первый автоматически вызываемый объект после завершения создания объекта Вот почему мы используем конструкторы в объектах. И разрушительный метод-это Последний объект, который автоматически вызывается перед его уничтожением Вот почему мы используем разрушительные методы в объектах. Поэтому мы обычно используем конструктивные методы для завершения некоторых объектов. Инициализация Разрушительный метод используется для завершения некоторых объектов до того, как они будут уничтожены Очистка

1. Способ строительства

В каждом объявленном классе существует специальный метод-член, который не называется конструктором. Если он явно не объявлен, в классе будет конструктор, у которого по умолчанию нет списка параметров и пустого содержимого. Если он объявлен явно, конструктор по умолчанию в классе не будет существовать. При создании объекта конструктор автоматически вызывается один раз, то есть каждый раз, когда ключевое слово new используется для создания экземпляра объекта, конструктор вызывается автоматически, и конструктор не может быть вызван активно через ссылку на объект. Поэтому конструктивные методы часто используются для выполнения некоторых полезных задач инициализации, таких как присвоение начальных значений атрибутам элементов при создании объектов.

В предыдущих версиях PHP 5 имя метода конструктора должно совпадать с именем класса, которое все еще доступно в PHP 5. Однако в PHP существует несколько конструкторов с одинаковым именем. Преимущество этого заключается в том, что конструктор не зависит от имени класса, и нет необходимости изменять соответствующее имя конструктора при изменении имени класса. Для большей совместимости при создании объекта, если в классе нет имени __construct() PHP будет искать метод построения с тем же именем, что и имя класса. Формат объявления конструкторов в классах выглядит следующим образом:

Function__construct ([parameter list]) {// constructor name starts with two underscores
  // Method body, usually used for initialization assignment of member attributes
}

В PHP в одном классе может быть объявлен только один конструктор. Причина в том, что имя конструктора фиксировано, и две функции с одинаковым именем не могут быть объявлены в PHP, поэтому перегрузка конструктора отсутствует. Однако параметры по умолчанию могут использоваться при объявлении метода построения для реализации функции перегрузки метода построения в других объектно-ориентированных языках программирования. Таким образом, при создании объекта, если в конструкторе не передаются параметры, для инициализации атрибутов элементов используются параметры по умолчанию.

  • Конструкторы могут принимать параметры и назначать атрибуты объектов при создании объектов
  • Конструкторы могут вызывать методы класса или другие функции
  • Конструкторы могут вызывать конструкторы других классов

Пример использования конструктора:

php
class Person{
  private $name;
  private $age;
  private $gender;
  public function __construct($name,$age,$gender){
    $this - > setName ($name); // Call class methods
    $this->age = $age;
    $this->setGender($gender);
  }
  public function setName($name){
    $this->name = $name;
  }
  //... Setter method
}
$person = new Person ("yeoman", 23,'man');
?>

Вызовите родительский конструктор и конструктор несвязанного класса:

function __construct(){
  Parent::_construct(); // Calling the parent class constructor must show the use of parent to call the parent class constructor
  Classname::_construct(); // Call the constructor of other classes, classname is the class name
  // Other operations
}

Наследование и конструктор

Конструктор дочернего класса в PHP не вызывает активно конструктор родительского класса. Для отображения используется parent::__construct() Вызов:

setName($name)
    Echo "Animals are created! ";
  }
  //... Other ways
}
class Birds extends Animal{
  private $name;
  private $leg;
  function __construct($name,$leg){
    Parent::_construct($name);//Display call
    $this->setLeg($leg);
    Echo "Birds are created! ";
  }
  //... Other ways
}
?>

Если задействовано многоуровневое наследование, при вызове parent::__construct() При поиске вверх по родительскому классу до тех пор, пока не будет найден наиболее подходящий конструктор, например:

// Connect with the preceding example
class Parrot extends Birds{
  private $name;
  private $leg;
  private $wing;
  function __construct($name){
    Parent::_construct($name); // At this time, no suitable constructor for the parent class (Birds class) can be found, only the upward search, when the Animal class is found, the appropriate constructor can be found.
    Echo "Parrot class is created! ";
    $this->smackTalk();
    /*
    Output results:
    "Animals are created! "
    "Parrots talk! "
    */
  }
  function smackTalk(){
    echo "Parrots talk! ";
  }
}

Если вы хотите вызвать конструктор нескольких родительских классов по очереди, вы можете вызвать конструктор напрямую, используя имя класса, например:

function __construct($name,$leg){
    Animal:::_construct($name); //Call the Animal constructor
    Birds:: _construct ($name, $leg); // Call Birds constructor
}

2. Разрушительная функция

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

Когда объект в сегменте памяти кучи теряет ссылку для доступа к нему, он становится недоступным и становится объектом мусора. Часто ссылке на объект присваиваются другие значения, или в конце выполнения страницы объект теряет ссылку.

Деструкторы автоматически вызываются при уничтожении объектов и не могут быть вызваны явно. Деструкторы не могут принимать параметры.

Декларативный формат деструктора выглядит следующим образом:

function __deconstruct(){
  // Method body, usually used to perform some cleaning tasks before object destruction
}

Деструкторы могут быть вызваны (но не обязательно) в следующих ситуациях:

  • После загрузки страницы PHP;
  • Класс Unset () ;
  • Когда переменная указывает на другой объект или значение;
  • Механизм восстановления памяти PHP аналогичен механизму восстановления памяти JAVA. Он использует технологию счетчика ссылок для уничтожения и восстановления объектов без каких-либо ссылок.

Пример:

";
?>

В этом примере, как показано на рисунке ниже, три переменные ссылаются на тестовый объект, $a, $b, $c, и тестовый объект имеет три отсчета ссылок, когда $a Когда ссылка $a на тестовый объект потеряна, количество – 1, изменится на 2, когда $b отменено() Когда ссылка $b на тестовый объект потеряна, снова посчитайте – 1, измените на 1, и, наконец, страница загружена. Ссылка $c на тестовый объект автоматически освобождается. В это время подсчитайте еще раз – 1, измените на 0, тестовый объект не имеет ссылки на переменную, будет уничтожен, а затем будет вызван деструктор.

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

name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  function __destruct(){
    Echo "goodbye". $this - > name. "< br />";
  }
}
$person1 = new Person ("Zhang Sansan", "Man", 23);
$person1 = null; // The first object will lose its reference
$person2 = new Person ("Li Si-si", "Woman", 17);
$person3 = new Person ("Wang Wuwu", "Man", 43);
?>

Результаты операции:

Прощай, Чжан Сансань, Прощай, Ван Ву Ву, Прощай, Ли Си-си.

После объявления первого объекта его ссылке присваивается нулевое значение, поэтому ссылка, потерянная первым объектом, больше не может быть доступна, а затем деструктор в первом объекте автоматически вызывается для вывода “Прощай, Чжан Сансань”. Оба объекта, объявленные позже, являются ссылками, потерянными в конце выполнения страницы, и деструкторы вызываются автоматически. Но поскольку ссылки на объекты помещаются в сегмент стека Из-за характеристики стека FIFO : объект, созданный в конце концов, будет выпущен первым. Большинство из них автоматически вызывают деструктор третьего объекта перед вызовом деструктора второго объекта.

Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы PHP и использования операторов, Краткое описание использования строк Php и данных php+mysql. Введение в библиотечные операции и Краткое описание общих навыков работы с базами данных на PHP

Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.