2

文件 a.html

    <div id=1>
       <?php Include "a.php?parameter=1" ?>
    </div>

    <div id=2>
       <?php Include "a.php?parameter=2" ?>
    </div>

文件 a.php:

    <? Php
    b;
    Function b {}
    ?>

调用 a.html 会产生错误:div 2 中的“无法重新声明b()”。原因很容易理解 - 但最有效的解决方法是什么?

4

3 回答 3

3

包含另一个 PHP 文件不会触发新的 HTTP 请求。您不能像这样将参数传递给包含的文件。引号内的文本必须解析为磁盘上的文件,包括该?parameter=1部分。

如果要将参数传递给包含的文件,请记住当前范围可用于包含的代码。您可以为全局/局部变量赋值,然后在包含的文件中使用它们。

// run.php

<?php
    $name = 'Bob';
    include 'inc.php';
?>

// inc.php

<?php
    echo "Hi, $name!\n";
?>

更新

不能多次声明同一个函数,即使使用include. 相反,在页面顶部包含声明函数的文件一次。用于require_once确保它只发生一次并在找不到文件时中断。然后,在您需要函数效果的任何地方,在您的页面脚本中调用它,而无需执行其他包含。

// run.php

<?php require_once 'sayhi.php'; ?>

<div id="1">
    <?php sayhi('Bob'); ?>
</div>
<div id="2">
    <?php sayhi('Frank'); ?>
</div>

// sayhi.php

<?php
    function sayhi($name) {
        echo "Hi, $name!\n";
    }
?>

这将创建所需的输出。

<div id="1">
    Hi, Bob!
</div>
<div id="2">
    Hi, Frank!
</div>
于 2012-07-09T05:50:56.857 回答
1

当一个文件被包含时,它包含的代码继承了包含发生的行的变量范围。从那时起,调用文件中该行的任何可用变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围。

请查看有关include()函数的信息。函数 b() 不必重新声明,因为它已经存在。如果您尝试修改设置/传递给函数的变量,那么您将为使用相应变量的函数包含一个参数。

于 2012-07-09T05:40:37.853 回答
1

如果你想为文件分配参数,那么你可以做两件事,而不是两次包含文件,

1)包含不带任何参数并使用可以为您执行操作的参数调用函数 2)不要在任何地方包含它,而是在您想要使用 exec 或 popen 时执行它并传递您接受为 argv 的参数 :)

于 2012-07-09T05:56:12.000 回答