почему я получаю уведомление здесь?
потому что вы имеете в виду self::CONSTANT
, но пытались использовать глобальный CONSTANT
, например, ваш код предполагает
const CONSTANT = 3; // global constant
class Constant {
const CONSTANT = 3; // class constant
public $test1 = 'CONSTANT';
public $test2 = CONSTANT; // refers to global constant
}
но вы хотели сделать это:
class Constant {
const CONSTANT = 3;
public $test1 = 'CONSTANT';
public $test2 = self::CONSTANT; // self indicated class scope
}
С последним это
$reflectionClass = new ReflectionClass('Constant');
var_dump( $reflectionClass->getDefaultProperties() );
даст
array(2) {
["test1"]=>
string(8) "CONSTANT"
["test2"]=>
int(3)
}
Есть ли способ получить ["test2"] => self::CONSTANT
через отражение?Нет. Reflection API оценит константу.Если вы хотите self::CONSTANT
, вам придется попробовать некоторые из сторонних API статического отражения.
И, очевидно, если вы хотите 'CONSTANT'
, напишите "'CONSTANT'"
.
Относительно РЕДАКТИРОВАНИЯ:
Я получаю ПОСТОЯННОЕ для обоих случаев ($ test1 и $ test2), но из-за этого я не могу различить их.Я хочу знать: это строка или имя константы.
$foo = CONSTANT
означает присвоить константу значение свойству foo.Это не значит присваивать константу самой.Присваивая значение свойству, оно больше не является постоянным значением.Это изменчиво«Имя константы» представляется в виде строки.Вы можете использовать ReflectionClass::hasConstant
, чтобы проверить, является ли эта строка также именем определенной константы в классе, или использовать defined
для глобальных констант.