2013-10-07 2 views
0

Я изучаю ООП в PHP. И я смущен в использовании методов и свойств static.Нужно ли использовать статический метод и свойство в этом классе?

В этом примере я использую небольшой пример кеша на стороне сервера. Но я не уверен в использовании статического метода и свойства.

class Villa extends CI_Model 
{ 
    // Cache 
    protected $cacheOwner; 

    ... 

    public function owner() 
    { 
    if (! empty($this->cacheOwner)) 
     return $this->cacheOwner; 

Я думаю, что это сработает, но лучше использовать «статический»? Или я должен использовать «статический» только тогда, когда наследует свойство или метод родительского класса?

+4

Этот вопрос не соответствует теме, потому что ответы, как представляется, в основном основаны на мнениях –

+0

Вы понимаете, в чем разница между статическими и нестационарными свойствами и методами? – deceze

+0

'Я думаю, что это сработает, но лучше использовать« статический »?« Почему же так лучше? – Touch

ответ

1

Я изучаю ООП на 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 с некоторыми примерами, также может быть полезен.

0

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

Смежные вопросы