【问题标题】:PHP - Alternative to using include inside a loopPHP - 在循环中使用包含的替代方法
【发布时间】:2012-04-13 23:25:35
【问题描述】:

我有一大段 HTML 代码(其中回显了一些 PHP 变量),我需要在多个页面上多次显示(在循环内)。

那么如何保持干燥?

诚然,我的想法并不出色:

  • 将它放在一个单独的文件中并包含 - 但随后我会在循环中执行包含,它显示为不好的做法。

  • 将它放在一个函数中 - 但是我必须将变量设置为全局变量,而且在我看来它不像函数是用于这种用途的。

有没有更好的方法?这可能是 OOP 有解决方案的地方吗? (我运行 php 5.3)

【问题讨论】:

  • 如果要调用函数,为什么必须将变量设为全局变量?此外,为了提出建议,代码 sn-p 会很棒。
  • 发布一些代码会有所帮助。看看注册表模式devshed.com/c/a/PHP/Registry-Design-Pattern

标签: php oop architecture include


【解决方案1】:

使用模板。

只需在模板内编写循环,以及所有其他演示代码。

<h1>Some list</h1>
<ul>
<?php foreach($data as $row): ?>
  <li><?=$row['name']?> whatever your block code goes here</li>
<?php endforeach ?>
</ul>

所以,根本不需要包含任何内容。

对于多个页面,您可能希望创建一个从模板调用的辅助函数。

【讨论】:

    【解决方案2】:

    您不能将您需要的指定变量传递给函数吗?

     function foo($name, $something) {
          echo '<b>' . $name . '</b> is ' . $something;
     }
    

    然后,变量不必是全局的……或者让函数返回字符串,而不是上面示例中的 echo。

    【讨论】:

    • 我可以,但它似乎也使事情变得不必要地复杂化。但绝对比我的想法好。
    【解决方案3】:

    是的,OOP 可以帮助您,我创建了一个set of classes 来在我的页面上显示链接到各种元素的社交插件(Facebook、G plus、twitter)。

    我在页面顶部设置了帮助类

    $socialPlugins = new SocialPluginsHelper(array(
            SocialPluginsHelper::HTML_AFTER_BUTTONS => '<div class="clear"></div>',
            SocialPluginsHelper::HTML_BEFORE_BUTTONS => '<div class="clear"></div>',
            SocialPluginsHelper::STYLE_OF_WRAPPER => 'margin-top:5px;',
            SocialPluginsHelper::CUSTOM_PLUGIN_STYLE => array(
                    "TwitterButton" => "width:69px;",
                    "FacebookLike" => "width:146px;")
    )
    );
    $socialPlugins->add(PluginFactory::create("FacebookLike", array(FacebookLike::FB_WIDTH => "146")));
    $socialPlugins->add(PluginFactory::create("TwitterButton"));
    $socialPlugins->add(PluginFactory::create("Gplus")); 
    

    然后在一个循环中我只是调用

    $socialPlugins->renderAllButtons(array("FacebookLike" => array(FacebookLike::FB_HREF => $url)));
    

    这是我可以保持的最枯燥的,您可能需要根据您的特定需求使用不同的架构,这只是为了给您一个想法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2014-07-10
      • 2022-12-31
      • 1970-01-01
      • 2017-11-07
      • 2012-06-12
      相关资源
      最近更新 更多