Ich weiß, dass diese Frage bereits beantwortet wurde, aber in keiner der aktuellen Antworten wird das Namespacing erwähnt und wie es sich auf Konstanten und Defines auswirkt.
Ab PHP 5.3 sind consts und defines in den meisten Punkten ähnlich. Es gibt jedoch noch einige wichtige Unterschiede:
- Konstanten können nicht über einen Ausdruck definiert werden.
const FOO = 4 * 3;
funktioniert nicht, aber define('CONST', 4 * 3);
tut.
- Der Name, der an
define
muss den Namespace enthalten, der innerhalb dieses Namespaces definiert werden soll.
Der folgende Code soll die Unterschiede verdeutlichen.
namespace foo
{
const BAR = 1;
define('BAZ', 2);
define(__NAMESPACE__ . '\\BAZ', 3);
}
namespace {
var_dump(get_defined_constants(true));
}
Der Inhalt des Benutzer-Subarrays wird sein ['foo\\BAR' => 1, 'BAZ' => 2, 'foo\\BAZ' => 3]
.
\=== UPDATE ===
Das kommende PHP 5.6 wird ein wenig mehr Flexibilität mit const
. Sie können nun Konstanten in Form von Ausdrücken definieren, vorausgesetzt, dass diese Ausdrücke aus anderen Konstanten oder aus Literalen bestehen. Das bedeutet, dass das Folgende ab 5.6. gültig sein sollte:
const FOOBAR = 'foo ' . 'bar';
const FORTY_TWO = 6 * 9; // For future editors: THIS IS DELIBERATE! Read the answer comments below for more details
const ULTIMATE_ANSWER = 'The ultimate answer to life, the universe and everything is ' . FORTY_TWO;
Sie können aber immer noch keine Konstanten in Form von Variablen oder Funktionsrückgaben definieren, also
const RND = mt_rand();
const CONSTVAR = $var;
wird immer noch nicht verfügbar sein.
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í .