Когда использовать класс или функцию в PHP

Лампочки еще предстоит продолжить …

Мне очень понравилось бы легко понять объяснение преимущества использования класса в php только при использовании функций.

Вот простой пример мысли, которую я сейчас имею, и мне интересно, эффективен ли класс:

Скажем, у меня есть виджет мини-календаря, который я создал на php. Я думаю о вызове функции miniCal('arrayVars1', 'var2') . Но я мог бы сделать это дважды на этой странице. Используйте меньшее количество ресурсов, используя класс здесь, создайте новые экземпляры?

Какое дерево я должен лаять здесь, потому что мне кажется, что сейчас дерево – это кирпичная стена …

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

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

Я рекомендую вам прочитать руководство по объектно-ориентированному программированию PHP5 и запись в Опиксе Википедии .

Общеизвестно, что PHP5 состоял в том, чтобы создавать классы, которые действуют как библиотеки. Это дает вам преимущество в организации вашей функциональности и использовании функций класса, таких как __autoload ();

Например, представьте, что у вас есть две функции для шифрования и дешифрования данных. Вы можете обернуть их в класс (назовем его «Шифрование») и сделать их статическими функциями. Затем вы можете использовать такие функции (обратите внимание, что не требуется инициализация (т.е. $ obj = новое шифрование)):

 $encrypted_text = Encryption::encrypt($string); 

а также

 $decrypted_text = Encryption::decrypt($string); 

Преимущества этого:

  1. Ваши функции шифрования группируются и организованы. Вы и любой, кто поддерживает код, знаете, где найти свои функции шифрования.
  2. Это очень ясно и легко читать. Хорошо подходит для ремонтопригодности.
  3. Вы можете использовать __autoload () для автоматического включения этого класса. Это означает, что вы можете использовать его, как встроенную функцию.
  4. Поскольку он содержится в собственном классе и собственном файле, он многократно используется и может быть легко перенесен в новые проекты.

Использование классов – хороший способ группировки ваших функций.

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

— редактировать —

Вы можете использовать процедурные парадигмы . Классы в этой парадигме не нужны.

 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 в нем, тогда как если мы создадим функции напрямую, тогда нам не нужно для создания объекта.