Рубрики
Uncategorized

Клонирование и Волшебный метод анализа использования Object Clone () в объектно-ориентированном программировании PHP

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

В этой статье клон объекта и магический метод _clone() в объектно-ориентированном программировании PHP иллюстрируются примерами. Поделитесь для вашей справки следующим образом:

1. Клон, клон

Одним из основных недостатков объектно-ориентированной функции PHP 4 является то, что она обрабатывает объекты как другой тип данных, что делает многие распространенные методы ООП непригодными для использования, такие как шаблоны проектирования. Эти методы основаны на передаче объектов в качестве ссылок на другие методы класса, а не в качестве значений, что является стандартом PHP по умолчанию. К счастью, PHP5 решает эту проблему, и теперь все объекты по умолчанию рассматриваются как ссылки. Однако, поскольку все объекты рассматриваются как ссылки, а не значения, копировать объекты теперь сложнее. Если вы попытаетесь скопировать ссылочный объект, он будет указывать только на адрес расположения исходного объекта. Чтобы решить проблему репликации, PHP предоставляет клон. клон (Ключевое слово, а не метод) Явный метод объекта.

Вы можете добавить объект перед ним клон Ключевое слово для клонирования объекта, как показано ниже:

destinationObject = clone targetObject;

Клонирование объектов:

php
class Person{
  var $name;
  var $sex;
  var $age;
  function __construct($name, $sex, $age){
    $this->name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  function say(){
    Echo: "My name:"$this - > name. ","gender:"$this - > sex.", "age:" $this - > age. "< br />";
  }
}
$person1 = new Person ("Zhang Sansan", "Man", 23);
$person2 = clone $person1; // Clone keywords are used to clone / copy objects and create a copy of the object
$person3 = $person1; // This is not a replicated object, but a reference to the object that accesses it.
$person1 - > say (); // Call the way of speaking in the original object, print all the attribute values in the original object
$person2 - > say (); // Call the way of speaking in the replica object, print all the attribute values in the cloned object
$person3 - > say ();// Call the way of speaking in the original object, print all the attribute values in the original object
?>

2. Магический метод _clone()

В вышеупомянутой программе созданы два объекта, один из которых с помощью клонирования Клонированных копий ключевых слов. Эти два объекта полностью независимы, но значения их элементов и атрибутов абсолютно одинаковы. Если необходимо повторно присвоить начальные значения атрибутам memberattributes при клонировании объекта клонированной копии, в классе может быть объявлен магический метод “_clone ()”. Этот метод вызывается автоматически при клонировании объекта, поэтому клонированная копия может быть повторно инициализирована этим методом. __клон() Метод не требует никаких параметров. Перепишите код в предыдущем примере и добавьте магические методы в класс __clone() Для повторной инициализации атрибутов элементов в объекте реплики.

name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  function say(){
    Echo: "My name:"$this - > name. ","gender:"$this - > sex.", "age:" $this - > age. "< br />";
  }
  function __clone(){
    $this - > name = Lisi; // Reassign the name attribute in the replica object
    $this - > age = 10; // Reassign the age attribute in the replica object
  }
}
$person1 = new Person ("Zhang Sansan", "Man", 23);
$person2 = clone $person1; // Creates a copy of the object and automatically calls the _clone() method in the class
$person1 - > say (); // Call the way of speaking in the original object, print all the attribute values in the original object
$person2 - > say (); // Call the way of speaking in the replica object, print all the attribute values in the cloned object
?>

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

Мое имя: Чжан Сан сан, пол: мужчина, возраст: 23 Мое имя: Ли Сиси, пол: мужчина, возраст: 10

3. Расширение одноэлементных классов: запрет на клонирование

Для объекта класса, если используется “оператор клонирования”, будет скопирован новый объект, идентичный текущему объекту, и в это время автоматически будет вызван магический метод этого класса: __clone() До тех пор, пока в этом классе есть метод.

Чтобы реализовать одноэлементный класс, мы должны “запретить клонирование” объекта одноэлементного класса. В PHP, чтобы предотвратить клонирование объектов одноэлементного класса для нарушения вышеуказанной реализации одноэлементных классов, часто предоставляется пустой частный( частный Модифицированный) __clone() Метод.

Прежде всего, посмотрите на эффект “отказа от запрещенного клонирования”.:

Результаты заключаются в следующем:

логическое значение true

логическое значение false

Мы “не клонируем” обработку, то есть помещаем приведенный выше код в

Private function clone () {}/// Private before clone () to prohibit cloning

Эта строка кода удаляет комментарии.

Результаты заключаются в следующем:

логическое значение true

Неустранимая ошибка: Вызов частного одноэлементного базового::__clone()

То есть при клонировании он вызывается автоматически. __клон() Но метод является закрытой модификацией, его больше нельзя вызывать напрямую из-за пределов класса, что приводит к ошибке.

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

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

Оригинал: “https://developpaper.com/clone-and-magic-method-of-object-clone-usage-analysis-in-php-object-oriented-programming/”