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

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

 

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

 

 
<?php
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()
  )
?>
 

 

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

 

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

 

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

 

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

 

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

 

 
<?php
  $person = array(
    'firstname'=>'Cleverscript', 
    'lastname' => 'Script'
    );
  $p = (object) $person; 
  echo $p->firstname; // Will print 'Cleverscript' 
  ?>
 

 

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

 

 
<?php
function arrayToObject($array){
  if(count($array)>0){ 
      foreach($array as $key => $value){
          if(is_array($value)){
              $array[$key] = arrayToObject($value);
            }
         }
 
        return (object)$array;
  } 
   else{ 
    return FALSE; 
  } 
}
 
$array = array(
    'firstname'=>'Cleverscript', 
    'lastname' => 'Script'
    );
 
$p = arrayToObject($array); 
 
print_r($p);
?>
 

 

PS. И не забудьте подписатся на ленту новостей RSS

Метки:

Похожие статьи:

Комментарии 

 
anonim Пятница, 10 Сентябрь 2010

прЕобразовывает + так звучит лучше.

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

З.Ы. в глаза просто бросается

 

 
 
anonim Пятница, 10 Сентябрь 2010

приобразуеться

 

 
 
anonim Пятница, 10 Сентябрь 2010

Спасибо! Надо будет сделать кнопку коррекции ошибок

 

 
 
anonim Суббота, 20 Ноябрь 2010

Нужно по больше таких статей делать как эта.

 

 
 
anonim Воскресенье, 19 Декабрь 2010

Огромное человеческое спасбо!

 

 
 
anonim Суббота, 25 Декабрь 2010

Здравствуйте все
Благодарю за тему, очень выручило. Вообще супер сайт с выгодной статистикой =)
Хочу узнать о покупке банера на этом портале. недорогое такси www*tax*is*at*ru (Москва) Наверху и можно слева в топиках. Ну или каких-либо других вкусных рекламных тем.
Расскажите, где заказать, какие возможности у вас?
Хочу оптом размещать ссылки, статьи и др. надеюсь эти сайты подойдут для ваших целей.
Я приобретала банеры на разных форумах всего за 2500 руб. в неделю за статьи.
Пожалуйста ответьте тут, напишите вашу цену. Нужно для отчёта ;)

Ещё рассмотрю предложения по заказу и покупке статей на вашем сайте. Куплю дорого!

P.S. Надеюсь на наше долгосрочное сотрудничество. Большое спасибо, жду ваших предложений желательно с порядком работы и ценой.

 

 
 
anonim Воскресенье, 26 Декабрь 2010

Пишите на email - toorr2p[dog]big mir[dot]net
По поводу статей не уверен что они подойдут, баннеры с права, и в статьях растяжка по ширине поста, вверху или внизу, какие вам нужны размеры? от них зависит стоимость.

 

 
 
anonim Среда, 29 Декабрь 2010

Это ваше творчество еще раз докозывает несостоятельнос ть Джумлы

По-моему, проще одной строкой $obj = (object)$my_arr ay;

 

 
 
anonim Среда, 29 Декабрь 2010

А это вы не заметили в листинге? > $p = (object) $person;

 

 
 
anonim Вторник, 04 Январь 2011

Дорогие друзья блогеры!
Поздравляю Вас с Новым 2011 Годом и Рождеством!

Пусть все проблемы и трудности останутся в прошлом, а наступающий год принесет стабильность, удачу и процветание!

Так же желаю Вам крепкого здоровья, новых сил что бы писать прекрасные статьи и блоги вцелом!!! С Новым ГОДОМ!!!

 

 
 
anonim Вторник, 04 Январь 2011

Спасибо и вас также с праздниками!!!

 

 
 
anonim Среда, 05 Январь 2011

Спасибо, классный блог) Даже добавил в закладки, хотя делаю это редко)

 

 
 
anonim Пятница, 25 Февраль 2011

спасибо большое было очень интересно прочитать

 

 
 
anonim Вторник, 21 Июнь 2011

Что-то с Вашим листингом не то - не полон он. Не видно описание функции arrayToObject.

 

 
 
anonim Среда, 22 Июнь 2011

Исправлен листинг функции arrayToObject

 

 
 
anonim Пятница, 09 Ноябрь 2012

Этот пост — одно из немногих исключений, когда читаешь с интересом и что-то для себя выносишь. Спасибо автору. Добавлю в избранное. :)

 

 

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