Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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 Zend 2导入和全局命名空间_Php_Namespaces_Zend Framework2_Global Variables_Legacy - Fatal编程技术网

Php Zend 2导入和全局命名空间

Php Zend 2导入和全局命名空间,php,namespaces,zend-framework2,global-variables,legacy,Php,Namespaces,Zend Framework2,Global Variables,Legacy,我试图在Zend2 MVC框架中包装一个遗留应用程序。特别是由于代码和示例,我解决了大部分问题 以下遗留文件说明了我无法解决的一个大问题: <?php $test = "test"; function echo_test(){ global $test; echo "test = "; var_dump($test); # Makes NULL explicit } echo_test(); 。。。我得到test=NULL 我看到了ZF

我试图在Zend2 MVC框架中包装一个遗留应用程序。特别是由于代码和示例,我解决了大部分问题

以下遗留文件说明了我无法解决的一个大问题:

<?php
$test = "test";

function echo_test(){
        global $test;
        echo "test = ";
        var_dump($test); # Makes NULL explicit
}

echo_test();
。。。我得到test=NULL

我看到了ZF2名称空间可能会给遗留文件带来问题的警告,我做了一些准备工作,试图澄清原因。根据PHP指南。事实上,我的样本只比下面这个声明列出的样本稍微复杂一点。。。但它似乎不起作用

我也看到了

我继续研究,终于发现这种方法


有没有办法在方法范围之外处理文件?

这与PHP名称空间无关。如果您在ZF控制器操作中包含一个文件,它将在该函数的变量范围内执行。为了使您的示例起作用,您需要声明全局$test;在ZF的行动之前,以及包括文件,这将是可怕的


如果不确切了解遗留代码的外观,就很难提出好的解决方案。如果您需要处理一定数量的全局代码,您可以在ZF应用程序中的某个时间点对其进行全局处理,以便在以后消除该漏洞。如果您事先不知道globals是什么,或者如果有大量globals,您可能需要编辑遗留代码,以尝试重构对globals的依赖。

另一个选项至少在理论上是使用,自动打印输出,或者查看shell_exec链接,但只有在ZF2之外托管它才能避免无限循环。这种方法有自己的缺点,包括:

安全,但请参见 访问$\u服务器可能会有所帮助,$\u获取但请参见,$\u发布,尤其是$\u COOKIES 可以在php命令行中解析
是的。这也是我最后得出的结论。在全局范围内的某个点上可以访问近700个唯一变量。尽管这很可怕,但它很快就完成了grep、删除重复项和全局更新。
...
chdir($filePath) # Fixes relative includes
ob_start();
include $filePathAndName;
$output = ob_get_clean();
$response->setContent($output);
return $response;