Почему self :: function () и $ self-> variable или self :: $ variable, даже если есть $ this-> function () и $ this-> variable (PHP)? - PullRequest
1 голос
/ 09 ноября 2009

Я запутался в этих двух ключевых словах и способах их использования в PHP5. Я думаю, что «this» используется для экземпляров объектов (не статических), в то время как «self» относится к самому объекту, а не к его экземпляру и, следовательно, используется в статических объектах. Правильно?

Теперь я считаю, что правильное использование внутри статического метода класса для вызова другой статической переменной / метода следующее:

self::doSomething();
self::$testVar;

Это правда?

Однако возможно также следующее:

$self->testVar;

Тем не менее, $ testVar является статическим. Почему это?

Кроме того, почему $ используется иногда вместо себя, а иногда нет, и тот же вопрос для ключевого слова "this"?

Ответы [ 2 ]

5 голосов
/ 09 ноября 2009

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

class A
{
  public static function foo()
  {
    $this->bar();
  }

  public static function bar()
  {
    echo 'foobar!';
  }
}

A::foo(); // Fatal error: Using $this when not in object context

Это приводит к фатальной ошибке, потому что foo () вызывается статически. Лучше всего занять некоторое время и использовать их надлежащим образом, а не всегда использовать один или другой.

3 голосов
/ 09 ноября 2009

Вы, кажется, правильно понимаете это. self :: используется для статических членов и функций, когда у вас нет доступного экземпляра объекта, а синтаксис $ this-> используется, когда вы это делаете.

Так что в статическом методе вы должны будете использовать self :: b / c, статический метод - это просто ... static и может быть вызван без экземпляра создаваемого объекта. (т. е. YourClass :: staticFunction ()) Вполне логично использовать $ this-> memberVar в нестатическом методе, поскольку функция вызывается через экземпляр объекта. ($ yourClass-> nonStaticFunction ()) Поэтому $ this на самом деле существует в контексте функции.

...