假设我有这样的课程:
class Database
{
public static $hostname = 'localhost';
}
有没有办法做到这一点?
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS Database::$hostname";
目前我在尝试从字符串中访问该类时遇到错误,我想避免这种情况:
$hostname = Database::$hostname;
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS $hostname";
答案 0 :(得分: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)}";
答案 1 :(得分:1)
在某些情况下,使用Complex (curly) syntax会有所帮助 - 但不幸的是,不是这种情况。
引用该页面的相关部分:
使用单花括号(
{}
)将 无法访问返回 功能或方法的价值或 类常量或静态的值 类变量。
你必须最终使用字符串连接:
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS " . Database::$hostname;
答案 2 :(得分:1)
$createDatabaseQuery = "CREATE DATABASE IF NOT EXISTS ".Database::$hostname;