Константа класса в строке в PHP - PullRequest
18 голосов
/ 13 июня 2011

Мое чтение руководства (бит перед заголовком раздела «Доступ к строке и ее модификация по символу») заключается в том, что вы можете делать некоторые хитрые трюки с константами класса и {} внутри строки, но выне может сделать простую вещь, которая заставила бы этот метод вернуть правду:

class c {
    const k = '12';
    public function s() {
        return "Twelve in decimal is {c::k}.";
    }
}

Правильное ли здесь решение для объединения?

Ответы [ 3 ]

11 голосов
/ 13 июня 2011

Правильное ли здесь решение для объединения?

Да.Расширенный фигурный синтаксис не поддерживает его.

В качестве альтернативы, вы можете экспортировать список констант в массив и использовать его (или экспортировать константу в одно имя скалярной переменной), но это не очень хорошорешение IMO.

Обратите внимание, что константы доступны, так как вы можете сделать это:

const k = 'foo';
$foo = 'bar';
echo "{${c::k}}"

, давая вам bar, но это не то, что вы хотите.

7 голосов
/ 13 июня 2011

Это немного загадочно, но в руководстве есть примечание об этом.

Функции, переменные статического класса и константы класса внутри {$} работают с PHP 5. Однакодоступ к значению будет интерпретирован как имя переменной в области, в которой определена строка.Использование одиночных фигурных скобок ({}) не будет работать для доступа к возвращаемым значениям функций или методов или значениям констант класса или статических переменных класса.

Последнее предложение говорит вам, что это не будет работатьпоэтому да, объединение - это путь сюда .


(модифицированный) Пример вышеприведенного абзаца:

<?php
class beers {
    const softdrink = 'rootbeer';
}

$rootbeer = 'A & W';

// This works; outputs: I'd like an A & W
echo "I'd like an {${beers::softdrink}}\n";

// This won't work; outputs: I'd like an {beers::softdrink}
echo "I'd like an {beers::softdrink}\n";
5 голосов
/ 13 июня 2011

Вьющийся синтаксис работает только для «переменных выражений». И вам нужно все, что вы можете получить с помощью {$.

О, есть только один обходной путь:

    $c = "constant";
    return "Twelve in decimal is {$c('c::k')}.";

Что, очевидно, не намного короче и не более читаемо, чем просто использование конкатенации строк здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...