ホームページ > バックエンド開発 > PHPチュートリアル > PHP中调用别的文件的include函数,要如何传参?

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

WBOY
リリース: 2016-06-06 20:50:29
オリジナル
1559 人が閲覧しました

一般是
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
?>
ログイン後にコピー
ログイン後にコピー

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

回复内容:

一般是
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'
] );
ログイン後にコピー

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

就是这样啦 ...

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート