Объектно ориентированное программирование php. Stack Overflow на русском лучше работает с включенным JavaScript. Пример использование необъявленного свойства класса как элемент массива

Если вы найдете критические помарки по переводу, пожалуйста, оставляйте комментарии. Ваши замечания обязательно будут учтены. В любом случае надеюсь, вы найдете данную статью весьма полезной.

Существует множество различных, простых примеров, в которых приводится принцип работы ООП. Сегодня я решил показать вам, как работает ООП (Объектно-ориентированное, или объектное, программирование) в реальной жизни; особенно данный пример пригодится начинающим программистам. Создав класс под MYSQL CRUD (CRUD -англ. create read update delete - «Создание чтение обновление удаление»), вы сможете легко создавать, читать, обновлять и удалять записи в любых ваших проектах, независимо от того, как спроектирована база данных.

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

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

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

  • Select
  • Insert
  • Delete
  • Update
  • Connect
  • Disconnect

Ниже приведено определение нашего класса. Отметьте, что все методы, которые я создал, используют ключевое слово public .

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

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

Class Database { public function connect() { } public function disconnect() { } public function select() { } public function insert() { } public function delete() { } public function update() { } }

Функция connect()

Эта функция будет довольно простой, но прежде чем писать функцию, нам потребуется определить несколько переменных. Переменные должны быть доступны только в пределах класса, поэтому перед каждой переменной стоит ключевое слово private (закрытый). Все переменные (хост, имя пользователя, пароль, имя база данных) используются для соединения с базой данных MySQL. После этого мы сможем создать простой MySQL запрос к базе данных. Конечно, как программисты, мы должны ожидать от пользователей все что угодно, и исходя из этого, нам необходимо принять определенные меры предосторожности. Мы можем проверить: если пользователь уже подключен к базе данных, то, соответственно, ему не нужно повторно подключаться к БД. В противном случае, мы можем использовать учетные данные пользователя для подключения.

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

Отклоненные классы бывают двух видов. Автор не отправил файлы пакета, потому что их слишком много для загрузки вручную. В настоящее время большинство случаев отклоненных пакетов. Это объясняется более подробно ниже. По всем этим причинам эта статья казалась необходимой. Надеюсь, это поможет прояснить недоразумения.

Private db_host = ‘’; private db_user = ‘’; private db_pass = ‘’; private db_name = ‘’; /* * Соединяемся с бд, разрешено только одно соединение */ public function connect() { if(!$this->con) { $myconn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass); if($myconn) { $seldb = @mysql_select_db($this->db_name,$myconn); if($seldb) { $this->con = true; return true; } else { return false; } } else { return false; } } else { return true; } }

Как видите выше, мы используем базовые функции MySQL и делаем небольшую проверку на ошибки, чтобы все шло по плану. Если пользователь подключился к БД, мы возвращаем true , в ином случае возвращаем false. В качестве дополнительного бонуса устанавливаем переменную (con) в true, если соединение установлено.

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

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

Общедоступная (public) функция disconnect()

Функция проверяет переменную соединения на существование. Если соединение установлено (con есть), то закрываем соединение с БД MySQL и возвращаем true . Иначе делать ничего не нужно.

Public function disconnect() { if($this->con) { if(@mysql_close()) { $this->con = false; return true; } else { return false; } } }

Общедоступная (public) функция select()

Переходим к той части, где все немного усложняется. Мы начинаем работать с аргументами пользователя и возвращаем результаты запроса. У нас нет необходимости использовать результаты прямо сейчас, но нам необходимо создать переменную, в которой мы будем хранить пользовательские результаты по запросам из БД. Кроме того мы также создадим новую функцию, которая будет проверять существует ли данная таблица в БД. Эта функция будет создана отдельно, так как все наши CRUD операции потребуют такой проверки. Таким образом, это немного очистит наш код и в дальнейшем будет способствовать оптимизации кода. Ниже приведена функция для проверки таблиц (tableExists) и общедоступная переменная с результатами запросов.

Что такое объекты и классы

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

Классы, объекты и объявления методов

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

Private $result = array(); /* * Проверяем наличие таблицы при выполнении запроса * */ private function tableExists($table) { $tablesInDb = @mysql_query("SHOW TABLES FROM ".$this->db_name." LIKE "".$table."""); if($tablesInDb) { if(mysql_num_rows($tablesInDb)==1) { return true; } else { return false; } } }

Эта функция просто проверяет наличие нужной таблицы в БД. Если таблица существует, вернет true , иначе вернет false .

/* * Выборка информации из бд * Требуется: table (наименование таблицы) * Опционально: rows (требуемые колонки, разделитель запятая) * where (колонка = значение, передаем строкой) * order (сортировка, передаем строкой) */ public function select($table, $rows = "*", $where = null, $order = null) { $q = "SELECT ".$rows." FROM ".$table; if($where != null) $q .= " WHERE ".$where; if($order != null) $q .= " ORDER BY ".$order; if($this->tableExists($table)) { $query = @mysql_query($q); if($query) { $this->numResults = mysql_num_rows($query); for($i = 0; $i numResults; $i++) { $r = mysql_fetch_array($query); $key = array_keys($r); for($x = 0; $x 1) $this->result[$i][$key[$x]] = $r[$key[$x]]; else if(mysql_num_rows($query) result = null; else $this->result[$key[$x]] = $r[$key[$x]]; } } } return true; } else { return false; } } else return false; }

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

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

На первый взгляд выглядит устрашающе, но при этом здесь мы делаем целую кучу важных вещей. Функция принимает четыре аргумента, один из которых обязательный. Функция вернет результат при наличии единственного аргумента - имени таблицы. Однако вы можете расширить количество аргументов и добавить новые аргументы, которые вы сможете использовать при работе с БД; ведь корректное исполнение функции зависит от одного аргумента – имени таблицы. Код в пределах функции служит для компиляции всех аргументов в select запрос. Как только запрос будет составлен, понадобится проверка на наличие в БД нужной таблицы – для этого используется функция tableExists . Если таблица найдена, то функция будет продолжена и запрос будет отправлен. Иначе все застопорится.

Определение области видимости свойств и методов

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

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

В следующей секции приведен действительно магический код. Суть в следующем: собрать данные запрошенные из таблицы. Затем присваиваем наш результат переменной. Чтобы упростить результат для конечного пользователя вместо числовых ключей будем использовать имена столбцов. В случае если количество строк таблицы больше единицы, на выходе вы получите двумерный массив, в котором первый ключ - это число (инкремент), второй ключ - это название колонки. Если в таблице всего одна строка, будет возвращен одномерный массив, название ключей которого соответствует именам столбцов таблицы. Если строк в таблице не найдено, переменной result будет присвоено значение null . Как я сказал ранее, все выглядит немного запутанным, но стоит вам разбить код на отдельные секции все станет гораздо проще и понятнее.

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

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

Общедоступная (public) функция insert()

Эта функция немного проще, чем предыдущие. Она просто позволяет вставить информацию в БД. Таким образом, помимо имени таблицы нам потребуются дополнительные аргументы. Нам потребуется переменная, которая будет содержать соответствующие для вставки в таблицу значения. Затем мы просто отделим каждое значение запятой. Также мы проверяем при помощи функции tableExists наличие нужной таблицы и составляем insert запрос, манипулируя аргументами, переданными в функцию insert() . Затем отправляем наш запрос по нужному адресу.

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

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

/* * Вставляем значения в таблицу * Требуемые: table (наименование таблицы) * values (вставляемые значения, передается массив значений, например, * array(3,"Name 4","[email protected]");) * Опционально: * rows (название столбцов, куда вставляем значения, передается строкой, * например, "title,meta,date" * */ public function insert($table,$values,$rows = null) { if($this->tableExists($table)) { $insert = "INSERT INTO ".$table; if($rows != null) { $insert .= " (".$rows.")"; } for($i = 0; $i < count($values); $i++) { if(is_string($values[$i])) $values[$i] = """.$values[$i]."""; } $values = implode(",",$values); $insert .= " VALUES (".$values.")"; $ins = @mysql_query($insert); if($ins) { return true; } else { return false; } } }

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

Понимание классов и объектов

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

Как видите эта функция довольно простая, по сравнению с составлением запросов select к БД. На самом деле функция delete будет еще проще.

Общедоступная (public) функция delete()

Эта функция просто удаляет таблицу или строки из нашей БД. Таким образом, нам надо передать в функцию имя таблицы и опциональный аргумент определяющий условие where . В условии следующим за ключевым словом WHERE следует уточнение: удалить строку, строки или всю таблицу. Если условие where опущено, то будут удалены все строки. Затем составляется запрос delete и следует выполнение запроса.

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

Например, подумайте о классе как о проекте для дома. Сам план - не дом, а подробный план дома. Хотя объект похож на реальный дом, построенный в соответствии с этим планом. Мы можем построить несколько одинаковых домов из одного плана, но каждый дом может иметь разные краски, интерьеры и семьи внутри, как показано на рисунке ниже.

/* * Удаяем таблицу или записи удовлетворяющие условию * Требуемые: таблица (наименование таблицы) * Опционально: где (условие ), передаем строкой, например, "id=4" */ public function delete($table,$where = null) { if($this->tableExists($table)) { if($where == null) { $delete = "DELETE ".$table; } else { $delete = "DELETE FROM ".$table." WHERE ".$where; } $del = @mysql_query($delete); if($del) { return true; } else { return false; } } else { return false; } }

Выводы о ООП

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

Использование конструкторов и деструкторов

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

Наконец перейдем к нашей последней основной функции. Эта функция служит для обновления строки в БД новой информацией. Данная функция на первый взгляд сложна для понимания, однако, это не совсем так. Мы будем использовать все те же принципы, что и раньше. Например, аргументы будут использоваться для составления запроса update . Также мы проверим наличие таблицы при помощи метода tableExists . Если таблица существует, обновим надлежащую строку. Самая сложная часть, конечно, та, где мы занимаемся составлением запроса update . Поскольку оператор update имеет правило за раз обновлять все строки, нам необходимо учесть это и правильно отрегулировать этот момент. Итак, я решил условие where передавать как простой массив. Первый аргумент в этом массиве - имя столбца, следующий аргумент значений столбца. Таким образом, каждый четный номер (включай 0) соответствует имени колонки, а каждый нечетный номер содержит нечетное значение. Соответствующий код приведен ниже:

Расширение классов через наследование

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

Управление видимостью свойств и методов

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

For($i = 0; $i

В следующей секции мы создадим часть update оператора, настраивая переменные. Поскольку вы можете изменить любое числовое значение, я предпочел массив с ключами по названию столбца и новыми значениями. Таким образом, нам останется сделать проверку на тип значения и где нужно поставить запятую. Теперь, когда мы составили две основных части оператора update , завершить составление оператора update не составит труда, код представлен ниже:

Public function update($table,$rows,$where,$condition) { if($this->tableExists($table)) { // Parse the where values // even values (including 0) contain the where rows // odd values contain the clauses for the row for($i = 0; $i

Итак, мы закончили создание последней функции и наш класс для работы с CRUD можно считать законченным. Теперь вы можете создавать новые записи, читать отдельные записи из БД, обновлять записи и удалять. Кроме того, начав повторно использовать данный класс, вы обнаружите, что существенно экономите время и строчки код. То есть вы почувствуете эффективность и преимущество ООП.

Использование

Итак, мы создали наш класс, но как его использовать? Тут все просто. Давайте начнем с создания простой БД, в которой протестируем наш класс. Я создал базу данных test и составил простой mysql оператор. Вы можете поместить его в любую БД.



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

Теперь, когда наша таблица создана и заполнена, самое время запустить несколько простых запросов.

connect(); $db->select("mysqlcrud"); $res = $db->getResult(); print_r($res); ?>

Если все сделано корректно, вы увидите следующие:

Аналогичным образом мы можем запустить запрос на обновление и вывести результаты.

update("mysqlcrud",array("name"=>"Changed!"),array("id",1),"="); $db->update("mysqlcrud",array("name"=>"Changed2!"),array("id",2),"="); $res = $db->getResult(); print_r($res); ?>

На выходе:

Теперь просто вставим запись:

insert("mysqlcrud",array(3,"Name 4","[email protected]")); $res = $db->getResult(); print_r($res); ?>

Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

*Наведите курсор мыши для приостановки прокрутки.

Назад Вперед

Объектно-ориентированный подход в PHP для начинающих. Часть 1

Многим PHP-программистам объектно-ориентированное программирование кажется пугающим, изобилующим запутанным синтаксисом и другими сложностями.

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

Именно это позволяет писать более компактный и эффективный код.

Понимание Объектно-Ориентированного Программирования (ООП)

ООП - это стиль написания кода, который позволяет разработчикам группировать сходные задачи в классы. Это помогает коду соответствовать так называемому принципу DRY (Don"t Repeat Yourself - Не повторяйте сами себя) и быть легким с точки зрения модификации и доработки.

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

Одно из главных преимуществ применения принципа DRY состоит в том, что при изменении какой-либо информации в Вашей системе, как правило, приходится править код только в каком-то одном месте.

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

ООП страшит многих разработчиков из-за того, что вводит новый синтаксис и, на первый взгляд, кажется гораздо более сложным делом, нежели простое процедурное кодирование. Однако, после более плотного знакомства с ним, многие соглашаются, что ООП не так сложно, как кажется, и является более продуктивным подходом к написанию кода.

Понимание Объектов и Классов

Прежде чем переходить непосредственно к ООП, необходимо иметь базовое понимание того, что такое объект, и что такое класс. Сейчас мы рассмотрим, как создаются классы, их возможности и некоторые из способов их использования.

Понимание отличия объектов от классов



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

Класс , к примеру, подобен плану дома . Он определяет конфигурацию и устройство дома на бумаге. На плане могут быть представлены все детали внутреннего устройства дома, хотя в действительности самого этого дома еще не существует.

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

Классы формируют структуру данных и действий и используют эту информацию для создания объектов.

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

Структура Класса

Синтаксис создания класса вполне самоочевиден: объявляем класс, используя ключевое слово, а за ним следует само название класса с фигурными скобками:

После создания класса можно создать новый объект, используя ключевое слово new , и сохранить его в переменную:

$obj = new MyClass;

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

Var_dump($obj);

Создайте новый php-файл с произвольным именем и посмотрите, как это работает, воспользовавшись следующим блоком кода:

Обратитесь к созданному Вами файлу, и на экране должна появиться следующая строка:

Object(MyClass)#1 (0) { }

Отлично. Ваш первый простейший скрипт а-ля "Hello, World" готов. Но пользы от него совершенно никакой, поэтому двигаемся дальше.

Объявление Свойств Класса

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

Для того, чтобы добавить свойство в класс MyClass , внесите следующий код в скрипт:

Ключевое слово public определяет так называемую "область видимости" свойства. Об этом мы поговорим позже в процессе изучение основ объектно-ориентированного программирования. Далее свойству дается имя, при этом используется стандартный синтаксис PHP и ему (свойству) присваивается значение (надо заметить, что свойствам в классе не обязательно иметь начальное значение).

Для того, чтобы получить значение свойства и вывести его на экран, нужно указать объект, к которому оно относится, и само свойство:

Echo $obj->prop1;

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

Знак "->" является специальной конструкцией, которая позволяет получить доступ к свойствам или методам данного объекта.

Измените скрипт, чтобы получить значение свойства, таким образом:

prop1; // Выводим значение свойства?>

Обновите страницу и Вы получите следующий результат:

Я - свойство класса!

Объявление Методов Класса

Методы - это функции, относящиеся к конкретному классу. Отдельные действия, которые способен будет производить объект, внутри класса называются методами.

К примеру, для создания методов, которые будут задавать и получать значение свойства $prop1 , нужно изменить код таким образом:

prop1 = $newval; } public function getProperty() // функция для получения значения свойства { return $this->prop1 . "
"; } } $obj = new MyClass; echo $obj->prop1; ?>

Заметьте: ООП позволяет объектам ссылаться на самих себя, используя конструкцию $this . Когда Вы работаете с методом, используйте $this таким же образом, как когда Вы используете имя объекта за пределами класса.

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

Получим значение свойства с помощью метода getProperty() , затем изменим его с помощью метода setProperty() и снова получим значение уже измененного свойства:

prop1 = $newval; } public function getProperty() { return $this->prop1 . "
"; } } $obj = new MyClass; echo $obj->getProperty(); // Получаем значение свойства $obj->setProperty("Я - измененное свойство класса!"); // Устанавливаем новое значение свойства echo $obj->getProperty(); // Получаем снова значение уже измененного свойста?>

Обновите страницу в браузере и Вы увидите две строки:

Я - свойство класса! Я - измененное свойство класса!

"Мощь ООП становится очевидной при использовании нескольких экземпляров одного и того же класса."


prop1 = $newval; } public function getProperty() { return $this->prop1 . "
"; } } // Создаем два объекта $obj = new MyClass; $obj2 = new MyClass; // Получаем значение свойства $prop1 из обоих объектов echo $obj->getProperty(); echo $obj2->getProperty(); // Устанавливаем новые значения свойства для обоих объектов $obj->setProperty("Я - новое свойство класса!"); $obj2->setProperty("Я принадлежу второму экземпляру класса!"); // Выводим значения свойства $prop1 для обоих объектов echo $obj->getProperty(); echo $obj2->getProperty(); ?>

Обновите страницу и Вы увидите следующий результат:

Я - свойство класса! Я - свойство класса! Я - новое свойство класса! Я принадлежу второму экземпляру класса!

Как Вы можете видеть, ООП сохраняет объекты как отдельные элементы, что позволяет легко разделять различные части кода на мелкие "связки".

По материалам net.tutsplus.com
Перевод - Дмитрий Науменко.

P.S. Хотите двигаться дальше в освоении PHP и ООП? Обратите внимание на премиум-уроки по различным аспектам сайтостроения, включая программирование на PHP, а также на бесплатный курс по созданию своей CMS-системы на PHP с нуля с использованием ООП:

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!