从字符串内部查询类


Query class from inside a string?

假设我有一个这样的类:

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

有什么办法可以做到吗?

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

目前,当试图从字符串内访问类时,我得到一个错误,我想避免这个:

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

在双引号中只能使用"变量表达式"。它们必须总是以${$开头才能被解释。如果没有类限定符,就不能直接访问类变量。

唯一可用的解决方法是:

 $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)}";

在某些情况下,使用Complex(花括号)语法是有帮助的——但不幸的是,在这种情况下没有帮助。

引用该页的相关部分:

使用单花括号({})将不能访问返回值函数或方法的值类常量或静态的值类变量。


您最终将不得不使用字符串连接:

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