Home > Backend Development > PHP Tutorial > PHP中调用别的文件的include函数,要如何传参?

PHP中调用别的文件的include函数,要如何传参?

WBOY
Release: 2016-06-06 20:50:29
Original
1559 people have browsed it

一般是
a.php

<?php echo $var;
?>
Copy after login
Copy after login
Copy after login
Copy after login

b.php

<?php $var = 'ssss';
    include 'a.php'; // 输出 ssss
?>
Copy after login
Copy after login

但是如果
a.php

<?php echo $var;
?>
Copy after login
Copy after login
Copy after login
Copy after login

f.php

<?php function i($path) {
        include $path;
    }
?>
Copy after login
Copy after login

b.php

<?php include 'f.php';
    $var = 'ssss';
    i('a.php'); // Undefined variable: var
?>
Copy after login
Copy after login

请问这种情况下要如何传参?先谢谢。

回复内容:

一般是
a.php

<?php echo $var;
?>
Copy after login
Copy after login
Copy after login
Copy after login

b.php

<?php $var = 'ssss';
    include 'a.php'; // 输出 ssss
?>
Copy after login
Copy after login

但是如果
a.php

<?php echo $var;
?>
Copy after login
Copy after login
Copy after login
Copy after login

f.php

<?php function i($path) {
        include $path;
    }
?>
Copy after login
Copy after login

b.php

<?php include 'f.php';
    $var = 'ssss';
    i('a.php'); // Undefined variable: var
?>
Copy after login
Copy after login

请问这种情况下要如何传参?先谢谢。

看起来好多文件好乱 ... 我们先不管这么多个文件的事情 ... 先把整个程序流程写在一个文件里吧 ..?

正常传递参数的场景如下 ...

<?php /* $var defined in a.php ... */
$var = 'ssss';

/* print $var out in b.php ... */
echo $var;
Copy after login

无法正常传递参数的场景如下 ...

<?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' );
Copy after login

事实上这么一写你就会发现 ... 参数无法传递的情况与是否使用了 include 完全无关 ...

唯一影响参数传递的原因叫做变量作用域 ... 这是编程的基础知识 ... 你可以参考链接 ...

现在弄明白了原因 ... 我们来考虑解决方案 ...

第一种办法 ... 不传参 ... 直接在函数内部调用全局变量 ... 方法有两种 ... 效果是一样的 ...

<?php function i( $path ) {
    echo $GLOBALS['var'];
}
Copy after login
<?php function i( $path ) {
    global $var;
    echo $var;
}
Copy after login

这两种方法都是绕过变量作用域让你可以在函数内部获得全局变量的引用 ... 注意是引用 ...

也就是如果你一不小心就会修改掉这个全局变量的值 ... 而在多数情况下这不是我们想要的 ...

第二种方法 ... 比第一种方法实现起来麻烦 ... 但是更加整洁可靠 ...

<?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'
] );
Copy after login

不使用 global ... 随需随用 ... 每次调用函数的时候把变量带进去 ... 这是推荐的写法 ...

就是这样啦 ...

可以参考一下 PHPTemplate 或者 Smarty 的实现。

使用时使用方法进行传递,调用时直接使用相应的 key 获取。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template