-1

当我启动 php 脚本时,有时可以正常工作,但很多时候它会检索我这个错误

致命错误:在第 21 行的 /membri/americanhorizo​​n/ytvideo/rilevametadatadaurlyoutube.php 中的非对象上调用成员函数 children()

这是代码的第一部分

// set feed URL
$feedURL = 'http://gdata.youtube.com/feeds/api/videos/dZec2Lbr_r8';

// read feed into SimpleXML object
$entry = simplexml_load_file($feedURL);

$video = parseVideoEntry($entry);


function parseVideoEntry($entry) {      
  $obj= new stdClass;

  // get nodes in media: namespace for media information
  $media = $entry->children('http://search.yahoo.com/mrss/'); //<----this is the doomed line 21 

更新:采用的解决方案

   for ($i=0 ; $i< count($fileArray); $i++)
  {

    // set feed URL
    $feedURL = 'http://gdata.youtube.com/feeds/api/videos/'.$fileArray[$i];


    // read feed into SimpleXML object
    $entry = simplexml_load_file($feedURL);


   if (is_object($entry))
   {
       $video = parseVideoEntry($entry);

       echo ($video->description."|".$video->length);
       echo "<br>";
    }
     else
     {
       $i--;
     }

 }

在这种模式下,我强制脚本重新检查导致错误的文件

4

2 回答 2

2

您首先调用一个函数:

$entry = simplexml_load_file($feedURL);

该函数有一个返回值。您会在该功能的手册页上找到它:

然后,您以变量的形式使用该返回值,$entry而无需验证函数调用是否成功。

因此,您接下来会遇到错误。但是,您的错误/错误是您如何对待函数的返回值。

不正确处理返回值就像是在找麻烦。阅读您使用的函数,检查返回值并根据成功或错误条件继续。

$entry = simplexml_load_file($feedURL);

if (FALSE === $entry)
{
    // youtube not available.
}
else 
{
    // that's what I love!
}
于 2012-11-10T17:59:02.143 回答
-3

有时?真的吗?看看这个:

<?php

$dummy; //IN FACT, this var is NULL now

// Will throw exactly the same error you get
$dummy->children();

为什么?因为,我们可以从对象类型调用方法。

所以,如果你想避免这样的错误,下次你会调用这个方法,确保它是“可能的”。

<?php

if ( is_object($dummy) && method_exists($dummy, 'children') ){
   //sure it works
   $dummy->children();
}
于 2012-11-10T20:09:21.353 回答