Использование констант для определения атрибутов объектов модели с использованием массивов в переполнении стека

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

$person['age'] = 18;
$person['name'] = 'Robert';

У меня нет полной информации, если у этого человека есть другие данные; решение использует отладчик для просмотра какой другой информации хранит массив $ person.

Я думал о попытке использовать выражения (например, модели) для представления объектов. Подобно:

class Person {
const AGE = 'age';
const NAME = 'name';
}

$person[Person::AGE] = 18;
$person[Person::NAME] = 'Robert';

Так что я буду знать, какие атрибуты имеет Персона.

Вопросы:
Лучше использовать массив, чем объект?
если я предпочитаю использовать массив: есть ли способ улучшить удобство сопровождения кода, используя другой класс, как в примере выше?

0

Решение

Почему бы просто не сделать человека классом? Тогда вы знаете атрибуты, которые у них всех будут.

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 метод.

Задание ключей вашего массива с помощью констант класса — это всего лишь небольшой шаг от использования объектов. Сделай этот шаг. Вы также можете избежать необходимости проверять, является ли ключ действительным в ваших массивах. Ваши объекты могут установить значение по умолчанию для вас, и вы можете с уверенностью использовать объект в отношении того, какие свойства он имеет.

3

Другие решения

Других решений пока нет …