Ответ 1
class Person
{
private static $people_array;
static public function data_all_get()
{
self::$people_array = //DBStuff
}
static public function showPeople()
{
$people_data = self::data_all_get();
}
}
Всего несколько заметок, некоторые, возможно, очевидны. 1) Как и вы, вы не возвращаете ничего такого явно, что приведенный выше код не сработает. Нет ничего плохого, например, с приведенным выше кодом. В ответ на ваш Q1 все, что вы сделали, взяли пару вызовов функций с использованием глобальной переменной и инкапсулировали их внутри класса. Я бы посоветовал иногда использовать это как экземпляр класса, а иногда и не делать этого, так как это сделает ваш окончательный код менее понятным и более трудным для понимания людьми, когда они его просмотрят.
Если вы беспокоитесь о том, чтобы создать экземпляр этого более одного раза, вам может понадобиться посмотреть шаблон дизайна singleton, но в целом, если вы планируете создавать экземпляр класса в какой-то момент, я бы переосмыслил, почему вы назвав их статически в первую очередь. Нет ничего плохого в этом, скажем, кроме того, что это "неправильно" для меня.
Q2) Единственная возможность сделать data_all_get в статическом массиве - это то, что ссылается на статическое свойство, которое, в свою очередь, означает, что это свойство будет недоступным, если оно создается. Кроме того, вы теряете возможность создавать несколько версий этого класса (если это имеет значение) и в основном превращать people_array в глобальную переменную. Это не обязательно плохо, но не зная, что остальная часть вашей функциональности делает это трудно сказать, каковы последствия.
Q3) Единственная проблема, выполняющая его несколько раз: A) уничтожение всех, что находится в массиве людей, и B) множественные вызовы БД. Не видя, что происходит с другим кодом, этот вопрос более или менее невозможно ответить.
Q4). Память для метода, размер которого вы указали здесь, ничтожно мал, о чем не стоит говорить. Озабоченность связана с самим вызовом DB и количеством доступных там строк.
Наконец, это немного странно, поскольку у вас есть этот код, написанный сейчас, поскольку showPeople выполняет то же самое, что и data_all_get. Вероятно, вы захотите написать некоторую логику внутри showPeople, чтобы узнать, пуст или нет файл $people_array, и если да, запустите data_all_get, а если нет, верните people_array. Это позволит избежать дополнительных чтений БД. Если вы собираетесь читать DB каждый раз в любом случае, тогда вы можете также иметь data_all_get return $people_array, и в этом случае ни одно из этого не должно быть внутри класса, и это может быть просто вызов функции, который возвращает то, что он находит в db.