Метод метода объекта вызовите вызов метода класса VS. Лучшая практика?

Вопрос:

Я пишу приложение в PHP, и я собрал коллекцию различных функций внутри класса, который я вызываю панель инструментов

Class toolbox {
public function misc($var) {
return do_something($var);
}
}

Я загружаю панель инструментов внутри своих различных скриптов, а затем использую ее, но я не уверен, какой должна быть лучшая практика…

Вариант 1: вызов метода объекта

__construct() {
require_once('toolbox.php');
$this->ToolBox = new toolbox;
}

some_function($input){
return $this->ToolBox->misc($input);
}

Вариант 2: вызов метода класса

__construct() {
require_once('toolbox.php');
}

some_function($input){
return ToolBox::misc($input);
}

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

Лучший ответ:

Сделайте их статическими функциями.

class Toolbox {
    static public function Tool1(){
    }
}
Toolbox::Tool1(); // Call the static method without instantiating the object

Почему статические классы, а не пространства имен?

Потому что статические классы полезности растут и, как правило, много. У вас может быть один для файлов, строк, массивов и т.д. Каждый из них может легко перепрыгнуть 5K строк или даже больше. Но вы всегда ими пользуетесь? НЕТ! Они могут использоваться в 5% страниц вашего сайта. Так зачем включать их в первую очередь?

PHP Autoload ^ приходит нам на помощь. Но autoload работает только с классами, в то время как пространства имен должны быть включены. Теперь у вас есть три варианта:

  • вы include/require ВСЕ, чтобы убедиться, что ваши пространства имен всегда доступны, но вы вынуждаете PHP разбирать много файлов в каждом прогоне плюс вы получаете присущее им ограничение производительности, в including и requiring файл
  • вы сохраняете include_once/require_once в каждом .php файле, где вы используете свои служебные классы
  • вы используете spl_autoload_register и забываете о зависимостях, когда автозагрузчик делает тяжелую работу в фоновом режиме для вас

Первые два могут работать с пространствами имен, а в последнем — статический класс. Когда ваша база кода растет LOT, вы начинаете оценивать autoload и вы начинаете оценивать статические классы независимо от того, что ДРУГИЕ говорят вам. Так:

best practices == guidelines && best practices != mandatory practices
best practices != what works best in your specific scenario

^ готовьтесь к отрицательным голосам сейчас 🙂

Оцените статью
TechArks.Ru
Добавить комментарий