php 5.3 +
Извините за длинный вопрос, но я хочу полностью изучить это.
Я знаю, что не могу вызвать нестатический метод одного класса из статического метода, не создавая экземпляр класса как объекта.
class Person
{
private $people_array;
function data_all_get()
{ // touch database, return array of people
$this->people_array = // etc dbquery results
}
static function showPeople()
{ // call class method
$people_data = $this->data_all_get();
// Fatal error: Using $this when not in object context
}
} // end class Person
От поиска по SO я нашел несколько интересных подходов, но задаюсь вопросом, как каждый подход влияет на среду кода.
Мои вопросы ниже:
Я мог бы создать экземпляр класса как объекта внутри статического метода, чтобы получить доступ к нестационарному методу
static function showPeople()
{ // instantiate as object
$person = New Person();
// call class method
$people_data = $this->data_all_get();
}
Q1 - какие проблемы могут возникнуть? в моей ситуации класс не имеет конструктора, поэтому никакие другие методы класса и вары не будут затронуты экземпляром. Будет ли этот новый объект занимать немного места в памяти во время выполнения script? Не кажется слишком плохим...
другой вариант заключается в преобразовании метода data_all_get в статический метод, поэтому его можно было бы вызвать из статического метода showPeople, т.е.
self::showPeople()
метод "data_all_get" используется другими методами в классе, когда он создается как объект, чтобы установить значение private var, чтобы уменьшить поездки в базу данных, если он уже установлен. Я знаю, что это, вероятно, может быть частью функции-конструктора, но мне никогда не нужно, чтобы этот объект "Person" устанавливался более одного раза за запрос php script, класс в основном используется для группировки функций и варов вместе для организации...
Q2 - каковы последствия создания "data_all_get" в статическом методе? есть ли? если метод был статичным, но он устанавливает значение private var $people_array (которое не является статическим), я думаю, что var может быть обновлен или перезаписан, если объект когда-либо понадобился для создания второго раза в одном script запрос, правильно? Плюс, поскольку свойство не статично, другие методы класса могут получить к нему доступ.
Q3. Могу ли я вызвать статический метод "data_all_get" столько раз, сколько захотел, не "сломав что-либо" (загруженный вопрос IK).
Q4. Он просто использует дополнительную память каждый раз при вызове статического метода?
Спасибо