Пожалуй, настала моя очередь задать вопрос на этом форуме.
Честно сказать, я слабо разбираюсь в классах, поэтому, вряд ли сам справлюсь с этой задачей.
Хочу расширить функционал SimpleXML в рамках пробного проекта (добавить в класс две публичные функции).
Как пытаюсь это сделать:
PHP:
скопировать код в буфер обмена
<?PHP class ExtSimpleXMLElement extends SimpleXMLElement { public function construct($data, $options = 0, $data_is_url = false, $ns = "", $is_prefix = false) { return parent::__construct($data, $options, $data_is_url, $ns, $is_prefix); } public function collectAttributes($tag, $attributes) { $found = false; foreach ($attributes as $attribute) { $output[$attribute] = self::findAttribute($tag, $attribute); if (!empty($output[$attribute]) && $found === false) { $found = true; } } return ($found) ? $output : array(); } public function findAttribute($tag, $attribute) { if (!isset($tag, $attribute)) { return false; //"Функции переданы не все параметры"; } $all_items = self::xpath('//' . $tag); $i = 1; foreach ($all_items as $item) { $item_attributes = $item::attributes(); $subject = (string)$item_attributes[$attribute]; $result[$i] = $subject; } ++$i; } } else { return false; //"Во входном файле не найден тег {$tag}"; } return empty($result) ? false : $result; } } $xmlstr = '<?xml version="1.0" encoding="windows-1251"?><data><muffin name="Super" group="Mega" /></data>'; $xml = new ExtSimpleXMLElement($xmlstr); foreach ($xml->xpath('//muffin') as $muffin) { $muffin_box = $muffin->collectAttributes('muffin', array('name', 'group')); //Что-то делаем с $muffin_box ... }
Суть проблемы: $muffin становится объектом типа SimpleXMLElement и соответственно phpStorm не видит у него метода collectAttributes. Как это исправить?
Несмотря на ошибку найденную phpStorm все (вроде бы) работает.
Поскольку в классах вообще не разбираюсь, мог криво описать проблему. Буду уточнять по мере ваших вопросов...
upd: сам только что понял, насколько кривая функция, но вопрос пока не о ней, ее я сам исправлю. (Отредактировано автором: 25 Июля, 2013 - 19:57:31)
|