Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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_Variables_Scope_Global Variables - Fatal编程技术网

PHP:模拟函数中未知变量的全局行为

PHP:模拟函数中未知变量的全局行为,php,variables,scope,global-variables,Php,Variables,Scope,Global Variables,为了将原始JavaScript文件包含到我的页面中,我最终使用了: function include_js($jsfile, $basepath = JSPATH){ echo '<script type="text/javascript">'; include($basepath . $jsfile); echo '</script>'; } function include_js($jsfile,$basepath=JSPATH){ 回声';

为了将原始JavaScript文件包含到我的页面中,我最终使用了:

function include_js($jsfile, $basepath = JSPATH){
    echo '<script type="text/javascript">';
    include($basepath . $jsfile);
    echo '</script>';
}
function include_js($jsfile,$basepath=JSPATH){
回声';
包括($basepath.$jsfile);
回声';
}
工作正常,这些JS文件中的PHP代码仍然可以正常执行,这里没有问题。 但这里有一些我以前使用过的伪代码:

<script>
    var hello = '<?php echo $id; ?>';
</script>

var hello='';
所以,问题是:

  • 以前,我的JavaScript文件中使用的PHP代码是在与页面相同的上下文中执行的
  • 现在,它在
    include_js()
    函数的上下文中执行
因此,我再也无法访问页面的任何变量。我可以用
global$id修复它,但那是伪代码

实际上,我不知道需要访问哪些变量


你知道怎么解决那个问题吗?如果您有一个比我在
includejs()
中实际做的更好的解决方案来实现相同的目标,而不出现我所说的问题,那将非常感谢

您可以使用全局变量,但更可靠的方法是编写自己的“常量数据库”。比如:

class ConstantDB{
    public static function set($key, $value){
    }

    public static function get($key){
    }
}
这在很多情况下都很方便。对于您的特殊情况,您可以使用

ConstantDB::set("my_id", $id);
在include_js中,您可以使用

ConstantDB::get("my_id");

您可以将所有全局变量(但是)导入到执行include操作的函数的局部范围中。我不认为这是一个很好的解决方案(因为这是一个锤子),但当你在你的问题中写下你不知道使用了哪些变量,所以你可以像这样对它们进行本地化:

$varname = $GLOBALS['varname'];
作为替代方案,您可以检查JS文件和/或提供文件的变量列表,并将其作为数组添加到include函数中。有关一些代码示例,请参见


您还可以首先预包含(并丢弃)js文件,收集关于未定义变量的警告,导入它们,然后真正包含它们。一些。

这是一个很好的答案,我已经考虑过这样做,但我宁愿使用不需要我重新编写一大堆代码的东西。如果没有更好的答案,我稍后会接受你的答案=)我会给我的函数一个变量数组来使用+感谢您通过第一个示例让我发现了
extract()
函数,这真是太棒了!