将整个Class作为参数传递到另一个Class中

Mar*_*utt 6 php oop methods

到目前为止,我觉得我已经理解了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 />";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我实例化Game类的一个对象并调用它的方法;

$game = new Game();
$game-> createPlayer('new player');
Run Code Online (Sandbox Code Playgroud)

相当令人沮丧的是,导师并没有真正解释他为什么这样做,并且在我看来,并没有显示代码中任何可以证明这一点的调用.

Player中的魔术方法构造函数是否在Game类中作为引用传递?这是否意味着可以通过引用在Player类中访问整个类?在引用$ this而不指向任何特定方法或属性时,是否引用了整个类?

如果这是正在发生的事情,那么我为什么要这样做呢?如果我在我的游戏类中创建了一个播放器,那么我肯定可以在游戏类中访问我的播放器属性和方法,对吧?为什么我还要在我的Player类中使用我的Game Class?例如,我可以在Player类中调用createPlayer()吗?

如果我的解释一直令人困惑,我道歉.

我想我的问题归结为; 什么是我作为参数准确传递,为什么我想在每天OOP编程中做到这一点?

Bru*_*ira 4

这称为类型提示,他不会将整个类作为参数传递,而是向类播放器提示第一个参数的类型

PHP 5 引入了类型提示。函数现在可以强制参数为对象(通过在函数原型中指定类名)、接口、数组(自 PHP 5.1 起)或可调用参数(自 PHP 5.4 起)。但是,如果将 NULL 用作默认参数值,则将允许将其作为任何后续调用的参数。

(摘自php手册)

这是否意味着整个类都可以在 Player 类中通过引用访问?

不是整个类,但您可以访问作为参数传递的类的实例