Пишу специфичный калькулятор и хочется, что бы всё было красиво, но вопрос на сколько это разумно, на сколько это сильно влияет на производительность и нужно ли это вообще . . .
1. Сейчас я обращаюсь к атрибуту класса так class->arr["name"], а хочется class->arr->name и это спокойно делается через магический метод __get, но что делать если у меня многомерный массив (class->arr->name["attr"])? Какую конструкцию использовать? Как лучше всё это упаковать, что бы потом так же красиво забрать от туда.
2. Как стоит поступить в таком случае:
У меня есть параметры материалов которые не меняются например материал и его габариты.
Лучше сделать массив с названием материала бревно(длина 3, ширина 5, высота 50) или лучше создавать отдельные массивы БревноДлина 3; БревноШирина 5; БревноВысота 50; и наверное стоит такие параметры вынести в отдельный ini-файл?
1. не трогай свойства напрямую, используй методы.
$obj->getProperty($propertyName); //class->arr["name"]
$obj->getPropertyAttribute($propertyName, $attributeName); // class->arr->name["attr"]
если уж совсем невмоготу - сделай json_decode(json_encode($a)) - получишь объекты заместо массивов. но это патология.
2. лучше сделать массив с названием материала бревно(длина 3, ширина 5, высота 50).
разбирать потом названия вида БревноШиринаДверьСобакаТелеграф это обратно патология.
хранить данные в ини-файлах это сцуко оригинально, но лучше так не делать.
Бро, спасибо! Начну с конца.
- Я как-то читал, что низкоуровневые параметры для производительности выгоднее хранить в ini файлах (писали это в комментах на php.net)
- Делать массивы с материалами конечно круче, но обращаться к ним как то уже не очень красиво выходит. $this->БревноРакета vs $this->Бревно[Ракета].
А хочется что бы было так $this->Бревно->Ракета
- Про геттер/сеттер зачем мне они если я делаю вызов атрибута из класса в котором этот атрибут существует?
про ini - да, вполне можно, но синтаксис ini файлов довольно-таки брутальный и олдскульный. в принципе для простых вещей покатит, но тот же json будет погибче в определенных ситуациях.
насчет производительности - на данный момент чтение любого файла вменяемого размера на производительности не может сказаться вообще никак.
про матералы - если уж мы работаем с ооп, я бы завел вообще класс Material и у него свойство "parameters" в виде массива, и т.д. Ну тут надо предметную область понять, по твоим примерам не очень понятно что там и как.
про сеттеры/геттеры - опять же, раз мы пользуемся ооп, давайте пользоваться им нормально. сеттеры и геттеры нужны чтобы прятать имплементацию, упрощая доступ и прочие манипуляции с данными, а также валидировать входные значения.
даже внутри самого класса, намного проще, читабельнее и безопаснее использовать методы вместо прямого обращения к свойствам.
а если в дальнейшем у тебя банально поменяется название свойства "arr" - достаточно будет поправить его в геттерах и сеттерах вместо того чтобы лазить по всему проекту рискуя где-то что-то пропустить. конечно, с учетом современных ide оно не так страшно, тем не менее, идея именно в этом.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.