StdClass - из обычного массива

Четверг, 06 Май 2010

При разработке расширений для Joomla - компонентов, модулей или плагинов, вы абязательно столкнетесь с объектом StdClass. Произойдет это хотя-бы потому, что все параметры настроек модуля, компонента, или плагина доступны именно в таком виде:


  1.  
  2. JParameter Object ( [_raw] => source_sec=12, 9:34, 9:35, 10 nametext=Latest template=default.php [_xml] => [_elements] => Array ( ) [_elementPath] => Array ( [0] => W:\home\localhost\www\funky_dyk\libraries\joomla\html\parameter\element ) [_defaultNameSpace] => _default [_registry] => Array ( [_default] => Array ( [data] => stdClass Object ( [source_sec] => 12, 9:34, 9:35, 10 [nametext] => Latest [template] => default.php ) ) ) [_errors] => Array ( ) )
  3.  

Такую картину можно увидеть используя функцией print_r(), передав ей в качестве аргумента параметры в виде объекта, которые доступны в каждом модуле и содержатся в переменной $params.


  1.  
  2. stdClass Object ( [source_sec] => 12, 9:34, 9:35, 10 [nametext] => Latest [template] => default.php ).
  3.  

StdClass не достаточно хорошо документирован и является встроенным обьектом PHP используется в Zend машине. Поэтому прямо определить класс с именем StdClass в коде своего PHP приложения вы не можете, вы можете лишь создать экземпляр класса и определить его переменные.


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


Вот пример в котором массив приобразуеться в объект, такой пример называется - приобразование типов:


  1.  
  2. <?php
  3. $person = array (
  4. 'firstname' => 'Cleverscript',
  5. 'lastname' => 'Script'
  6. );
  7. $p = (object) $person;
  8. echo $p->firstname; // Will print 'Cleverscript'
  9. ?>
  10.  

А этот пример содержит функцию которая приобразует многомерный массив в объект stdClass с помощью рекурсии:


  1.  
  2. <?php
  3. function arrayToObject($array) {
  4. if(!is_array($array)) {
  5. return $array;
  6. }
  7. $object = new stdClass();
  8. if (is_array($array) && count($array) > 0) {
  9. foreach ($array as $name=>$value) {
  10. $name = strtolower(trim($name));
  11. if (!empty($name)) {
  12. $object->$name = arrayToObject($value);
  13. }
  14. }
  15. return $object;
  16. }
  17. else {
  18. return FALSE;
  19. }
  20. }
  21. ?>
  22.  

  1.  
  2. <?php
  3. $person = array (
  4. 'first' => array('name' => 'Cleverscript')
  5. );
  6. $p = arrayToObject($person);
  7. ?>
  8.  

  1.  
  2. <?php
  3. // теперь вы можите использовать $p таким образом:
  4. echo $p->first->name; // Выведет 'Cleverscript'
  5. ?>
  6.  
]]>

06 Май 2010

]]>
 

Добавить комментарий


Защитный код
Обновить

]]>
Получать на E-mail:
Подпишись на обновления!
]]>