【问题标题】:What is the best way to capture data returned from a function in PHP?捕获从 PHP 中的函数返回的数据的最佳方法是什么?
【发布时间】:2010-10-16 03:03:38
【问题描述】:

我是使用 Wordpress 编程和学习的新手。

the_title(); //outputs the title of the page

我想将页面的标题捕获到一个字符串变量中,这样我就可以使用strtolowerstr_replace 函数对其进行操作。

我让它工作的唯一方法是使用输出缓冲。

ob_start();
the_title();
$result = ob_get_clean();

echo str_replace(" ","-",strtolower($result));

/*there has got to be an easier way....
i dont fully understand why */

str_replace(" ","-",strtolower(the_title())); 

我做错了什么?

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    如果您真正要查找的是wp_title 函数,则它采用的第二个参数是一个布尔值,它决定是否应该显示或返回它。将其传递给 false 以便将其返回给 var,然后您可以这样做:

    $mytitle = wp_title(null, false);
    

    否则,您唯一的选择就是找到您要查找的函数并修改源代码。

    【讨论】:

      【解决方案2】:

      没有更简单的方法。您的函数不会返回字符串,而是打印它,因此如果要捕获输出,则必须使用输出缓冲。

      就是下面例子中 f1() 和 f2() 的区别。

      // Returns a string, prints nothing.
      function f1() {
          return "String";
      }
      
      // Prints a string, returns nothing.
      function f2() {
          echo "String";
      }
      

      【讨论】:

      • 问题的标题是“捕获数据的最佳方式”,而不是“什么 WP 函数返回标题”。
      【解决方案3】:

      Wordpress 是一个 HORRIBLE 应用程序,用于学习如何编程。它使用这些“正常工作”的全局函数,但它们在“循环”内部执行非常具体的任务。正如我所说,这是一个糟糕的例子,说明好的代码应该是什么。

      谢天谢地(对你来说)还有其他函数可以返回你正在寻找的部分。而不是我只写你需要的东西,你可以阅读a full listing here。请注意记下哪些必须在神话循环中,哪些可以在任何地方使用。

      碰巧有更多的方法来获得标题,但我真的在想象这个例子你会做这样的事情:

      $this_post = get_post($post); // I *think* $post is the post ID inside the loop though I could be wrong
      echo $this_post->post_title;
      

      但正如另一位海报(正确)所说,您可以使用一个相当简单的 wp_title() 函数来获取当前循环标题。

      这让我想起了也许想解释为什么从 Wordpress 学习编程是一个坏主意。他们有太多该​​死的方式来做同样该死的事情,以至于几乎不可能保持领先地位。

      博客是一组非常简单的数据(在 WP 的情况下更是如此,因为它没有完全规范化),但不仅仅是有一种方法来输出标题<?php echo $post->title; ?> 你有很多方法,都在做微妙的不同的事情.

      如果您真的想学习如何编程(而不是绕开 WP 内部的废话),创建一个简单的博客引擎是相当快速和有趣的......这当然是很多人进入的方式一种新的语言或框架。

      如果你真的想玩得开心,看看 Django。


      受够了 WordPress 的咆哮。如果您将来要与没有 100 种方法的此类事情作斗争,我真的不建议使用输出缓冲区捕获。它为一些相对简单的事情消耗了大量资源。

      最简单的方法是获取原始函数的源代码,将其粘贴到新函数中,然后将 echo 替换为 return

      请注意,可能有一些数据库连接需要处理,过早返回可能会中断......因此,如果 echo 不是最后一个语句,而不是直接返回,将字符串存储为变量并在结束时返回函数。

      【讨论】:

      • 感谢信息 oli,将看看 Django。我个人不认识任何程序员,所以这个网站真的让我很兴奋:)
      【解决方案4】:

      我只是想与你们分享我的最终解决方案。

      这是为了给我的正文标签在 wordpress 中的唯一 ID。*/

      $title =wp_title(null,false);
      echo strtolower(str_replace(' ','-',ltrim($title)));
      
      
      //without the ltrim() 2 dashes are created before the title.
      

      【讨论】:

        【解决方案5】:

        Wordpress 中几乎每个“the_*”函数都有对应的“get_the_*”。所以,你只需要使用

        echo str_replace(" ","-",get_the_title());
        

        它会像魅力一样发挥作用。还有 get_the_excerpt()、get_the_content() 和 the_permalink() 以某种方式打破了命名约定(天知道我写了多少次“get_the_permalink()”,却对它为什么不起作用感到沮丧)

        干杯!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-07
          • 2013-03-30
          • 2013-05-18
          • 2013-10-31
          • 2010-11-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多