Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:在任何情况下;包括“一次”;重置堆栈?_Php_Php Include - Fatal编程技术网

PHP:在任何情况下;包括“一次”;重置堆栈?

PHP:在任何情况下;包括“一次”;重置堆栈?,php,php-include,Php,Php Include,假设我有这个代码: class control { function public_home() { $pagina=$this->load_public_page(); ... echo $pagina; } ... function load_public_page($localnode="") { global $language; if ($lo

假设我有这个代码:

class control {
  function public_home()
    {
        $pagina=$this->load_public_page();
        ...
        echo $pagina;
    }

...
        function load_public_page($localnode="") {

            global $language;

            if ($localnode != "") { $localnode="_" . $localnode; }

            $langlink = "http://" . PAGE_INDEX;
            if ($language != "es") { $langlink = $langlink . "/" . $language . "/"; }

            ob_start();
            include_once 'page.php';
            include_once 'header.php';
            $pagina=ob_get_contents();
            ob_end_clean();
            return $pagina;
            }
...
}
然后,在
page.php
中:

<?php
echo "LANG " . $langlink;
echo "NODE " . $localnode;
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
换句话说,它既不拾取
load\u public\u页面
函数,也不拾取其包含的类。。。难怪它找不到这些变量

这非常奇怪,因为请看我上面提到的简化示例:

class Ble {
    function bla() {
        $a=127;

        $pagina=$this->otrosi();
        echo $pagina;
        }

    function otrosi($bbb="") {

        $a=666;

        ob_start();
        include_once('b.php');
        $pagina=ob_get_contents();
        ob_end_clean();

        return $pagina;
        }
    }

$g=new Ble();   
$g->bla();
其中
b.php
是:

<p>BBB is: <?php echo $bbb; ?></p>

<p>What is A? <?php echo $a; ?>
BBB是:

什么是A? 当然,如果我在
b.php
中添加
debug_backtrace
,它会显示完整的堆栈跟踪:
对象Ble、函数bla、函数otrosi


正如标题所说:有人知道在PHP中,
include\u once
或输出缓冲可能会重置堆栈的任何情况吗?我有点绝望,因为根据文档和简单的例子,这是其中之一,它应该可以工作。。。但事实并非如此。

include
的作用就好像您要包含的文件的内容被剪切/粘贴到调用
include()
的位置一样。这就是全部。如果您在该文件中“可执行”代码,那么它将在include()所在的上下文中执行。如果该文件中有一个exit/die,那么整个脚本将退出,而不仅仅是包含的文件。您不能在多个文件之间传播对象定义。阅读开场白的最后一段。请不要使用register globals:(它们完全是邪恶的。对象和名称空间是你的朋友。globals可能会对调试造成各种破坏!他在哪里使用“register globals”?@steve:我应该提到的是,我没有写这段代码,我只是一直在维护它。无论如何,我不知道我使用的全局变量(不是“register\u globals”)与我发现的bug有什么关系。你的代码中哪里有
$control->load\u public\u page(…)
调用?
<p>BBB is: <?php echo $bbb; ?></p>

<p>What is A? <?php echo $a; ?>