StaDi
@StaDi
Курьер в it отделе

Хотейки и вопросы по проектированию классов?

Всем дрям, я с новой порцией глупостей.

Пишу специфичный калькулятор и хочется, что бы всё было красиво, но вопрос на сколько это разумно, на сколько это сильно влияет на производительность и нужно ли это вообще . . .

1. Сейчас я обращаюсь к атрибуту класса так class->arr["name"], а хочется class->arr->name и это спокойно делается через магический метод __get, но что делать если у меня многомерный массив (class->arr->name["attr"])? Какую конструкцию использовать? Как лучше всё это упаковать, что бы потом так же красиво забрать от туда.

2. Как стоит поступить в таком случае:
У меня есть параметры материалов которые не меняются например материал и его габариты.
Лучше сделать массив с названием материала бревно(длина 3, ширина 5, высота 50) или лучше создавать отдельные массивы БревноДлина 3; БревноШирина 5; БревноВысота 50; и наверное стоит такие параметры вынести в отдельный ini-файл?

Спасибо!
  • Вопрос задан
  • 2329 просмотров
Решения вопроса 3
1. не трогай свойства напрямую, используй методы.
$obj->getProperty($propertyName); //class->arr["name"]
$obj->getPropertyAttribute($propertyName, $attributeName); // class->arr->name["attr"]

если уж совсем невмоготу - сделай json_decode(json_encode($a)) - получишь объекты заместо массивов. но это патология.

2. лучше сделать массив с названием материала бревно(длина 3, ширина 5, высота 50).
разбирать потом названия вида БревноШиринаДверьСобакаТелеграф это обратно патология.

хранить данные в ини-файлах это сцуко оригинально, но лучше так не делать.
Ответ написан
iximiuz
@iximiuz
По первому пункту налицо нарушение закона Деметры. Вероятнее всего нужно по-другому поделить ответственность между классами, чтобы не возникала необходимость делать длинные цепочки вызовов.

По поводу второго пункта. PHP и так вполне себе DDL язык. Если нужно хранить данные, то можно спокойно их хранить в специальных PHP файлах, содержащих один массив, например. И инклюдить их в нужном месте. Все эти замесы с ini-файлами (и еще того хуже xml-файлами) пошли от компилируемых языков, особенно из Java, когда описать конфиги непосредственно в Java-коде с возможностью их изменения без перекомпиляции всей программы достаточно проблематично.
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вы как то странно используете классы. Если name - свойство экземпляра класса, то почему бы не обращаться напрямую. Опять же если описывать логику классами - то надо описывать логику классами.
class car 
{
  public $manufacturer;
  public $engine;
  function __construct ()
  {
   $this->engine = new carEngine();
  }
}
$car = new car();
$car->manufacturer = 'bmw';
$car->engine->type = 'v6';

итд
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы