1

我将 php rss 解析库simplepie 加载到我的网站上,并将其包含在 header.php 文件中,如下所示:

<?php
    // Make sure that SimplePie is loaded
require_once('inc/simplepie.inc');
$feed = new SimplePie('rss.com'); <-- This is a example url

// Make sure the content is being served out to the browser properly.
$feed->handle_content_type();

?>

然后我尝试从另一个名为 page.php 的页面访问该对象,它给了我这个错误:

Fatal error: Call to a member function get_items() on a non-object in /home/callofdu/public_html/wp-content/themes/Starkers/page.php on line 13

我从这行代码中得到错误:

<?php
foreach ($feed->get_items() as $item)
{}
?>

这很奇怪,因为如果我将这两个代码块一起包含在同一个 php 页面上,它就一切正常。

我只是不明白一些事情,请帮助。

4

4 回答 4

2

这里有几件事可能是错误的:

  1. 代码顺序不正确。
    意识到当你require还是include一个 PHP 文件时,那个文件的整个代码都会在那个时候被执行。换句话说:将命令解释require_once为“在此处插入文件内容”,并检查代码行的顺序是否仍然正确。

  2. 您在单独的请求中调用 page.php。
    如果您使用浏览器手动浏览到 page.php 后,上一页$feed将不复存在。如果您确实希望它在请求之间继续存在,请执行以下操作:

    一种。$feed$_SESSION['feed']
    b替换所有实例。在您浏览的每个文件的第一行(所以不是必需的文件),把session_start();

于 2011-07-21T20:10:35.440 回答
2

php 中的 require 和 include 调用基本上获取了该文件的内容并就位。

因此,如果您遵循 php 在运行脚本时采用的线性路径,则必须确保在使用该库之前调用它。

基本上在实践中,如果您将 page.php 作为独立执行,那么您也需要在该脚本中使用它,但是,如果 page.php 包含在您提到的第一个脚本中,那么您不需要它再次,但确保在 page.php 之前包含该库

IE

<?php
    // Make sure that SimplePie is loaded
require_once('inc/simplepie.inc');
$feed = new SimplePie('rss.com');

// Make sure the content is being served out to the browser properly.
$feed->handle_content_type();


require_once "page.php";
?>

两者都不需要

至于 require 和 include 调用之间的区别,请查看 http://www.php.net/manual/en/language.control-structures.php

编辑:看到这与 Wordpress 相关后,请记住变量 scoop。变量不是函数父函数所固有的。所以在 page.php 中尝试:

<?php
global $feed;

foreach ($feed->get_items() as $item)
{}
?>
于 2011-07-21T20:15:01.683 回答
1

您需要在使用库功能的每个页面上包含库。

于 2011-07-21T20:03:12.993 回答
0

我认为这是相对路径问题。尝试使用绝对路径。或者检查路径rss.com是否正常。可能您需要以另一种方式调用它:$feed = new SimplePie('../rss.com');

于 2011-07-21T20:19:10.163 回答