Was ist der Unterschied zwischen while (true)
vs while (\true)
und am wichtigsten kann jemand klären, warum boolean
durch Namespace in PHP
betroffen sind?Was ist der Unterschied zwischen `while (true)` vs `while ( true)`?
Antwort
In PHP true
, false
und null
sind Konstanten, die vor dem Überschreiben in Namespaces geschützt sind. Als solche ist die folgende ungültig Code:
namespace Foo;
const true = false; // Cannot redeclare constant 'true'
Es ist immer noch möglich ist, eine solche Konstante mit ‚überschrieben‘ definieren() ‚‘:
namespace Foo;
define('Foo\true', false);
var_dump(true); // bool(false)
Allerdings wird diese Funktionalität nicht unterstützt (es könnte ein Bug genannt werden) und PHP kann frei davon ausgehen, dass true
nicht überschrieben werden kann. Zum Beispiel für die Verwendung von true
in einem constexpr Kontext nicht von der obigen Definition betroffen sein:
// 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)
Der Grund, warum die Substitution in dem constexpr Fall passiert, aber nicht in dem „normalen“ Fall ist ein Fehler bei der Umsetzung . Bei Constexprs findet die Substitution vor der Namensauflösung statt, bei normalem Code nach der Namensauflösung.
Die korrekte Implementierung wäre, nach der Namensauflösung immer zu ersetzen, aber speziell true
, false
und null
während der Substitution zu berücksichtigen. Ich plane, das für PHP 7 zu beheben.
- 1. „während“ vs. „while true“
- 2. Einfach tun while-Schleife mit while (true);
- 3. while (true) im Vergleich zur (;;)
- 4. ActionBar setDisplayHomeAsUpEnabled (true) vs setDisplayShowHomeEnabled (true). Was ist der Unterschied?
- 5. Was ist der Unterschied zwischen while und while in VB.NET?
- 6. Unterschied zwischen for (;;) und while (true) in C#?
- 7. while (true) Schleife ohne Pause
- 8. Alternative Syntax für "while True" -Schleife?
- 9. Python - Threading und eine While True Loop
- 10. Was ist der Unterschied zwischen: while und: when in clojure?
- 11. Was ist der Unterschied zwischen "-Dmaven.test.skip.exec" und "-Dmaven.test.skip = true"?
- 12. Was ist der Unterschied zwischen -DskipTests und -Dmaven.test.skip = true
- 13. Was ist der Unterschied zwischen while (cin) und while (cin >> num)
- 14. Was ist der Unterschied zwischen() vs [] vs {}?
- 15. "while True:" Schleife gibt nach einem Zyklus nichts zurück
- 16. Android/Java Thread-Synchronisierung: while (true) {} verursacht Blockierung
- 17. Raspberry Pi3 - Python3: Benötigt GPIO.add_event_detect eine "while true" Schleife?
- 18. Die While (True) -Schleife nicht verstehen - Python 2.7
- 19. Was ist/bin/true
- 20. Sollte man `while true` in einen clojure core.async-Thread einfügen?
- 21. Die Verwendung von 1 == 1 oder True in While-Schleifen
- 22. checked = "checked" vs checked = true
- 23. Unterschied zwischen AutoPostBack = True und AutoPostBack = False?
- 24. ! = False vs. == true
- 25. Der Unterschied zwischen integrierter Sicherheit = True und Integrated Sicherheit = SSPI
- 26. Python Unterschied zwischen umgekehrt (Liste) und List.Sort (Reverse = True)
- 27. bitbake: d.getVar ("X", True) was bedeutet True?
- 28. Php: Was ist der Unterschied zwischen while ... endwhile; und während {// Sachen hier}
- 29. Unterschied zwischen 3 Methoden der Erkennung von True in Racket
- 30. Grundunterschied zwischen transclude: True und ersetzen: True in Angular Js
https://github.com/igorw/retry/issues/3 - * "Das sieht schon ein bisschen besser aus. Aber es gibt eine ziemlich ineffiziente FETCH_CONSTANT Anweisung ganz oben. Dies erfordert eine Namespace-Suche gegen igorw \ true. Wir können das optimieren, indem wir while (true) durch while ersetzen (\ true). Dies entfernt den Aufruf FETCH_CONSTANT und setzt den booleschen Wert inline: "* –
" TRUE/FALSE würde sich wie andere Konstanten verhalten http://php.net/manual/en/reserved.constants.php –
Alle Funktionen/Klassen/Variablen/Konstanten/etc sind in PHP seit Version 5.3.0 mit Namespaced, und true/false/null/etc sind Konstanten, genau wie alle Konstanten, die Sie selbst definieren. Die meisten davon befinden sich im globalen Namespace, aber PHP prüft zuerst den aktuellen Namespace und dann den globalen Namespace, falls dies der Fall ist Es findet sie nicht im aktuellen Namespace, daher verhindert die Verwendung dieses Präfixes den Overhead einer aktuellen Namespace-Prüfung –