到目前爲止,我覺得我已經理解了OOP編程的概念和優點,並且我對於理解如何使用PHP中的類沒有任何困難。在另一個類中傳遞整個類作爲參數
但是,這讓我只是有點困惑。我想我可能會理解,但我仍然不確定。
我一直在下面一組視頻教程(不知道在規則上鍊接到外部資源,但我發現他們在YouTube上),他們是非常自我解釋。除了令人沮喪的是,當導師決定在另一個班級中通過一個班級作爲參數時。至少我認爲這就是發生了什麼;
Class Game
{
public function __construct()
{
echo 'Game Started.<br />';
}
public function createPlayer($name)
{
$this->player= New Player($this, $name);
}
}
Class Player
{
private $_name;
public function __construct(Game $g, $name)
{
$this->_name = $name;
echo "Player {$this->_name} was created.<br />";
}
}
然後我實例化一個Game類的對象並調用它的方法;
$game = new Game();
$game-> createPlayer('new player');
而令人沮喪的,導師並沒有真正解釋爲什麼他已經做到了這一點,並沒有顯示出來,據我所看到的,這將證明它的代碼的任何電話。
Player是否作爲參考傳入Game類中的魔術方法構造函數?這是否意味着整個類可以通過引用在Player類中訪問?當引用$ this而不指向任何特定的方法或屬性時,是否引用了整個類?
如果這是正在發生的事情,那我爲什麼要這樣做呢?如果我在我的遊戲類中創建了一個玩家,那麼我當然可以在遊戲類中訪問我的玩家屬性和方法,對吧?爲什麼我要在我的Player類中使用我的Game類?那麼我可以在Player類中調用createPlayer()嗎?
我道歉,如果我的解釋是,在所有的混亂。
我想我的問題歸結爲;什麼是我完全作爲參數傳遞的,爲什麼我想在每天的OOP編程中做到這一點?
在某些時候,他必須做出'Player'類中使用變量'$ g'的。構造函數中的Game這個詞是[類型提示](http://php.net/manual/en/language.oop5.typehinting.php),它強制只有該類參數中傳遞了類「Game」的對象。其他任何東西都會拋出異常。 –
添加'Class Player extends Game'是否更合乎邏輯?我不是PHP專家,但爲什麼這樣做? –
@AngeloA'Player'沒有擴展'Game',而是'Game'是'Player'的依賴。在'Player'構造函數中,'Game'的公共API將通過'$ g'變量可用 – Phil