在下面的代碼:指定該參數是在構造一個數據庫
protected $db;
public function __construct(Database $db)
{
$this->db = $db;
}
什麼是指定參數$ DB是,如果你可以命名爲任何你想要一個數據庫的點,它仍然會工作?
在下面的代碼:指定該參數是在構造一個數據庫
protected $db;
public function __construct(Database $db)
{
$this->db = $db;
}
什麼是指定參數$ DB是,如果你可以命名爲任何你想要一個數據庫的點,它仍然會工作?
這是一個類型聲明。從manual:
類型聲明允許功能要求的參數是 某種類型的通話時間。如果給定的值是不正確的 類型,則會生成一個錯誤:在PHP 5中,這將是一個可恢復的 致命錯誤,而PHP 7將拋出異常的 TypeError。
要指定類型聲明,應該在參數名稱之前添加類型名稱 。如果參數的默認值設置爲
NULL
,則聲明可以接受NULL
值。
所以,如果我們沒有在你的代碼指定$db
類型聲明,我們可以實例化類與null
的說法,這將導致該對象的$db
參數設置爲null
:
$object = new ClassName(null);
通過指定爲構造單個參數必須是Database
類型的,PHP將拋出(在PHP 7或異常)一個錯誤,如果我們通過它的任何其他比Database
對象。例如:
$object = new ClassName(null); // Throws an error/exception
$db = new Database();
$object = new ClassName($db); // Performs as expected.
在此特定情況下,Database
是你與(即class Database { ... }
)工作的框架/庫中定義的對象類型。
我現在看到了。感謝你的例子,他們真的幫助我! – user3628807
變量/屬性的命名與其類型無關。例如,如果您傳入類型爲「Date」的對象,會發生什麼情況?將會拋出方法/屬性不存在的錯誤。 – BenM
不,我的意思是變量名前的'Database'關鍵字。我如何搜索這個約定,以便了解更多信息? – user3628807
是的,我知道你的意思。這指定了什麼*類型*變量'$ db'應該是。你知道PHP中的變量可以有不同的類型,對吧? – BenM