PHP中调用别的文件的include函数,要如何传参?
伊谢尔伦
伊谢尔伦 2017-04-10 14:25:46
[PHP讨论组]

一般是
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伐。

全部回复(2)
ringa_lee

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

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

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

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

就是这样啦 ...

PHPz

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号