簡體   English   中英

如何在靜態方法中使用“ this”-PHP PDO

[英]How to use 'this' in static method - PHP PDO

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

這是我嘗試使用的方法:

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,所以請在這里幫助我! 提前致謝

您必須將其定位為:

self::$variable

要么

self::function();

編輯:

您的查詢有誤...將FORM更改為FROM :)

您可以使用

self::$_id, self::$_name

$ _id,$ _ name應該是類的靜態變量。 閱讀http://www.php.net/manual/en/language.variables.scope.php

您可以在PHP.net上閱讀

靜態方法可以在不創建對象實例的情況下調用,偽變量$ this在聲明為static的方法內部不可用。

$ this在靜態方法中不可用。 為了簡化推理,請將靜態方法視為美化的全局函數。 出於相同的原因,您不能在全局函數內部使用$ this,$ this引用一個class instance並且該函數不包含任何實例,而無需像靜態方法一樣將其作為參數傳入。

您可以毫無疑問地將靜態方法移至更簡單的“函數”,這樣混亂的情況就會消失。

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

我真正的建議是避免使用靜態方法。 您不需要它們,而是使用函數。 它們通常更易於測試和導航。 否則,請明智地使用它們:工廠是一個明智且可以接受的選擇,這似乎是您想要實現的目標(DB也需要作為參數注入,因為它也不是類屬性,而是實例屬性):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM