Когда использовать класс или функцию в PHP
Лампочка еще предстоит продолжить...
Мне очень понравилось бы легко понять объяснение преимущества использования класса в php только при использовании функций.
Вот простой пример мысли, которую я имею сейчас, и мне интересно, эффективен ли класс:
Скажем, у меня есть виджет мини-календаря, который я создал на php. Я думаю о вызове функции miniCal('arrayVars1', 'var2')
. Но я мог бы сделать это дважды на этой странице. Используйте меньше ресурсов, используя класс здесь, создайте новые экземпляры?
Какое дерево я должен лаять здесь, потому что я чувствую, что сейчас дерево - это кирпичная стена...
Ответы
Ответ 1
Классы используются для представления данных как объектов. Если вы представляете что-то вроде пользовательских данных или аукционных ставок, создание объекта User или объекта AuctionBid упрощает совместное хранение этих данных, передачу его в вашем коде и упрощение его понимания читателям. Эти классы будут иметь атрибуты (поля данных, такие как числа, строки или другие объекты), а также методы (функции, которые можно использовать для любого класса).
Классы обычно не предлагают каких-либо преимуществ с точки зрения производительности, но они очень редко имеют какие-либо негативные последствия. Их реальная выгода заключается в том, чтобы сделать код более понятным.
Я рекомендую вам прочитать PHP5 Object-Oriented Programming guide и Запись в Wikipedia OOP.
Ответ 2
Общеизвестно, что PHP5 состоял в том, чтобы создавать классы, которые действуют как библиотеки. Это дает вам преимущество в организации вашей функциональности и использовании функций класса, таких как __autoload();
Например, представьте, что у вас есть две функции для шифрования и дешифрования данных. Вы можете обернуть их в класс (позвольте ему шифровать) и сделать их статическими функциями. Затем вы можете использовать такие функции (обратите внимание, что не требуется инициализация (т.е. $Obj = новое шифрование)):
$encrypted_text = Encryption::encrypt($string);
и
$decrypted_text = Encryption::decrypt($string);
Преимущества этого:
- Функциональность шифрования сгруппирована и организована. Вы и любой, кто поддерживает код, знаете, где найти свои функции шифрования.
- Это очень ясно и легко читается. Хорошо подходит для ремонтопригодности.
- Вы можете использовать __autoload() для автоматического включения этого класса. Это означает, что вы можете использовать его, как встроенную функцию.
- Поскольку он содержится в собственном классе и собственном файле, он многократно используется и может быть легко перенесен в новые проекты.
Ответ 3
Использование классов - хороший способ группировки ваших функций.
Разница заключается в использовании парадигмы программирования. Классы необходимы в 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');
Заключение
Обе парадигмы работают, но пример ООП из вышеизложенного использует объект Calculations, который содержит все методы (функции) вычислений. Объекты вычислений группируют функции вычисления, тем самым сохраняя их в одном месте.
O.O.P. парадигма в этом примере подчиняется принципам "солидная ответственность". Идея заключается в том, чтобы сохранить код элегантным, удобным и понятным.
Ответ 4
Функции - это мясо вашего приложения, а классы больше похожи на тарелку. Это беспорядочно есть мясо без тарелки. Но если у вас нет мяса, вы не едите.
Если у вас есть 500 функций в ваших приложениях, вам, вероятно, захочется собрать по меньшей мере половину из них в более крупные коллекции для удобства доступа. Вы можете разработать общие соглашения об именах ( "Encryption_Encrypt", "Encycryption_Decrypt" и т.д.)... но классы просто проще. Если у вас есть только 12 функций в вашем приложении, вы, вероятно, сможете выжить только с 1 или классами, если они есть.
Мне часто не нужно хранить данные/свойства в классах. Я стараюсь хранить их в базе данных. Поэтому я не очень часто использую этот аспект классов.
Классы также допускают полиморфизм, который может быть полезен. Если у вас есть несколько классов, которые очень похожи или несколько вариантов для класса, вы можете сохранить код... без необходимости создания некоторого многоцелевого класса, подобного Франкенштейну.
Ответ 5
У меня есть список мест, в которых вы бы использовали классы OOP-Style в моем ответе на этот вопрос:
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....
}
Все причины создания классов, поскольку они представляют что-то, что имеет свойства, такие как имя или название задания, и могут иметь методы, такие как отображение формы.
Ответ 6
В принципе, оба выполняют ту же работу, но с помощью классов вы можете легче управлять своим кодом. Еще одна вещь, если мы используем класс, тогда мы должны создать объект для вызова функций в нем, а если мы создадим функции напрямую, Не нужно создавать объект.