Ist das ein Bug, oder übersehe ich hier was?
Zustand:
Klasse besitzt eine Konstante.
Diese Konstante wird mit dem Inhalt einer global definierten Konstante belegt.
Die global Konstante ist in "dem Moment" allerdings noch gar nicht definiert.
Schwer zu erklären, dehalt hier das Bsp:
PHP
function config(){
// simulierte config - TO_BE_DEFINED wird also erst definiert, wenn die config geladen wird
define('TO_BE_DEFINED',1);
}
class A
{
// define const CONSTANT mit eigtl noch nicht definierter konstante TO_BE_DEFINED
const CONSTANT = TO_BE_DEFINED;
public static function test()
{
echo '<pre>'.
'self::CONSTANT: '.(defined('self::CONSTANT')?self::CONSTANT:'NA').'<br>'.
'TO_BE_DEFINED: '.(defined('TO_BE_DEFINED')?TO_BE_DEFINED:'NA').'<br>'.
'</pre>';
}
public static function meth()
{
// config laden
config();
// testausgabe
self::test();
}
}
//$a = new A(); // Notice: Use of undefined constant TO_BE_DEFINED - assumed 'TO_BE_DEFINED' in ...
//echo A::CONSTANT; // Notice: Use of undefined constant TO_BE_DEFINED - assumed 'TO_BE_DEFINED' in ...
A::meth(); // self::CONSTANT: 1 TO_BE_DEFINED: 1
Alles anzeigen
Wenn ich die Reihenfolge in der Methode meth() ändere in:
dann gibts nen Fehler Notice: Use of undefined constant TO_BE_DEFINED - assumed 'TO_BE_DEFINED' in.
Das heißt ja, dass die Klassen Konstante CONSTANT erst definiert wird, wenn sie das erste mal aufgerufen wird.
Oder?