php – 与eval()和include()的命名空间不能按预期工作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 与eval()和include()的命名空间不能按预期工作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1844字,纯文字阅读大概需要3分钟。
内容图文
![php – 与eval()和include()的命名空间不能按预期工作](/upload/InfoBanner/zyjiaocheng/819/b4ec7ae4a33b48c1923f4c5c2b4ec884.jpg)
我只是搞乱了,我遇到了这个:
不行
<?php
namespace first{
include 'data:text/plain, <?php function a_func(){echo "hi";}';
a_func();
}
namespace second{
include 'data:text/plain, <?php function a_func(){echo "bye";}';
a_func();
}
[29-Apr-2016 14:12:42 America/New_York] PHP Fatal error: Cannot redeclare a_func() (previously declared in data:text/plain, <?php function a_func(){echo “hi”;}:1) in data:text/plain, <?php function a_func(){echo “bye”;} on line 1
不行
<?php
namespace first{
eval('function a_func(){echo "hi";}');
a_func();
}
namespace second{
eval('function a_func(){echo "bye";}');
a_func();
}
[29-Apr-2016 14:19:21 America/New_York] PHP Fatal error: Cannot redeclare a_func() (previously declared in C:\path\test.php(3) : eval()’d code:1) in C:\path\test.php(7) : eval()’d code on line 1
作品
<?php
namespace first{
function a_func(){echo "hi";}
a_func();
}
namespace second{
function a_func(){echo "bye";}
a_func();
}
在PHP 5.6.20和7.0.5中测试
这是一个错误吗?特征?有目的地实施?
额外信用:如何使include()或eval()工作?
解决方法:
include和eval导致编译器处理它们的输入,就好像它来自两个文件中的单独文件一样.
这意味着设置代码中的命名空间声明不会传输到include / eval中的代码,并且在那里定义的函数在全局命名空间中定义.您可以轻松验证这一点
<?php
namespace outer;
eval('function func(){}');
var_dump(function_exists('\outer\func')); // false
var_dump(function_exists('\func')); // true
要获得预期的行为,您必须在所引入的代码中包含命名空间声明:
<?php
namespace first{
include 'data:text/plain,<?php namespace first; function a_func(){echo "hi";}';
a_func();
}
namespace second{
include 'data:text/plain,<?php namespace second; function a_func(){echo "bye";}';
a_func();
}
和
<?php
namespace first{
eval('namespace first; function a_func(){echo "hi";}');
a_func();
}
namespace second{
eval('namespace second; function a_func(){echo "bye";}');
a_func();
}
内容总结
以上是互联网集市为您收集整理的php – 与eval()和include()的命名空间不能按预期工作全部内容,希望文章能够帮你解决php – 与eval()和include()的命名空间不能按预期工作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。