Функция PHP не возвращает объект

Рассмотрим следующую функцию PHP, которая должна загрузить объект из файла XML, выбранного в отношении языка:

function item1($Langu){
if($Langu=='bg'){
    $urlD = "someurl/rss1.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD,'cachedfeedDBG.xml',3600));
    $itemD = '';
    if($xmlD === FALSE)
        {$itemD = '';}
    else
        {$itemD = $xmlD->channel->item;}
}
else{
    $urlD = "someurl/rss2.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD,'cachedfeedDEN.xml',3600));
    $itemD = '';
    if($xmlD === FALSE)
        {$itemD = '';}
    else
        {$itemD = $xmlD->channel->item;}
}
return $itemD;
}

Когда я повторяю результат функции, ничего не отображается. Может быть, я должен обернуть функцию в классе? Пожалуйста, не ругайте меня, так как я новичок в области ООП PHP. Любая помощь в работе функции приветствуется.


person George    schedule 14.11.2011    source источник
comment
Это не обязательно будет возвращать объект - есть два случая, когда ваша функция явно вернет пустую строку.   -  person Crontab    schedule 15.11.2011
comment
Как распечатать результат? Что вы получите, если вместо этого используете var_dump результата?   -  person Aurelio De Rosa    schedule 15.11.2011
comment
если я изменяю результат с помощью var_dump, я также получаю пустое пространство. @Crontab-что мне делать, чтобы не возвращалась пустая строка? Если вы видите какую-то ошибку, помогите исправить ее, а не комментировать то, что я не могу изменить.   -  person George    schedule 15.11.2011
comment
Мы не знаем, что вы хотите вернуть в случае FALSE. Код, в котором вы получаете пустые строки, таков: {$itemD = '';}   -  person Aurelio De Rosa    schedule 15.11.2011
comment
Если я удаляю функцию и возвращаю значения, я использую $itemD-›title; и это не пусто   -  person George    schedule 15.11.2011


Ответы (2)


1: 2 из ваших случаев возврата возвращают пустую строку, поэтому эхо-возврат ничего не даст.

2: Если вы пытаетесь вывести содержимое объекта, вы должны использовать либо print_r(), либо var_dump().

3: Простой XML немного странен, поскольку var_dump или print_r не будут отображать все свойства объекта ( http://us3.php.net/manual/en/simplexmlelement.attributes.php — «SimpleXML установил правило добавления повторяющихся свойств к большинству методов. Их нельзя просмотреть с помощью var_dump () или что-нибудь еще, что может исследовать объекты." ) - так что вы можете извлечь выгоду из того, что у вас есть - http://www.php.net/manual/en/ref.simplexml.php — первый комментарий на этой странице имеет полезную функцию, которая может помочь вам в создании дампа объект:

Быстрый фрагмент, который преобразует объект XML в массив:

<?php
function xml2array ( $xmlObject, $out = array () )
{
        foreach ( (array) $xmlObject as $index => $node )
            $out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;

        return $out;
}
?>

Веселиться! ;-)

person streetlogics    schedule 14.11.2011

Очень возможно, что параметр объекта просто не существует. Сделай это:

$result = item1($Langu);
echo "<pre>" . print_r($result, true) . "</pre>";

function item1($Langu) {
  if ($Langu == 'bg') {
    $urlD = "someurl/rss1.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD, 'cachedfeedDBG.xml', 3600));
  }
  else {
    $urlD = "someurl/rss2.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD, 'cachedfeedDEN.xml', 3600));
  }

  return $xmlD;
}

Это покажет вам большинство свойств объекта. Теперь, к сожалению, SimpleXML возвращает ресурс, поэтому также будет много скрытой информации. Это должно помочь вам начать работу. Есть способ достать и вывести всю скрытую информацию. Ознакомьтесь с комментариями под функцией на PHP.net. (http://us3.php.net/manual/en/function.simplexml-load-file.php)

Кроме того, пробел — ваш друг, а не враг, пожалуйста, научитесь использовать его вместе с другими привычками чистого кодирования (такими как описательные имена переменных). Это сделает вас и других программистов, которые смотрят на ваш код, намного счастливее в долгосрочной перспективе.

person Patrick    schedule 14.11.2011