while (true)
与while (\true)
和最重要的任何人都可以澄清为什么boolean
受名称空间影响PHP
?'while(true)`vs`while( true)`有什么区别?
24
A
回答
55
在PHP true
,false
和null
是常量,它们在名称空间中被保护不被覆盖。因此下面的无效代码:
namespace Foo;
const true = false; // Cannot redeclare constant 'true'
但仍可以覆盖这样一个常数使用“”定义()“”:
namespace Foo;
define('Foo\true', false);
var_dump(true); // bool(false)
然而,这是不支持的功能(可能被称为bug),PHP可以自由地假定true
不能被覆盖。
// Note: This uses eval() to make sure the define() runs before the constexpr
// constant resolution happens
namespace Foo;
define('Foo\true', false);
var_dump(eval('namespace Foo;
static $t = true;
return $t;')); // bool(true)
为什么替代发生在constexpr情况下,而不是在“正常”情况的原因是在实现中的错误:在一个constexpr上下文的true
例如使用将不受上述定义的影响。对于constexprs,替换发生在名称解析之前,而对于正常的代码,它发生在名称解析之后。
正确的实现方式是始终在名称解析后替换,但在替换过程中特别考虑了true
,false
和null
。我打算修复这个PHP 7的问题。
相关问题
- 1. while(true)或tcp listen:什么更有效?
- 2. while(true)和for(;;)之间的实际区别是什么?
- 3. system.formatexception while(true)loop
- 4. 使用“while(true){...}”是什么意思?
- 5. while(true)条件的意义是什么?
- 6. while(true)loop without break
- 7. do while(true)while sys.o.print(“Hi”);而(假);
- 8. FileStream.Flush()和FileStream.Flush(True)有什么区别?
- 9. 这个while循环有什么区别?
- 10. Shell break while-true循环
- 11. js while(true){} blocks event loop
- 12. Python Threading:Multiple While True循环
- 13. while(True)loop break SSH script
- 14. 正在退出Python While True
- 15. true是什么区别?和布尔值
- 16. Turbo C++:while(fin)vs while(!fin.eof())
- 17. 为什么“while(true)”与“Thread.sleep”会导致100%的CPU使用率?
- 18. Django internationalization not working while while DEBUG = True in zinnia博客应用程序
- 19. 用while(true)循环监视进程
- 20. 继续while循环之后返回True
- 21. 不理解While(True)循环 - Python 2.7
- 22. while(true)还是递归函数?
- 23. “while True”循环的替代语法?
- 24. 事件与while(true)循环的比较
- 25. 不能离开while(true) - RealConnection#290 - squid3 - 407
- 26. “while true”语句不起作用
- 27. 为什么TRUE ==“TRUE”在R中为TRUE?
- 28. hibernate中lazy =“true”和fetch =“select”有什么区别?
- 29. 递归。 return func()和if(func())返回true有什么区别?
- 30. return;返回true并返回false - 有什么区别?
https://github.com/igorw/retry/issues/3 - *“这看起来好一点,但是在顶部有一个效率相当低的FETCH_CONSTANT指令。这需要对igorw \ true进行命名空间查找,我们可以通过用while(true)替换while(true)来优化它。 这会摆脱FETCH_CONSTANT调用,并将布尔值设为内联:“* – 2014-09-24 18:23:29
' TRUE/FALSE'的行为与其他常量一样http://php.net/manual/en/reserved.constants.php – 2014-09-24 18:25:48
自5.3.0版本开始,所有的函数/类/变量/常量/ etc都在PHP中被命名空间,而真/ false/null/etc是常量,就像您可能自己定义的任何常量一样......大多数属于全局名称空间,但PHP将首先检查当前名称空间,然后检查全局名称空间没有在当前命名空间中找到它们,所以使用该前缀可以防止当前名称空间检查的开销 – 2014-09-24 18:30:26