一般是
a.php
<?php
echo $var;
?>
b.php
<?php
$var = 'ssss';
include 'a.php'; // 输出 ssss
?>
但是如果
a.php
<?php
echo $var;
?>
f.php
<?php
function i($path) {
include $path;
}
?>
b.php
<?php
include 'f.php';
$var = 'ssss';
i('a.php'); // Undefined variable: var
?>
请问这种情况下要如何传参?先谢谢。
正常传递参数的场景如下 ...
<?php
/* $var defined in a.php ... */
$var = 'ssss';
/* print $var out in b.php ... */
echo $var;
无法正常传递参数的场景如下 ...
<?php
/* define a function in t.php ... */
function i( $path ) {
/* print value out suppose if $path equals to 'a.php' ... */
echo $var;
}
/* define $var and call function in b.php ... */
$var = 'ssss';
i( 'a.php' );
事实上这么一写你就会发现 ... 参数无法传递的情况与是否使用了 include 完全无关 ...
唯一影响参数传递的原因叫做变量作用域 ... 这是编程的基础知识 ... 你可以参考链接 ...
现在弄明白了原因 ... 我们来考虑解决方案 ...
第一种办法 ... 不传参 ... 直接在函数内部调用全局变量 ... 方法有两种 ... 效果是一样的 ...
<?php
function i( $path ) {
echo $GLOBALS['var'];
}
<?php
function i( $path ) {
global $var;
echo $var;
}
这两种方法都是绕过变量作用域让你可以在函数内部获得全局变量的引用 ... 注意是引用 ...
也就是如果你一不小心就会修改掉这个全局变量的值 ... 而在多数情况下这不是我们想要的 ...
第二种方法 ... 比第一种方法实现起来麻烦 ... 但是更加整洁可靠 ...
<?php
/* make a new slot named $package ... */
function i( $path, array $package ) {
/* extract our package ... */
extract( $package );
/* print just like your are in global scope ... */
echo $var;
}
/* call function i() like this ... */
i( 'a.php', [
'var' => 'ssss'
] );
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。