PHP:模拟函数中未知变量的全局行为
为了将原始JavaScript文件包含到我的页面中,我最终使用了: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){ 回声';
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()
函数,这真是太棒了!