Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Расширение класса SimpleXMLElement

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
VenZell
Отправлено: 25 Июля, 2013 - 19:52:48
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


Помог: 12 раз(а)




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

Как пытаюсь это сделать:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class ExtSimpleXMLElement extends SimpleXMLElement
  3. {
  4.  
  5.     public function construct($data, $options = 0, $data_is_url = false, $ns = "", $is_prefix = false)
  6.     {
  7.         return parent::__construct($data, $options, $data_is_url, $ns, $is_prefix);
  8.     }
  9.  
  10.     public function collectAttributes($tag, $attributes)
  11.     {
  12.         $output = array();
  13.         $found = false;
  14.         foreach ($attributes as $attribute) {
  15.             $output[$attribute] = self::findAttribute($tag, $attribute);
  16.             if (!empty($output[$attribute]) && $found === false) {
  17.                 $found = true;
  18.             }
  19.         }
  20.         return ($found) ? $output : array();
  21.     }
  22.  
  23.     public function findAttribute($tag, $attribute)
  24.     {
  25.         if (!isset($tag, $attribute)) {
  26.             return false; //"Функции переданы не все параметры";
  27.         }
  28.         $result = array();
  29.         $all_items = self::xpath('//' . $tag);
  30.         if (count($all_items)) {
  31.             $i = 1;
  32.             foreach ($all_items as $item) {
  33.                 $item_attributes = $item::attributes();
  34.                 $subject = (string)$item_attributes[$attribute];
  35.                 if (!empty($subject)) {
  36.                     $result[$i] = $subject;
  37.                 }
  38.                 ++$i;
  39.             }
  40.         } else {
  41.             return false; //"Во входном файле не найден тег {$tag}";
  42.         }
  43.         return empty($result) ? false : $result;
  44.     }
  45. }
  46.  
  47. $xmlstr = '<?xml version="1.0" encoding="windows-1251"?><data><muffin name="Super" group="Mega" /></data>';
  48. $xml = new ExtSimpleXMLElement($xmlstr);
  49. foreach ($xml->xpath('//muffin') as $muffin) {
  50.     $muffin_box = $muffin->collectAttributes('muffin', array('name', 'group'));
  51. //Что-то делаем с $muffin_box ...
  52. }
  53.  

Суть проблемы: $muffin становится объектом типа SimpleXMLElement и соответственно phpStorm не видит у него метода collectAttributes. Как это исправить?

Несмотря на ошибку найденную phpStorm все (вроде бы) работает.
Поскольку в классах вообще не разбираюсь, мог криво описать проблему. Буду уточнять по мере ваших вопросов...
upd: сам только что понял, насколько кривая функция, но вопрос пока не о ней, ее я сам исправлю. Улыбка

(Отредактировано автором: 25 Июля, 2013 - 19:57:31)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB