За последние 24 часа нас посетил 17521 программист и 1687 роботов. Сейчас ищут 859 программистов ...

Обращение к параметру объекта через переменную

Тема в разделе "Прочие вопросы по PHP", создана пользователем Aspiring, 5 мар 2014.

  1. Aspiring

    Aspiring Новичок

    С нами с:
    5 мар 2014
    Сообщения:
    2
    Симпатии:
    0
    Добрый день уважаемые форумчане.
    Вот все таки решил сделать еще один шаг в ООП.
    все модели или почти все, которые я использую, работают с БД. поэтому в каждой модели уместно использование одних и тех же функций. в частности это exchangeArray(), toArray(). Решил подойти к вопросу с рефлексией.

    Идея в том чтобы заполнять параметры разных классов по ключам в массиве.
    - Есть ключ? если есть то установить параметр класса совпадающий названием с ключем массива в значение массива под совпадающим ключем. Иначе за null'ить.

    на данный момент вот что вышло

    Код (Text):
    1.  
    2. class MyClass{
    3.     public $id;
    4.     public $param1;
    5.     public $param2;
    6.     ...
    7.     public $paramN;
    8.    
    9.     public function __construct (){}
    10.    
    11.     // извлечение свойств из массива
    12.     public function exchangeArray($data){
    13.         if (  !is_array ( $data )){
    14.             throw new Exception("Переменная должна быть массивом");
    15.         }
    16.        
    17.         $reflect = new ReflectionClass(__CLASS__);
    18.         $publicVars = $reflect->  getProperties(ReflectionProperty::IS_PUBLIC);
    19.        
    20.         foreach ( $publicVars as $var) {
    21.             $varName = $var->name;
    22.             if (isset($data[$varName])){
    23.                 $data2 = $data[$varName];
    24.             }
    25.             $data3 = $this->${$varName};
    26.             $this ->${$varName} = isset($data[$varName]) ? $data[$varName] : NULL;
    27.         }
    28.     }
    29.    
    30.     // передача свойств в массив
    31.     public function ToArray(){
    32.         $reflect = new ReflectionClass(__CLASS__);
    33.         $publicVars = $reflect->  getProperties(ReflectionProperty::IS_PUBLIC);
    34.        
    35.         $array = array();
    36.        
    37.         foreach ( $publicVars as $var) {
    38.             $varName = $var->name;
    39.             $array[$varName] = isset(self::$varName)?self::$varName:NULL;
    40.         }
    41.         return $array;
    42.     }
    43.     ...
    44. }
    ошибка возникает (точнее прерывается выполнение скрипта на строках
    $varName = $var->name;
    if (isset($data[$varName])){ <-- просто вылетает скрипт, никаких исключений, никаких сообщений.

    Подскажите как реализовать задуманное?
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    с чего вы решили что вылетает именно отсюда? раз нет ни сообщений ни ошибок.
     
  3. Aspiring

    Aspiring Новичок

    С нами с:
    5 мар 2014
    Сообщения:
    2
    Симпатии:
    0
    xdebug подсказал))