#php #string #class
#php #строка #класс
Вопрос:
Предполагая, что у меня есть класс, подобный этому:
class Database
{
public static $hostname = 'localhost';
}
Есть ли какой-нибудь способ сделать это?
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS Database::$hostname";
В настоящее время я получаю ошибку при попытке получить доступ к классу из строки, и я хотел бы избежать этого:
$hostname = Database::$hostname;
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS $hostname";
Ответ №1:
В двойных кавычках вы можете использовать только «переменные выражения». Для интерпретации они всегда должны начинаться с $
или {$
. И вы не можете получить доступ к переменной класса напрямую без спецификатора класса.
Единственное предлагаемое обходное решение заключается в следующем:
$Database = "Database"; // class name
"CREATE DATABASE IF NOT EXISTS {$Database::$hostname}";
Но это только другой, худший вариант.
И это было бы альтернативой «переменному выражению»:
$var = "mysql_real_escape_string"; // trick
"CREATE DATABASE IF NOT EXISTS {$var(Database::$hostname)}";
Ответ №2:
В некоторых ситуациях помогает использование сложного (фигурного) синтаксиса, но, к сожалению, не в этом случае.
Цитирование соответствующей части этой страницы :
Использование одиночных фигурных скобок (
{}
) не будет работать для доступа к возвращаемым значениям функций или методов или значениям констант класса или статических переменных класса.
В конечном итоге вам придется использовать конкатенации строк :
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS " . Database::$hostname;
Ответ №3:
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS ".Database::$hostname;