Когда использовать класс против функции в PHP
лампочка еще должна идти для этого...
Мне бы очень хотелось легко понять объяснение преимущества использования класса в php над Просто использованием функций.
вот простой пример мысли, которую я сейчас имею, и мне интересно, является ли класс более эффективным:
скажем, у меня есть мини-календарь виджет, который я построил в php. Я думаю о вызове функции miniCal('arrayVars1', 'var2'). Но я мог бы сделать это дважды на этой странице. Использовать меньше ресурсов используя класс здесь, создайте новые его экземпляры?
какое дерево я должен лаять здесь, потому что я чувствую, что прямо сейчас дерево-это кирпичная стена...
6 ответов:
классы используются для представления данных в виде объектов. Если вы представляете что-то вроде данных Пользователя или ставки аукциона, создание объекта пользователя или объекта AuctionBid упрощает хранение этих данных вместе, передачу их в коде и делает их более понятными для читателей. Эти классы будут иметь атрибуты (поля данных, такие как числа, строки или другие объекты), а также методы (функции, которые можно использовать в любом классе).
классы обычно не предлагают какие-либо преимущества с точки зрения производительности, но они очень редко имеют какие-либо негативные последствия либо. Их реальная выгода заключается в том, чтобы сделать код более ясным.
Я рекомендую вам прочитать php5 руководство по объектно-ориентированному программированию и Википедия ООП запись.
обычным делом с PHP5 было создание классов, которые действуют как библиотеки. Это дает вам возможность организовать свою функциональность и воспользоваться такими функциями класса, как __autoload ();
например, представьте, что у вас есть две функции для шифрования и дешифрования данных. Вы можете обернуть их в класс (назовем его шифрованием) и сделать их статическими функциями. Затем вы можете использовать такие функции (обратите внимание, что инициализация не требуется (т. е. $obj = new Шифрование)):
$encrypted_text = Encryption::encrypt($string);и
$decrypted_text = Encryption::decrypt($string);преимущества этого:
- ваши функции шифрования сгруппированы вместе и организованы. Вы и все, кто поддерживает код, знаете, где найти ваши функции шифрования.
- это очень ясно и легко читается. Хорошо для ремонтопригодности.
- вы можете использовать __autoload (), чтобы включить класс для вас автоматически. Это означает, что вы можете использовать его, как это было встроено функция.
- поскольку он содержится в своем собственном классе и собственном файле, он повторно используется и может быть легко перенесен в новые проекты.
использование классов является хорошим способом для группировки функций.
разница заключается в использовании парадигмы программирования. Классы необходимы в O. O. P., но не являются необходимыми в процедурной парадигме. В процедурной парадигме можно группировать функции в файле, который можно рассматривать как модуль.
--- редактировать ---
вы могли бы использовать процедурная парадигма. Классы действительно не нужны в этом образец.
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');вывод
обе парадигмы работают, но пример ООП из приведенного выше использует объект вычислений, который содержит все методы вычислений (функции). Объект вычислений группирует расчетные функции, тем самым удерживая их в одном месте.
парадигма O. O. P. В этом примере подчиняется принципам, называемым " Solid ответственность." Идея заключается в том, чтобы сохранить код элегантным, поддерживаемым и читаемым.
функции-это мясо вашего приложения, а классы больше похожи на тарелку. Это грязно есть мясо без тарелки. Но если у вас нет мяса, у вас нет еды.
Если у вас есть 500 функций в ваших приложениях, вы, вероятно, захотите сгруппировать по крайней мере половину из них в более крупные коллекции для удобства доступа. Вы можете разработать общие соглашения об именах ("Encryption_Encrypt", "Encycryption_Decrypt" и т. д.)...но занятия просто легче. Если вы только есть 12 функций в вашем приложении, вы, вероятно, могли бы выжить только с 1 или классов, если таковые имеются.
Мне не часто нужно хранить данные / свойства в классах. Я стараюсь сохранить их в базе данных. Поэтому я не очень часто пользуюсь этим аспектом занятий.
классы также позволяют полиморфизм, который может быть полезным. Если у вас есть несколько классов, которые очень похожи, или несколько вариантов класса, вы можете сохранить код...без необходимости строить некоторые многоцелевой, похожий на Франкенштейна класс.
у меня есть список мест, где вы бы использовали классы ООП-стиля в моем ответе на этот вопрос: https://stackoverflow.com/questions/2035449/why-is-oop-hard-for-me/2035482#2035482
в основном, когда вы хотите представить объект, который имеет вещи в нем. Как переменная базы данных, которая имеет уникальное соединение в ней. Поэтому я бы сохранил это, чтобы я мог убедиться, что
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.... }все это причины для создания классов, поскольку они представляют что-то, что имеет свойства, такие как имя или название работы, и могут иметь методы, такие как отображение формы.
в основном оба делают одну и ту же работу, но с помощью классов вы можете управлять своим кодом более простым способом, еще одна вещь, если мы используем класс, то нам нужно создать объект для вызова функций, определенных в нем, а если мы создаем функции напрямую, то нам не нужно создавать объект.
Comments