【问题标题】:Is this PHP Code Efficient? [closed]这个 PHP 代码高效吗? [关闭]
【发布时间】:2014-03-09 22:16:44
【问题描述】:

这似乎是一个常见的问题,但有各种不同的答案,所以就这样吧。我正在帮助某人建立一个 wordpress 网站,我做了一个 switch 语句来检查用户在哪个类别页面上显示图片和描述。我还编写了一个非常简单的函数来查看该类别是否有任何帖子以显示消息。

为了更好地解释代码: 顶部的这段代码使用一些 Wordpress 函数和对象(据我了解)来获取当前页面的 Category Slug:

$cat = get_category( get_query_var( 'cat' ) );
    $cat_id = $cat->cat_ID;
    $cat_name = $cat->name;
    $cat_slug = $cat->slug;

我将所有图片重命名为与类别 slug 相同的名称,以便为所有语句重用相同的变量。

下一段代码查看页面是否有帖子:

function add_page_title_header( ){
        function check_if_posts(){
            if(!have_posts()){
                echo '<span id="stillworking">There currently isn\'t any content for this category, but there will be soon. For now try another!</span>';
            }
        }

其余的代码(嵌入在下面,switch 语句)使用从页面获得的 Category slug 来输入图片,然后是硬编码的描述。 (在这样解释之后,我意识到通过再次使用相同的变量,我不需要为每个变量都使用 switch 语句,我将在下面的答案中解决这个问题)

$cat = get_category( get_query_var( 'cat' ) );
$cat_id = $cat->cat_ID;
$cat_name = $cat->name;
$cat_slug = $cat->slug;
switch ($cat_slug) {
    case 'ultracarnivorous':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A puppet show starring cryptids.</span>';
        check_if_posts();
        break;
    case 'things-of-interest':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Interesting things of all kinds.</span>';
        check_if_posts();
        break;
    case 'tim-and-james':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Editorial posts by Tim and James, the website\'s creators.</span>';
        check_if_posts();
        break;
    case 'the-tin-age-of-comics':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A web comic using royalty free comic book art.</span>';
        check_if_posts();
        break;
    case 'chainsaw-podcast':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A podcast by Tim and James, the website\'s creators.</span>';
        check_if_posts();
        break;
    case 'songink':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Short stories inspired by songs.</span>';
        check_if_posts();
        break;
    case 'takeaways':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A short, accessible thing to do this week.</span>';
        check_if_posts();
        break;
    case 'chainsaw-gaming':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Playing, reviewing and inventing games of all kinds.</span>';
        check_if_posts();
        break;
    case 'chainsaw-radio-theatre':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A fake, old-timey radio show full of factoids.</span>';
        check_if_posts();
        break;
    case 'canonically-incorrect':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Posts by our lovable friend, Jason.</span>';
        check_if_posts();
        break;
    case 'chainsaw-phraseology':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Fun with words and language.</span>';
        check_if_posts();
        break;
    case 'chicken-fried-awesome':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Food reviews with a twist.</span>';
        check_if_posts();
        break;
    case 'transmission-received':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A daily, back and forth video conversation.</span>';
        check_if_posts();
    break;
    case 'link-burger':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A group of links to enjoy in one sitting.</span>';
        check_if_posts();
        break;
    case 'chainsaw-reviews':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">Reviews of all kinds by the website\'s creators.</span>';
        check_if_posts();
        break;
    case 'multifarious-machinations':
        echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
        echo '<span id="catdescription">A catch-all category for posts that don\'t seem to fit anywhere else.</span>';
        check_if_posts();
        break;



    default:
    echo "This is awkward, you shouldn't be seeing this page!";
}
    }

    add_filter( 'thematic_page_title', 'add_page_title_header' );

如果您发现任何明显的错误或内存占用类型的事情,请告诉我。我还计划在网站全部完成后利用浏览器缓存,我编写的函数是否可能会产生问题?通常,当发布帖子时,它会重置某些缓存元素,但是此功能是否仅在清除缓存后才能再次运行?有没有办法避免这种情况?

我过去无数次使用这个网站,但这是我的第一个问题,所以万岁。

您可以通过访问http://chainsawcreative.com 并单击左侧的任何类别在(尽管是测试版)操作中看到它。一旦设计完成,其他优化就会发挥作用,但我现在只关心 PHP 的这一特定部分。

【问题讨论】:

  • 你不能通过描述代码的作用而不是提供 100 行意大利面条代码来更好地解决这个问题吗?我并不是要冒犯他人。如果您确实需要帮助,请提供建议,以便其他人可以轻松地帮助您。
  • 不,它效率不高....所有案例块中的唯一区别是实际描述,因此将描述粘贴在由$cat_slug索引的数组中,然后使用 isset 进行测试然后从数组中获取描述,这样你就只有一组 echo/check_if_posts()。
  • 我将编辑问题以便更好地解释它。
  • 这个问题似乎离题了,因为它更适合codereview.stackexchange.com
  • 抱歉,我不完全确定该放在哪里。下次我会记住这一点,谢谢。

标签: php wordpress performance switch-statement


【解决方案1】:

如果您可以像加载其他字段一样从数据库中加载描述,那将是最简单的。否则,如果您需要对描述进行硬编码,并且除了描述文本之外,您的输出将始终相同,那么使用一个数组来存储描述文本会更简单,并且不会复制相同的输出代码。

例如

$descriptions = array(
   'ultracarnivorous'   =>  "A puppet show starring cryptids.",
   'things-of-interest' =>  "Interesting things of all kinds.",
   'tim-and-james'      =>  "Editorial posts by Tim and James, the website's creators."
);
echo '<span id="titlecenter"><img src="'. home_url() . '/images/big/' . $cat_slug . '.png"></span>';
echo '<span id="catdescription">' . htmlspecialchars($descriptions[$cat_slug]) . '</span>';
check_if_posts();

【讨论】:

  • 这正是我一直在寻找的东西,谢谢。描述(当前)不在数据库中的任何位置,因此数组选项似乎是最好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多