(PHP)通过一个函数运行的预定义字符串

时间:2013-03-13 18:36:39

标签: php rss simplepie

我目前正在设计一个包含20个方框的页面,其中每个方框代表一个RSS提要,使用simplepie作为我的解析器。

目前,该脚本会调用每个Feed中的第一张图片,丢弃其余图片并将该图片设置为该框的背景图片。

有20个Feed,我希望尽可能保持代码的小巧和高效。虽然我理解$ feed01的单独设置,但$ feed02是一个必要的混乱邪恶,这是simplepie工作所必需的。

我无法理解的是为什么imageurl()返回一个空值。

任何人都可以告诉我为什么会这样吗?

非常感谢

<?php
require_once('isnotabear/php/autoloader.php');

$feed01 = new SimplePie();
$feed01 -> set_feed_url ('http://link/to/rss01');
$success = $feed01 -> init();
$feed01 -> handle_content_type();
$max = $feed01 -> get_item_quantity(); // Where do we end?

$feed02 = new SimplePie();
$feed02 -> set_feed_url ('http://link/to/rss02');
$success = $feed02 -> init();
$feed02 -> handle_content_type();
$max = $feed02 -> get_item_quantity(); // Where do we end?

$start = (isset($_GET['start']) && !empty($_GET['start'])) ? $_GET['start'] : 0; // Where do we start?
$length = (isset($_GET['length']) && !empty($_GET['length'])) ? $_GET['length'] : 1; // How many per page?


function imageurl()
{
    if ($success): foreach($feedin->get_items($start, $length) as $item): $feedin =     $item-> get_feed();
    {
        $replace = preg_match( '@src="([^"]+)"@' , $item->get_content(), $match );
        $match = preg_replace ('"src="', '', $match);
        $match = str_replace('"', "'", $match);
        echo $match[0];
    }
    endforeach;
    endif;
};

?>
<!DOCTYPE HTML>
... YADA YADA YADA ...

<a href="#" style="background-image:url(<?php $feedin = $feed01; imageurl(); ?>)"><div> <span>FEED NAME</span></div></a>

2 个答案:

答案 0 :(得分:1)

$success未在imageurl()内定义,因此它始终为null / false

你可能想要:

function imageurl() {
   global $success;
   if ($success) { .... }
}

但是不要使用那样的全局变量。将$ success成为参数。它会更清洁。

答案 1 :(得分:0)

这是评论和答案之间的一部分,但我希望空间显示代码。你的函数使用了非常笨拙的PHP语法和一些完全误导性的标点符号:

  • if(): ... endif;foreach(): ... endforeach;语法非常老套,通常仅在使用PHP作为模板语言时(即在HTML中间)而不是像这样的独立函数中使用< / LI>
  • {},缩进与ifforeach都不相关; PHP会忽略它们,但它们会让任何阅读代码的人感到困惑
  • 最后的;也会被忽略 - 函数以}
  • 结尾

所以你的代码应该看起来像这样(注意我还添加了$success$feedin作为参数,你应该传递给函数):

function imageurl($success, $feedin)
{
    if ($success)
    {
        foreach($feedin->get_items($start, $length) as $item)
        {
            $feedin = $item->get_feed();
            $replace = preg_match( '@src="([^"]+)"@' , $item->get_content(), $match );
            $match = preg_replace ('"src="', '', $match);
            $match = str_replace('"', "'", $match);
            echo $match[0];
        }
    }
}

哦,你可能想return $match[0]而不是echo。否则,无论你传递什么,它仍然会返回null