PHP: Сколько из этих строк не работает, статический или нестатический доступ - PullRequest
0 голосов
/ 13 июня 2011

http://codepad.viper -7.com / ezvlkQ

Итак, я пытаюсь выяснить:


...?php

$object = new A();

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

A::displayFoo();
A->displayFoo();
?>

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

Ответы [ 3 ]

3 голосов
/ 13 июня 2011

Я обновил ваш код здесь http://codepad.viper -7.com / UaUE4g

Ошибка 1:

echo $this->$foo;

Это должно читаться как:

echo self::$foo;

.. как статическое.

Ошибка 2:

A::displayFoo();

Метод является методом экземпляра :: используется для доступа к статическим методам.

Ошибка 3:

A->displayFoo();

Это ошибка, потому что A не определена, и если бы это было так, она должна была прочитать $A.Это будет нормально:

$object->displayFoo();

.., поскольку $ object является экземпляром класса A.

Следующим шагом обратитесь к руководству по теме static .

1 голос
/ 13 июня 2011

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

Class A {
   static public $foo = 'WOOHOOO';
   static function displayFoo() {
       echo self::$foo;
   }
}

echo A::displayFoo();

Это работает, потому что вы вызываете метод displayFoo, принадлежащий классу A. Или вы можете сделать это:

Class A {
    public $foo = "WOOHOO";
    public function displayFoo() {
        echo $this->foo;
    }
}

$obj = new A();
$obj->displayFoo();

Теперь вы создаете объект на основе класса A. Этот объект может вызывать его методы. Но объект не имеет статических методов. Если бы вы объявили функцию статической, она была бы недоступна для $obj.

Вы не можете сделать:

A->displayFoo()

вообще, ни при каких обстоятельствах, никогда. Оператор -> предполагает наличие объекта, а A не может быть объектом, поскольку он не является переменной.

0 голосов
/ 13 июня 2011

Вы можете прочитать о статических членах класса в руководстве здесь:

http://php.net/static

Обратите особое внимание на примеры.

...