代码之家  ›  专栏  ›  技术社区  ›  Pedro Henrique

在php中,如何将一个类实例传递给另一个类的构造函数

php
  •  -2
  • Pedro Henrique  · 技术社区  · 6 年前

    我正在尝试实现桥设计模式,遵循以下步骤 Tutorials Point . 我正在将代码从java转换为php并更改一些名称。

    问题是,当我试图将具体的桥实现程序类传递到具体的类实现接口时,会抛出一个错误。

    在代码中更容易理解:

    // LaunchApi.php
    interface LaunchApi
    {
        public function launch();
    }
    
    // RedEngine.php
    class RedEngine implements LaunchApi
    {
        public function launch()
        {
            echo "The red engine is really fast!!!";
        }
    }
    
    // Rocket.php
    abstract class Rocket
    {
        protected $launchApi;
    
        protected function __construct($launchApiImplementer)
        {
            $this->launchApi = $launchApiImplementer;
        }
    
        public abstract function launch();
    }
    
    // FullRocket.php
    class FullRocket extends Rocket
    {
        public function __construct($launchApi)
        {
            parent::__construct($launchApi);
        }
    
        public function launch()
        {
            $this->launchApi->launch();
        }
    }
    
    // LaunchingScript.php
    $redEngine = new RedEngine();
    $redEngine->launch(); // this works
    
    $redRocket = new FullRocket($redEngine);
    $redRocket.launch(); // this won't work
    

    错误抛出为:

    design-patterns\Bridge>php LaunchingBridge.php
    The red engine is really fast!!!
    Fatal error: Call to undefined function launch() in \design-patterns\Bridge\LaunchingBridge.php on line 24
    

    我试图使用&通过引用传递,但它只会更改错误。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Beginner    6 年前

    是的,应该是 $redRocket->launch(); 而不是 $redRocket.launch(); 就像nigel ren所说的