NikiC's Antwort ist die beste, aber lassen Sie mich eine nicht offensichtliche Warnung hinzufügen, wenn Namespaces verwenden, so dass Sie nicht mit unerwarteten Verhalten erwischt werden. Die Sache, die man sich merken sollte, ist, dass Defines つねに im globalen Namespace, es sei denn, Sie fügen den Namespace ausdrücklich als Teil des Define-Bezeichners hinzu. Was dabei nicht offensichtlich ist, ist, dass der Bezeichner des Namensraums den globalen Bezeichner übertrumpft. Also :
<?php
namespace foo
{
// Note: when referenced in this file or namespace, the const masks the defined version
// this may not be what you want/expect
const BAR = 'cheers';
define('BAR', 'wonka');
printf("What kind of bar is a %s bar?\n", BAR);
// To get to the define in the global namespace you need to explicitely reference it
printf("What kind of bar is a %s bar?\n", \BAR);
}
namespace foo2
{
// But now in another namespace (like in the default) the same syntax calls up the
// the defined version!
printf("Willy %s\n", BAR);
printf("three %s\n", \foo\BAR);
}
?>
produziert:
What kind of bar is a cheers bar?
What kind of bar is a wonka bar?
willy wonka
three cheers
Was für mich den ganzen const-Begriff unnötig verwirrend macht, da die Idee einer const in Dutzenden von anderen Sprachen ist, dass es immer das gleiche ist, wo immer Sie in Ihrem Code sind, und PHP garantiert das nicht wirklich.
12 Stimmen
Über Leistung (Zeitverschwendung mit Mikro-Optimierung wie ich), siehe diese Antwort :
const
ist zwei Mal schneller alsdefine
. Über die Ladezeit der Seite und die Speichernutzung: siehe diese Frage y dieser Artikel ... Siehe auch etwas über Opcode-Cache aquí .