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



лампочка еще должна идти для этого...



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



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



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



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

717   6  

6 ответов:

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

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

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

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

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

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

и

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

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

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

использование классов является хорошим способом для группировки функций.

разница заключается в использовании парадигмы программирования. Классы необходимы в 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

    Ничего не найдено.