在函数中嵌套函数

时间:2012-08-06 作者:jfudem

我正在寻找一种有效的方法,为我正在使用Thematic Theme Framework. Thematic在为儿童主题开发提供大量的动作挂钩和过滤器方面做得很好,我正在尝试正确利用这些挂钩和过滤器。我对主页做了很多更改,所以我创建了一系列功能来更改特定的内容区域,但我只想在我网站的索引页上执行这些功能。以前我的功能。php文件看起来非常像这样:

<?php
     function home_function_a() {
          if ( is_front_page() ) {
               //Something Near the top of the Home Page
          }
     }
     add_action(\'thematic_belowheader\', \'home_function_a\');

     function home_function_b() {
          if ( is_front_page() ) {
               //Something in in the sidebar
          }
     }
     add_filter(\'thematic_sidebar\', \'home_function_b\');        

     function home_function_c() {
          if ( is_front_page() ) {
               //Something near the bottom of the page
          }
     }
     add_action(\'thematic_abovecomments\', \'home_function_c\');

     // etc, etc, etc

 ?>
上述技术可行,但我觉得有点效率低下。我想使用嵌套函数方法可能会更好,如下所示:

<?php
    function everything_on_the_home_page() {
         if ( is_front_page() ) {

              function home_function_a() {
                   //Something near the top of the Home Page
              }
              add_action(\'thematic_belowheader\', \'home_function_a\');

              function home_function_b() {
                   //Something in the sidebar of the Home Page
              }
              add_filter(\'thematic_sidebar\', \'home_function_b\');

              function home_function_c() {
                   //Something near the bottom of the Home Page
              }
              add_action(\'thematic_abovecomments\', \'home_function_c\');

              // etc, etc, etc              
         }
    }
    add_action(\'thematic_aboveheader\', \'everything_on_the_home_page\'); 
 ?>
这段代码看起来有点好,似乎工作正常,但我想再次检查,以确保这项技术是推荐的和符合犹太规范的。我试着在谷歌上搜索一些关于这种方法的文章/论坛帖子,但我找不到任何有用的东西。如果您认为我的嵌套函数树是解决我的问题的好方法,或者您有任何其他建议,请告诉我。

谢谢你的时间!最好的,乔纳森

1 个回复
SO网友:EAMann

它可能看起来更加优雅,但您不想以这种方式嵌套挂钩。现在,您将在另一个操作挂钩中的逻辑检查中添加操作。

相反,要尽可能地保持函数的粒度和原子性,并且只在需要的地方将它们挂钩。你的第一个技巧一点也不低效,这是你做事的方式。

改变事情的一个主要后果是操作顺序。

在第一个示例中:

启动时themeatic_sidebar hook,呼叫home_function_b() 作用在函数内部,在执行某项操作之前,请检查以确保您在首页。

在第二个示例中

启动时thematic_above_header 胡克,看看你是否在头版。然后,等待thematic_sidebar 钩然后致电home_function_b() 作用

每个例子之间的逻辑非常不同。比如说home_function_b() 需要做一件事如果is_front_page() 是真的,如果是假的话。。。第二个例子根本不允许这样。

结束

相关推荐

Functions.php:从博客中排除类别

所以很明显,如何从模板中排除某些类别,但我不想修改4个模板,使它们忽略某个类别。有没有一种方法可以将某个类别从阅读设置的“博客”集中排除?我正在将博客分配到名为“博客”的页面。。。但显然,档案和搜索也需要对这一超出类别的内容视而不见。我宁愿在里面做functions.php