2014-01-15 61 views
0

如何在靜態方法中使用'this'?我不斷收到錯誤:PHP Catchable fatal error: Object of class could not be converted to string如何在靜態方法中使用'this' - PHP PDO

這裏是我試圖使用方法:

public static function getFirst(){ 
    $this->_id = 1; 
    $this->_name = $this->_db->query("SELECT name FORM users WHERE id = 1"); 
    $this->_occupation = $this->_db->query("SELECT occupation FORM users WHERE id = 1"); 
    $this->_email = $this->_db->query("SELECT email FORM users WHERE id = 1"); 
} 

我需要有這樣的方法進行分配類中的所有這些變量,當我把這種方法的主要頁面上:

$currentUser = User::getFirst(); 

因此,它從數據庫中提取信息並將其放入類中的變量中。

我是PHP新手,特別是PDO,請在這裏幫我一把! 在此先感謝

+3

'self :: $ _ id' ...你的錯誤並不是因爲這個,因爲'query()'不返回一個字符串。 – h2ooooooo

+0

magic關鍵字$ this用於存在類類型實例的上下文。在一個靜態的上下文中,這個實例不會,因此$ this不能在靜態方法中使用。要引用靜態函數成員內部的靜態屬性,您可以使用關鍵字'self' –

+0

或者,如果您需要從類的實例中調用這些內容,則可以在$ _this = new self; $ _this - > _ id = 1' –

回答

1

你有目標是:

self::$variable 

self::function(); 

編輯:

您的查詢錯誤...變化形式FROM :)

+0

這給了我這個錯誤:'HP致命錯誤:訪問未聲明的靜態屬性:User :: $ _ db' – user3185528

0

你可以在這裏閱讀PHP.net

Static methods are callable without an instance of the object created, the pseudo-variable $this is not available inside the method declared as static.

0

$這在靜態方法中不可用。爲了簡化推理,可以將靜態方法看作是榮耀的全局函數。由於相同的原因,不能在全局函數中使用$ this,$ this指的是class instance,並且該函數不包含任何任何實例,而不將其作爲參數傳入,與靜態方法相同。

您完全可以將靜態方法移動到更簡單的「函數」,混淆將會消失。

PHP確實暴露了一個類似的分辨率關鍵字:self。 self可以在靜態方法內部使用(聽到類方法,而不是實例方法)來引用其他的class methodsclass attributes。基本上:如果它是靜態的,它只能引用其他靜態方法/屬性。如果它是一個實例,可以通過$thisself引用靜態和本地屬性。

我真正的建議是避免靜態方法。你不需要它們,而是使用函數。他們通常更容易測試和導航。否則明智地使用它們:工廠是明智和可接受的選擇,這似乎是你想要實現的(數據庫需要注入作爲參數,因爲它也不是類屬性,而是實例屬性):

public static function getFirst($db){ 
    $inst = new NameOfThisClass(); 
    $inst->_id = 1; 
    $inst->_name = $db->query("..."); 
    return $inst; 
} 
+0

我無法注入數據庫作爲參數,我只需要能夠使用靜態方法從數據庫中獲取結果 – user3185528

相關問題