Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP动态定制作用域中的变量_Php_Templates_Dynamic_Scope_Include - Fatal编程技术网

PHP动态定制作用域中的变量

PHP动态定制作用域中的变量,php,templates,dynamic,scope,include,Php,Templates,Dynamic,Scope,Include,我正在用php创建一个应用程序,其中有一个包含php模板文件的函数。出于可用性的考虑,我想动态定义哪些变量将在包含的文件范围内可用。例如: includeTemplate( 'myinclude.php', array( 'var1' => 'key1', 'var2' => 'key2', ) ); function includeTemplate( $path, $variables ) { include( $path ); } 在myinclude

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

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

function includeTemplate( $path, $variables ) {
    include( $path );
}
在myinclude.php中

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

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

您的变量将作为一个键/值对数组传递。。。。要按名称/键使用它们,必须将它们作为单个命名变量从数组中删除

extract($variables);

虽然这不是一个非常清晰的方法来完成你想要做的事情

我给出的答案很古老,但要让它发挥作用,你可能需要这样做:

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

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

include($path)需要“解析变量,然后将其内容提供给include函数。

不包括模板的文件,为什么不看一看呢?使用它可以为“基本”模板创建一个类,然后为扩展原始模板的其他模板创建类

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;

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

他希望动态包含文件。(给定一个字符串,尝试将该字符串作为同一文件夹中的文件包含)@MarcoMura-他还希望使用
$variables
数组中的变量作为变量(例如
echo$var1;
)从他的模板中;在include之前提取允许,如果它们包含在函数调用中,那么他可以将它们视为$variables数组,然后=),但是他的模板没有包含对
$variables
的单个引用,只有
$var1
$var2
有趣的是,我问这个问题的原因实际上是为了说明ve我的应用程序oop编程风格。include是一个html文件,类似于wordpress的模板php文件。然而,wordpress使用类似于so foo_bar的函数进行操作,而我需要类似于$foo->bar的函数。我的问题是如何在文件中自动包含$foo。php实际上有一个名为autoload的函数,您可以使用它se将自动包含类文件。这样,您只需包含自动加载功能。如果您想了解该功能,请参阅以下链接: