Автор оригинала: David Wong.
В этой статье клон объекта и магический метод _clone() в объектно-ориентированном программировании PHP иллюстрируются примерами. Поделитесь для вашей справки следующим образом:
1. Клон, клон
Одним из основных недостатков объектно-ориентированной функции PHP 4 является то, что она обрабатывает объекты как другой тип данных, что делает многие распространенные методы ООП непригодными для использования, такие как шаблоны проектирования. Эти методы основаны на передаче объектов в качестве ссылок на другие методы класса, а не в качестве значений, что является стандартом PHP по умолчанию. К счастью, PHP5 решает эту проблему, и теперь все объекты по умолчанию рассматриваются как ссылки. Однако, поскольку все объекты рассматриваются как ссылки, а не значения, копировать объекты теперь сложнее. Если вы попытаетесь скопировать ссылочный объект, он будет указывать только на адрес расположения исходного объекта. Чтобы решить проблему репликации, PHP предоставляет клон. клон (Ключевое слово, а не метод) Явный метод объекта.
Вы можете добавить объект перед ним клон Ключевое слово для клонирования объекта, как показано ниже:
destinationObject = clone targetObject;
Клонирование объектов:
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/”