Мой вопрос заключается в следующем. Я принимаю, что, возможно, использование массива, а не объектов в PHP, может быть лучше для производительности; как я читал во многих постах. Но я работаю в среде, где код состоит из множества строк кода и множества массивов; проблема в том, что когда я хотел изменить или изучить код, я не знаю, какие переменные имеют массивы, например:
$person['age'] = 18;
$person['name'] = 'Robert';
У меня нет полной информации, если у этого человека есть другие данные; решение использует отладчик для просмотра какой другой информации хранит массив $ person.
Я думал о попытке использовать выражения (например, модели) для представления объектов. Подобно:
class Person {
const AGE = 'age';
const NAME = 'name';
}
$person[Person::AGE] = 18;
$person[Person::NAME] = 'Robert';
Так что я буду знать, какие атрибуты имеет Персона.
Вопросы:
Лучше использовать массив, чем объект?
если я предпочитаю использовать массив: есть ли способ улучшить удобство сопровождения кода, используя другой класс, как в примере выше?
Почему бы просто не сделать человека классом? Тогда вы знаете атрибуты, которые у них всех будут.
class Person {
protected $age;
protected $name;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
public function getAge() {
return $this->age;
}
public function getName() {
return $this->name;
}
Таким образом, если вы хотите добавить некоторую проверку типов или форматирование, вы можете добавить его к этому классу, вместо того, чтобы искать всюду по вашей кодовой базе, где находится ключ массива.
Эти объекты данных довольно просты, но вы сможете очень легко объединить функциональность, и вам будет легче поддерживать, зная, где они находятся.
Если ваши массивы, имеющие свойства для person, представляют разные объекты, вы сможете использовать абстрактный класс, чтобы знать, что у него есть свойство. Или просто интерфейс, указывающий, что класс будет иметь getAge
или же getName
метод.
Задание ключей вашего массива с помощью констант класса — это всего лишь небольшой шаг от использования объектов. Сделай этот шаг. Вы также можете избежать необходимости проверять, является ли ключ действительным в ваших массивах. Ваши объекты могут установить значение по умолчанию для вас, и вы можете с уверенностью использовать объект в отношении того, какие свойства он имеет.
Других решений пока нет …