2011-04-06 49 views
0

假设我有一个这样的类:从字符串中查询类?

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

在双引号,你只能使用“变量表达式”。他们必须始终以${$开始解释。如果没有类限定符,则无法直接访问类变量。

唯一的解决方法offerable是这样的:

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

在某些情况下,使用Complex (curly) syntax帮助 - 但不是在这种情况下,很遗憾。

引用该页面的相关部分:

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


你必须最终使用字符串级联:

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