Объектно-ориентированное программирование предназначено для предоставления решений для крупных программных проектов, особенно проектов, в которых участвует несколько человек. Когда исходный код увеличивается до 10 000 строк и более, каждое изменение может вызвать нежелательные побочные эффекты. Это происходит, когда модули образуют секретные альянсы, как в случае с . Европа накануне Первой мировой войны.
//haohappy Примечание. Это означает, что корреляция между модулями слишком высока и взаимозависимость слишком велика. Изменение одного модуля приведет к соответствующему изменению других модулей.
Представьте себе, что модуль, обрабатывающий входы в систему, позволяет модулю обработки входов в систему использовать свое соединение с базой данных. Конечно, это хорошее намерение, позволяющее сэкономить на создании другого соединения с базой данных. Однако иногда модуль обработки входа в систему меняет одно из подключений к базе данных. Имя переменной может нарушить соглашение между ними, что приведет к ошибке в обработке модуля кредитной карты, что, в свою очередь, приведет к ошибке в модуле, обрабатывающем счета. Вскоре все нерелевантные модули в системе могут совершать ошибки. Поэтому
я чувствую себя немного драматично: большинство программистов благодарны за связь и инкапсуляцию. Чем меньше связь, тем лучше. существующего проекта и использовать его в другом. Используется в новом проекте.
Мы также надеемся внести крупномасштабные изменения в определенный модуль, не беспокоясь о влиянии на другие модули. Модули могут рассматриваться как решение. относительно независима и передача данных между модулями. Делайте это через интерфейсы. Модули не отслеживают имена переменных друг друга, они вежливо отправляют запросы через функции.
Инкапсуляция — это принцип, который можно использовать в любом языке программирования. В PHP и во многих процедурно-ориентированных языках. языки Соблазнительно полениться. Ничто не мешает вам создать гипотетическую сеть с помощью модулей. Объектно-ориентированное программирование — это способ не нарушать принцип инкапсуляции.
В объектно-ориентированном программировании модули организованы в объекты. иметь методы и свойства. С абстрактной точки зрения методы — это действия объекта, а свойства — это характеристики объекта. С точки зрения программирования методы — это функции, а свойства — это переменные. ориентированная система, каждая часть которой является объектом. Система состоит из объектов и связей между объектами через методы.
Класс определяет свойства объекта. Если вы создаете набор объектов cookie, то класс будет машиной cookie. Свойства и методы класса называются членами. Это можно выразить, используя члены данных или члены методов.
Каждый язык предоставляет разные способы доступа к объектам. PHP заимствует концепции, предоставляя тип данных для хранения функций и переменных. идентификатор. Когда PHP был первоначально разработан, и даже когда был разработан PHP3, PHP не был предназначен для обеспечения возможности разработки крупномасштабных проектов, превышающих 100 000 строк кода. С развитием PHP и движка Zend стало возможным разрабатывать большие проекты, но независимо от того, насколько велик ваш проект, написание сценариев в классах позволит повторно использовать код. Это хорошая идея, особенно если вы готовы поделиться своим кодом с другими.
Идея объектов — одна из самых захватывающих концепций в информатике. Поначалу освоить его сложно, но я могу гарантировать, что как только вы освоите его, мышление разумом станет очень естественным.
Объектная модель PHP5.
PHP5 имеет единое наследование, ограниченный доступ и перегружаемую объектную модель. «Наследование», которое будет подробно обсуждаться далее в этой главе, включает отношения «родитель-потомок» между классами. Кроме того, PHP поддерживает атрибуты и ограниченный доступ к ним. Вы можете объявить члены как частные, запретив доступ из внешних классов. Наконец, PHP позволяет подклассу перегружать элементы из своего родительского класса.
Объектная модель PHP5 обрабатывает объекты иначе, чем любой другой тип данных, передаваемый по ссылке. явно передавать и возвращать объекты по ссылке. Объектная модель на основе ссылок будет подробно объяснена в конце этой главы. Это самая важная новая функция PHP5.
Она более прямолинейна. Объектная модель имеет дополнительные преимущества: повышенная эффективность. , меньшее использование памяти и большая гибкость.
В предыдущих версиях PHP скрипты копировали объекты по умолчанию. Теперь PHP5 перемещает только дескрипторы, требуя меньше времени. Улучшение эффективности выполнения скриптов происходит за счет исключения ненужного копирования объектов. вносит сложность, но также повышает эффективность выполнения. В то же время сокращение копирования означает, что используется меньше памяти, которую можно зарезервировать. Это освобождает больше памяти для других операций, что также повышает эффективность.
Zand Engine 2 обладает большей гибкостью. Хорошим развитием является возможность выполнения метода класса до уничтожения. Это также полезно для использования памяти. Это очень полезно, позволяя PHP четко знать, когда нет ссылки на объект, и выделять свободную память.
Передача объектов
управления памятьюв
PHP5
PHP5 использует Zend Engine II, и объекты хранятся в отдельной структуре Object Store. Она не хранится в Zval, как другие общие переменные (в PHP4 объекты хранятся в Zval как общие переменные). ). В Zval хранится только указатель объекта, а не содержимое (значение). Когда мы копируем объект или передаем объект в качестве параметра функции, нам не нужно копировать данные. Просто сохраните тот же указатель объекта и уведомите хранилище объектов о том, что этот конкретный объект теперь указывает, через другой zval. Поскольку сам объект находится в хранилище объектов, любые изменения, которые мы вносим в него, повлияют на все структуры zval, содержащие указатели на объект, что проявляется в программе, поскольку любые изменения целевого объекта влияют на исходный объект. .Это заставляет объекты PHP выглядеть так, как будто они всегда передаются по ссылке, поэтому объекты в PHP по умолчанию передаются по «ссылке», и вам больше не нужно использовать & для их объявления, как в PHP4.
Механизмы сбора мусора
в некоторых языках, чаще всего в C, требуют, чтобы вы явно запрашивали выделение памяти при создании структуры данных. Выделив память, вы можете хранить информацию в переменных. В то же время вам также необходимо освободить память, когда вы закончите использовать переменную, чтобы машина могла освободить память для других переменных и избежать нехватки памяти.
PHP может автоматически управлять памятью и удалять объекты, которые больше не нужны. PHP использует простой механизм сбора мусора, называемый подсчетом ссылок. Каждый объект содержит счетчик ссылок, и каждая ссылка, подключенная к объекту, увеличивает счетчик на единицу. Когда ссылка выходит за пределы живого пространства или устанавливается в NULL, счетчик уменьшается на 1. Когда счетчик ссылок объекта достигает нуля, PHP понимает, что вам больше не нужно использовать этот объект, и освобождает занимаемое им пространство памяти.
Например:
<?php
класс Человек {}
функция sendEmailTo(){}
$haohappy = new Person( );
// Создаем новый объект: Счетчик ссылок Счетчик ссылок = 1
$хаохэппи2 = $хаохэппи;
// Копирование по ссылке: счетчик ссылок = 2
не установлено ($ хаохэппи);
// Удалить ссылку: счетчик ссылок = 1
sendEmailTo($haohappy2);
// Передаем объект по ссылке:
// Во время выполнения функции:
// Счетчик ссылок = 2
//После выполнения:
// Счетчик ссылок = 1
unset($haohappy2);
// Удалить ссылку: счетчик ссылок = 0 Автоматически освободить пространство памяти
?>