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

php中文网
发布: 2016-06-06 20:50:29
原创
1677人浏览过

一般是
a.php

<?php
    echo $var;
?>
登录后复制

b.php

立即学习PHP免费学习笔记(深入)”;

<?php
    $var = 'ssss';
    include 'a.php'; // 输出 ssss
?>
登录后复制

但是如果
a.php

<?php
    echo $var;
?>
登录后复制

f.php

<?php
    function i($path) {
        include $path;
    }
?>
登录后复制

b.php

立即学习PHP免费学习笔记(深入)”;

<?php
    include 'f.php';
    $var = 'ssss';
    i('a.php'); // Undefined variable: var
?>
登录后复制

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

企业建站系统3.0 英文版
企业建站系统3.0 英文版

后台主要功能如下: 一、系统管理:管理员管理,可以新增管理员及修改管理员密码;数据库备份,为保证您的数据安全本系统采用了数据库备份功能;上传文件管理,管理你增加产品时上传的图片及其他文件。 二、企业信息:可设置修改企业的各类信息及介绍。 三、产品管理:产品类别新增修改管理,产品添加修改以及产品的审核。 四、下载中心:可分类增加各种文件,如驱动和技术文档等文件的下载。 五、订单管理:查看订单的详

企业建站系统3.0 英文版 0
查看详情 企业建站系统3.0 英文版

回复内容:

一般是
a.php

<?php
    echo $var;
?>
登录后复制

b.php

立即学习PHP免费学习笔记(深入)”;

<?php
    $var = 'ssss';
    include 'a.php'; // 输出 ssss
?>
登录后复制

但是如果
a.php

<?php
    echo $var;
?>
登录后复制

f.php

<?php
    function i($path) {
        include $path;
    }
?>
登录后复制

b.php

立即学习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'
] );
登录后复制

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

就是这样啦 ...

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

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

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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