【问题标题】:PHP customizing variables in the scope dynamicallyPHP动态自定义范围内的变量
【发布时间】:2015-01-24 21:20:42
【问题描述】:

我正在用 php 创建一个应用程序,其中有一个包含 php 模板文件的函数。为了可用性起见,我想动态定义哪些变量将在包含的文件范围内可用。例如:

includeTemplate( 'myinclude.php', array(
    'var1' => 'key1',
    'var2' => 'key2',
) );

function includeTemplate( $path, $variables ) {
    include( $path );
}

在 myinclude.php 中

echo $var1; // key1
echo $var2; // key2

这可能吗?如果没有,还有其他关于如何实现类似目标的建议吗?

【问题讨论】:

    标签: php templates dynamic scope include


    【解决方案1】:

    您的变量作为键/值对数组传递....要按名称/键使用它们,您必须将数组中的extract()它们作为单独的命名变量

    extract($variables);
    

    虽然这不是你想要做的一个非常干净的方法

    【讨论】:

    • 他想做动态包含文件。 (给定一个字符串,尝试将该字符串作为同一文件夹中的文件包含在内)
    • @MarcoMura - 他还想在他的模板中使用来自$variables 数组的变量作为变量(例如echo $var1;);在包含之前提取允许
    • 如果它们包含在函数调用中,那么他可以将它们视为 $variables 数组然后 =)
    • 但他的模板没有包含对$variables 的单个引用,仅包含对$var1$var2 的引用
    【解决方案2】:

    我发现它的答案很旧,但要使其正常工作,您可能需要这样做:

    includeTemplate( 'myinclude.php', array(
        'var1' => 'key1',
        'var2' => 'key2',
    ) );
    
    function includeTemplate( $path, $variables ) {
        include("$path");
    }
    

    include($path) 需要 " 来解析 var,然后将其内容提供给 Include 函数。

    【讨论】:

      【解决方案3】:

      除了为您的模板包含文件,为什么不看看object oriented php?使用inheritance,您可以为“基本”模板创建一个类,然后为其他模板创建类来扩展您的原始模板。

      class baseTemplate 
      {
          public $var1 = value; 
          public function __construct()
          {
      
          }
      }
      
      class subTemplate extends baseTemplate
      {
          public $var2 = value; 
          public function __construct()
          {
              parent::__construct();
          }
      }
      

      变量将仅链接到其相应的类和父级。

      //contains $var1
      $template1 = new baseTemplate();
      echo $template1->var1;
      
      //contains $var1 & $var2
      $template2 = new subTemplate();
      echo $template2->var1 . " " . $template2->var2;
      

      如果您不熟悉面向对象编程,显然您必须学习一些有关这方面的知识,但这可能是更好的方法。

      【讨论】:

      • 有趣的是,我问这个问题的原因实际上是为了保留我的应用程序 oop 编程风格。包含是一个 html 文件,类似于 wordpress 的模板 php 文件。然而,虽然 wordpress 使用像 foo_bar 这样的函数,但我想要像这样的函数 $foo->bar。我的问题是如何在文件中自动包含 $foo。
      • PHP 实际上有一个名为 autoload 的函数,您可以使用它来自动包含类文件。这样你只需要包含你的自动加载功能。如果您想阅读,请点击以下链接:php.net/manual/en/language.oop5.autoload.php
      猜你喜欢
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多