Лампочки еще предстоит продолжить …
Мне очень понравилось бы легко понять объяснение преимущества использования класса в php только при использовании функций.
Вот простой пример мысли, которую я сейчас имею, и мне интересно, эффективен ли класс:
Скажем, у меня есть виджет мини-календаря, который я создал на php. Я думаю о вызове функции miniCal('arrayVars1', 'var2')
. Но я мог бы сделать это дважды на этой странице. Используйте меньшее количество ресурсов, используя класс здесь, создайте новые экземпляры?
Какое дерево я должен лаять здесь, потому что мне кажется, что сейчас дерево – это кирпичная стена …
Классы используются для представления данных как объектов. Если вы представляете что-то вроде данных пользователя или аукционной ставки, создание объекта User или объекта AuctionBid упрощает совместное хранение этих данных, передачу его в вашем коде и упрощение его понимания читателям. Эти классы будут иметь атрибуты (поля данных, такие как числа, строки или другие объекты), а также методы (функции, которые можно использовать для любого класса).
Классы обычно не предлагают каких-либо преимуществ с точки зрения производительности, но они очень редко имеют какие-либо негативные последствия. Их реальная выгода заключается в том, чтобы сделать код более понятным.
Я рекомендую вам прочитать руководство по объектно-ориентированному программированию PHP5 и запись в Опиксе Википедии .
Общеизвестно, что PHP5 состоял в том, чтобы создавать классы, которые действуют как библиотеки. Это дает вам преимущество в организации вашей функциональности и использовании функций класса, таких как __autoload ();
Например, представьте, что у вас есть две функции для шифрования и дешифрования данных. Вы можете обернуть их в класс (назовем его «Шифрование») и сделать их статическими функциями. Затем вы можете использовать такие функции (обратите внимание, что не требуется инициализация (т.е. $ obj = новое шифрование)):
$encrypted_text = Encryption::encrypt($string);
а также
$decrypted_text = Encryption::decrypt($string);
Преимущества этого:
Использование классов – хороший способ группировки ваших функций.
Разница заключается в использовании парадигмы программирования. Классы необходимы в ООП, но не нужны в процедурной парадигме. В процедурной парадигме вы можете группировать функции в файле, который можно рассматривать как модуль.
— редактировать —
Вы можете использовать процедурные парадигмы . Классы в этой парадигме не нужны.
function miniCal($string_1, $string_2){ //do something } //invoke function miniCal('arrayVars1', 'var2');
Вы можете использовать парадигму ООП . Классы необходимы.
class Calculation { public static function miniCal($string_1, $string_2){ //do something } } //invoke function Calculation::miniCal('arrayVars1', 'var2');
Вывод
Обе работы парадигмы, но пример ООП из вышеизложенного использует объект Calculations, который содержит все методы (функции) вычислений. Объекты вычислений группируют функции вычисления, тем самым сохраняя их в одном месте.
Парадигма ООП в этом примере подчиняется принципам «солидная ответственность». Идея заключается в том, чтобы сохранить код элегантным, удобным и понятным.
Функции – это мясо вашего приложения, а классы больше похожи на тарелку. Это беспорядочно есть мясо без тарелки. Но если у вас нет мяса, у вас нет еды.
Если у вас есть 500 функций в ваших приложениях, вам, вероятно, захочется сгруппировать по крайней мере половину из них в более крупные коллекции для удобства доступа. Вы можете разработать общие соглашения об именах («Encryption_Encrypt», «Encycryption_Decrypt» и т. Д.) … но классы просто проще. Если у вас только 12 функций в вашем приложении, вы, вероятно, сможете выжить только с 1 или классами, если таковые имеются.
Мне часто не нужно хранить данные / свойства в классах. Я стараюсь хранить их в базе данных. Поэтому я не очень часто использую этот аспект классов.
Классы также позволяют полиморфизм, который может быть полезен. Если у вас есть несколько классов, которые очень похожи или несколько вариантов для класса, вы можете сохранить код … без необходимости создания некоторого многоцелевого класса, подобного Франкенштейну.
У меня есть список мест, в которых вы бы использовали классы OOP-Style в моем ответе на этот вопрос: https://stackoverflow.com/questions/2035449/why-is-oop-hard-for-me/2035482#2035482
В принципе, всякий раз, когда вы хотите представлять объект, в котором есть вещи. Подобно переменной базы данных, которая имеет уникальное соединение. Поэтому я бы mysql_query
это, поэтому я могу убедиться, что mysql_query
использует правильное соединение каждый раз:
class MySQL extends Database { public function connect($host, $user, $pass, $database) { $this->connection = mysql_connect($host, $user, $pass); $this->select_db($database); } public function query($query) { return mysql_query($query, $this->connection); } public function select_db($database) { mysql_select_db($database); } }
Или, может быть, вы хотите создать форму, вы можете создать объект формы, содержащий список входов и чтобы вы были внутри формы, когда вы решили отобразить ее:
class Form { protected $inputs = array(); public function makeInput($type, $name) { echo '<input type="'.$type.'" name="'.$name.'">'; } public function addInput($type, $name) { $this->inputs[] = array("type" => $type, "name" => $name); } public function run() { foreach($this->inputs as $array) { $this->makeInput($array['type'], $array['name']; } } } $form = new form(); $this->addInput("text", "username"); $this->addInput("text", "password");
Или, как кто-то предложил, человек:
class Person{ public $name; public $job_title; // ... etc.... }
Все являются причинами создания классов, поскольку они представляют что-то, что имеет свойства, такие как имя или название задания, и могут иметь методы, такие как отображение формы.
В основном оба выполняют ту же работу, но с помощью классов вы можете проще управлять своим кодом. Еще одна вещь, если мы используем класс, тогда мы должны создать объект для вызова функций define в нем, тогда как если мы создадим функции напрямую, тогда нам не нужно для создания объекта.