【问题标题】:(PHP) Pre-defined string to run through one function(PHP) 通过一个函数运行的预定义字符串
【发布时间】:2013-03-13 18:36:38
【问题描述】:

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

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

对于 20 个提要,我希望尽可能保持代码的小而高效。虽然我理解 $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>

【问题讨论】:

    标签: php rss simplepie


    【解决方案1】:

    $success 没有在 imageurl() 中定义,所以它总是 null/false

    你可能想要:

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

    但不要使用这样的全局变量。将 $success 作为参数传入。会干净很多。

    【讨论】:

    • 啊,虽然这将是一个相当简单的解决方案。感谢您对此的新视野。
    【解决方案2】:

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

    • if(): ... endif; 和 foreach(): ... endforeach; 语法非常过时,通常仅在使用 PHP 作为模板语言(即 HTML 中间)而不是像这样的独立函数时使用
    • {、} 和缩进与if 和foreach 均无关; 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 无论你传入什么。

    【讨论】:

    • 超级有帮助,非常感谢您的解释,我通常可以半理解地理解其他语言,但我只是 PHP 一个不合逻辑的混乱。再次,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多