需要一个任意PHP文件而不将变量泄漏到范围内

Ken*_*ins 25 php scope global-variables

是否有可能在PHP中require任意文件,而从目前的范围泄露任何变量到所需文件的变量命名空间或污染全局变量的范围是什么?

我想用PHP文件进行轻量级模板化,并且如果有可能加载模板文件而没有任何变量在其范围内而且是预期的模板文件,那就是为了纯度而感到疑惑.

我已经设置了一个我希望通过解决方案的测试.应该要求RequiredFile.php并让它返回Success, no leaking variables..

RequiredFile.php:

<?php

print array() === get_defined_vars()
    ? "Success, no leaking variables."
    : "Failed, leaked variables: ".implode(", ",array_keys(get_defined_vars()));

?>
Run Code Online (Sandbox Code Playgroud)

我得到的最接近的是使用一个闭包,但它仍然会返回Failed, leaked variables: _file.

$scope = function( $_file, array $scope_variables ) {
    extract( $scope_variables ); unset( $scope_variables );
    //No way to prevent $_file from leaking since it's used in the require call
    require( $_file );
};
$scope( "RequiredFile.php", array() );
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

lis*_*nko 22

看这个:

$scope = function() {
    // It's very simple :)
    extract( func_get_arg(1) );
    require func_get_arg(0);
};
$scope( "RequiredFile.php", array() );
Run Code Online (Sandbox Code Playgroud)