Я изучаю ООП на PHP. И я смущен тем, что использовал статические методы и свойства.
В этом примере я использую небольшой пример кеша на стороне сервера. Но я не уверен, использовать статический метод и свойство
Итак, как создавать и использовать статический метод/свойства:
class Villa extends CI_Model
{
protected static $cacheOwner = null;
public static function owner()
{
if (! is_null(static::$cacheOwner)) {
return static::$cacheOwner;
}
}
}
Используйте его как
Villa::owner();
Я думаю, что это сработает, но лучше использовать «статический»? Или я должен использовать «статический» , если наследует свойство или метод родительского класса?
Нет, это не правильно, потому что на всех статичным считается harmful
и anti-pattern
. В терминах object oriented programming
, где Objects
инкапсулировать состояние и предоставить методы для преобразования этого состояния, но когда вы используете свойства и методы static
, он нарушает принцип, потому что он (статический) сохраняет одно и то же состояние на всех экземплярах, и, следовательно, это class oriented programming
, а не OOP
. В классах OOP
просто чертежи/тип данных и объекты - это то, что входит в игру. Также статические методы/классы не облегчают модульное тестирование из-за жесткой зависимости, а также трудно расширить. В некоторых случаях, таких как singleton design pattern, статические методы/свойства класса, вероятно, полезны, но сам он (singleton) считается плохим шаблоном проектирования и из OOP
. Проверьте SOLID и другие ссылки, приведенные в разделе (См. Также).
Итак, старайтесь избегать static
, и, наконец, никто не может рассказать вам, что вам нужно в вашем классе, но вы, потому что знаете, что собираетесь делать, и как ваш класс связан с вашим приложением, и если вам нужно поддерживать одно и то же состояние свойства/данных вплоть до жизни вашего приложения, тогда вы можете использовать его, но не уверены. Кроме того, отметьте this search result и прочитайте несколько хороших ответов, вы узнаете много отсюда, по крайней мере, я сделал много, и я нашел this article с некоторыми примерами, также может быть полезен.
Этот вопрос не соответствует теме, потому что ответы, как представляется, в основном основаны на мнениях –
Вы понимаете, в чем разница между статическими и нестационарными свойствами и методами? – deceze
'Я думаю, что это сработает, но лучше использовать« статический »?« Почему же так лучше? – Touch