Класс запроса из строки?

#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;