За последние 24 часа нас посетили 18180 программистов и 1651 робот. Сейчас ищут 1614 программистов ...

а как вы реализуете проперти?

Тема в разделе "Решения, алгоритмы", создана пользователем tenshi, 2 июн 2010.

  1. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  3. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Фокус в том что оно не везде нужно.
    А там где нужно подобные вещи обзываются мапперами/валидаторами/фильтрами.

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

    Для вычисляемых полей - сброс кеша в измененных полях - неудобен :(
    Возможно стоит это централизовать для всех полей по аналогии как сделано в Zend_Db_Table_Row
    PHP:
    1. <?php
    2. protected $_data = array();
    3. protected $_modified = array();
    4.  
    Соответственно вычисляемое поле будет само проверять есть ли измененные свойства.
    Да и сам вопрос такого кеширования для объекта - спорен. Чего экономим? Пару вызовов методов?

    Для объектов
    PHP:
    1. <?php
    2. return clone $val;
    3.  
    возврат клонированной сущности тоже под вопросом... Мягко говоря идет вразрез с типичным использованием объектов.
    Лучше это оставить на усмотрение пользователя api

    Этого не понял
    Код (Text):
    1. _call($name, $args)
    2. set_($var)
    3. get_($var)
    Последние два зачем-то должны отработать для пустой переменной?
    А в первом вообще не вижу смысла.
     
  4. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    типизация? а кто-то заставляет использовать везде?

    ни один из этих терминов не отражает суть. да и какая в сущности разница как что называть?

    ну не так уж много кода получается, чтобы уж на стенку лезть

    а вот это действительно вредная практика

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

    PHP:
    1. <?php
    2. protected $_data = array();
    3. protected $_modified = array();
    вот очень бы не хотелось хранить все данные в одном поле. ибо это создаёт проблемы при наследовании с добавлением новых полей. но можно ввести какое-нибудь поле $_backup=array() куда складировать прошлые значения.

    угу, и будет однонаправленная зависимость кода, а не двунаправленная как у меня. это гораздо менее геморройно поддерживать.

    кэширование, разумеется, нужно лишь там, где получение значения - это дорогостоящая операция.

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

    эти методы предназначены для опциональной перегрузки в дочерних классах.
    _call позволяет перехватывать вызовы несуществующих методов, не нарушая апи пропертей.
    get_ и set_ - это фильтры по умолчанию для тех свойств, для которых не заданы методы get_* и/или set_*
     
  5. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    это может пригодиться, но не в такой реализации, а просто в виде обычных конвертеров
     
  6. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    а что не так в реализации?
     
  7. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    ИМХО должны быть простые декораторы, а не всякие call_user_func, наследование и т.п.
     
  8. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
  9. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    tenshi
    блин, причёт тут оффтопик, я говорю о том что ты спросил.
    И еще
    на счет этого - у тебя полный бред, как ты можешь так говорить, если ты их используешь!
    Вывод, может он и не верный с твоей точки зрения, то много людей могут так и понять, что ты сам не понимаешь что и зачем ты делаешь!
     
  10. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    вот и я не знаю при чём тут он. все видят адаптивную типизацию и как быки несутся на красную тряпку.

    я с помощью камня заточил топор и предлагаю им рубить дрова, а не камнем.
    развиваем логическое мышление, товарищи.
     
  11. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    аа, ты об этом, да...
    А вот знаешь почему? Я об этом немого упомянул, но надо уточнить, когда люди смотрят твой код - они, допустим как программисты (по другому лучше тут не говорить ;) ) не видят функционала который ты предлагаешь, то есть твой код не интуитивно понятен, что может характеризовать твою идею не с хорошей стороны.
    Я понял твою идею, и не смотря на то, что ты говоришь про красную тряпку, она завязывается на предложенном тобой оффтопике. Я тебе предлагаю делать это внутри __get и __set, специфично для конкретной реализации владельца свойств и отдельными объектами!
     
  12. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
  13. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    тогда ты говоришь о банальных вещах
     
  14. tenshi

    tenshi Активный пользователь

    С нами с:
    1 июн 2010
    Сообщения:
    191
    Симпатии:
    0
    разумеется