Запросить класс из строки? - PullRequest
0 голосов
/ 06 апреля 2011

Предполагая, что у меня есть такой класс:

class Database
{
    public static $hostname = 'localhost';
}

Есть ли способ сделать это?

$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS Database::$hostname";

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

$hostname = Database::$hostname;
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS $hostname";

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

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

Цитирование соответствующей части этой страницы:

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


Вам придется использовать конкатенацию строк:

$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS " . Database::$hostname;
1 голос
/ 06 апреля 2011
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS ".Database::$hostname;
1 голос
/ 06 апреля 2011

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

Единственный обходной путь - это:

 $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)}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...