Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 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

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