我是相當新的PHP和事實證明,我沒能找到以下問題的解決方案:創建一個類的靜態實例
我有一個簡單的類是這樣的:
class User{
private $name;
function __construct($name){
$this->name = $name;
}
}
所有我想要做的就是確定它的一個靜態實例,如這一個:
public const UNKNOWN_USER = new User("unknown);
,這樣我可以在任何地方使用這個作爲一個虛擬的,例如:
public static login($name){
if(/* userdoesnotexist */){
return UNKNOWN_USER;
}
}
,並檢查它 - 當然:
if(login($name) == UNKNOWN_USER){
/* I don't know you! */
}
我已經試過如下:
$UNKNOWN_USER = new User("unknown");
/* $UNKNOWN_USER not available in class-methods */
define(UNKNOWN_USER, new User("unknown"));
/* not allowed */
class User{
const UNKNOWN_USER = new User("unknown");
/* "new" leads to a syntax error */
}
看看[空對象模式](http://en.wikipedia.org/wiki/Null_Object_pattern),因爲這種似乎是你想要實現的。 –
是的,像@fireeyedboy指出一個空對象或只是'null'可能是一個更好的返回值。因爲:如果有真正的用戶名爲「未知」,以及如果您調用用戶「未知」的登錄方法會發生什麼? – bitWorking
空對象模式確實是一個我不知道的有趣模式,因爲名稱爲「未知」的真實用戶的異議確定無誤。但是我可以處理這種設計缺陷,以獲得更好的代碼可讀性。我討厭'null'作爲返回值,並且登錄方法是靜態的,所以它不會在unknown_user上調用:) – MyPasswordIsLasercats