Класс PHP Static имеет очень длинное имя - могу ли я использовать более короткий указатель? - PullRequest
1 голос
/ 02 января 2012

У меня есть статический класс с очень длинным именем, пример:

class SomeClassWithAVeryLongName {
    const CONST_ONE = 'foo';
    const CONST_TWO = 'bar';
}

В моем другом классе я хочу сослаться на эти константы. Проблема в том, что их много, и я использую их как ассоциативные ключи, поэтому мой код становится очень многословным:

$someArray[SomeClassWithAVeryLongName::CONST_ONE][SomeClassWithAVeryLongName::CONST_TWO] = 'foobar';

Можно ли как-нибудь использовать указатель? Что-то вроде:

// Pseudo code
$scwavln = 'SomeClassWithAVeryLongName';
$someArray[$scwavln::CONST_ONE][$scwavln::CONST_TWO] = 'foobar';

Кажется, это не работает для меня. Я на PHP 5.2.6.

Ответы [ 3 ]

1 голос
/ 02 января 2012
class SomeClassWithAVeryLongName {
    const CONST_ONE = 'foo';
    const CONST_TWO = 'bar';
}


$rfl = new ReflectionClass("SomeClassWithAVeryLongName");

$props = $rfl->getConstants();

print_r( $props );

Array
(
    [CONST_ONE] => foo
    [CONST_TWO] => bar
)

http://php.net/manual/en/class.reflectionclass.php

1 голос
/ 02 января 2012
class scwavln extends SomeClassWithAVeryLongName {}
$someArray[scwavln::CONST_ONE][scwavln::CONST_TWO] = 'foobar';
1 голос
/ 02 января 2012

Что ж, для конкретной проблемы просто присвойте постоянные значения более короткой переменной и используйте ее в качестве ключа индекса.

$index1 = SomeClassWithAVeryLongName::CONST_ONE;
$index2 = SomeClassWithAVeryLongName::CONST_TWO;

$someArray[$index1][$index2] = 'foo';

Однако вы можете делать то, что пытались сделать с помощью PHP 5.3:

$Uri = '\\My\\Namespaced\\Class';

// you see the value of the const
var_dump($Uri::MY_CONST);
...