Я смотрел какой-то код, и мне сложно разрабатывать объявление переменных в php–классах. В частности, кажется, что код, который я просматриваю, не объявляет переменные класса, прежде чем он их использует. Теперь это можно ожидать, но я не могу найти информацию о том, что это возможно. Так вы ожидали бы этого:
class Example { public function __construct() { $this->data = array(); $this->var = 'something'; } }
работать? и создает ли эти переменные в экземпляре класса, который будет использоваться в дальнейшем?
Это работает так же, как и нормальное объявление переменной:
$foo = 'bar'; // Created a new variable class Foo { function __construct() { $this->foo = 'bar'; // Created a new variable } }
Классы PHP не совсем такие же, как на других языках, где переменные-члены должны быть указаны как часть объявления класса. Члены класса PHP могут быть созданы в любое время.
Сказав это, вы должны объявить переменную как public $foo = null;
в декларации класса, если он должен быть постоянным членом класса, чтобы четко выразить намерение.
Так вы ожидали бы этого: (образец кода) для работы?
Да. Это довольно плохая практика (по крайней мере, это делает сканирование на C ++), но это нисколько не удивит меня. См. Пример 2 на следующей странице для примера использования другого класса, не объявляя его заранее. http://www.php.net/manual/en/language.oop5.basic.php Он выдает ошибку, если включен E_STRICT.
И создает ли эти переменные в экземпляре класса, который будет использоваться в дальнейшем?
Ага. Разве это не PHP Fun? Исходя из фона C ++ / C #, PHP занял некоторое время, чтобы вырасти на мне с его очень свободным набором текста, но он имеет свои преимущества.
Это полностью функционально, хотя мнения будут отличаться. Поскольку создание переменных-членов класса в конструкторе, они будут существовать в каждом экземпляре объекта, если не будут удалены.
Традиционно объявлять переменные-члены класса с информативными комментариями:
class Example { private $data; // array of example data private $var; // main state variable public function __construct() { $this->data = array(); $this->var = 'something'; } }