Статичный или не статичный?

Что лучше использовать в этом контексте, статических методах или простом открытом методе и всегда называть их как это: $request = новый Запрос (); если ($request-> isPostRequest ()) {делают что-то}, конечно, его более легкое для использования статичный, но что должно более правильно использовать?

Class Request {
 public static function isSecureConnection() {}
 public static function isPostRequest() {}
 public static function isAjaxRequest() {}
 ...etc

}
7
задан Vlad 8 August 2010 в 06:43
поделиться

4 ответа

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

В целом, лучше объявлять статические функции в классе, который состоит только из функций и не имеет членов данных.

6
ответ дан 7 December 2019 в 05:15
поделиться

Вы всегда должны создавать класс, как если бы он использовался в нестатической среде.

Затем вы можете использовать это как синглтон с отложенным созданием. Или даже как экземпляр статического класса. Или даже как объект автономного экземпляра. Что с этим делать, решите вы позже.

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

Итак, просто напишите как класс, а затем вы решите, что с ним делать. Статический / нестатический. Синглтон / экземпляр. Заводской узор или нет. Распределитель памяти X / DLL привязан или еще много чего.

Единственное исключение - статические члены, используемые для бухгалтерского учета от имени экземпляров объектов; такие вещи, как подсчет ссылок, кеши и тому подобное. Это хорошая вещь о статике / нестатике, вы можете смешивать и сочетать некоторые умные поведения.

Что, если позже вам понадобится еще один запрос? Или что произойдет, если вы сможете создать более одного, потому что вы находитесь в многопоточной среде? Все станет по-настоящему странным, если вы пойдете по этому маршруту со статикой.

1
ответ дан 7 December 2019 в 05:15
поделиться

Объявление свойств или методов класса статическими делает их доступными без создания экземпляра класса. К свойству, объявленному как статическое, нельзя получить доступ с помощью созданного объекта класса (хотя статический метод может).

Пример:

<?php
class Foo {
    public static function aStaticMethod() {
        // ...
    }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>

См. Ссылку на Статическое ключевое слово с php.net .

0
ответ дан 7 December 2019 в 05:15
поделиться

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

0
ответ дан 7 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: