2017-02-12 24 views
0

Я пытаюсь передать интерфейс как параметр конструктора
в класс, который его реализует и вызывает его метод.
Использовать интерфейс как параметр __constructor()

файл: growth.php

<?php 
    interface Growth { 


     public function growPlants():array; 


     } 

файл: forest.php

<?php 
class Forest implements Growth { 

     private $growth; 

     public function __construct(Growth $growth) { 
         $this->growth = $growth; 
        } 

      public function otherFunction():array { 
      $this->growth->growPlants(); 
     } 

    } 

файла: deepforest.php

<?php 
class DeepForest implements Growth { 

     public function growPlants():array { 
      /* Actions */ 
     } 
    } 

файл: test.php

<?php 
include "deepforest.php"; 
include "forest.php"; 

$deeforest = new DeepForest(); 
$forest = new Forest($deeforest); 

Uncaught Error: Call to undefined method deepForest::otherFunction()

ответ

3

По ошибке, переменная вы передаете в Forest конструктор является массивом, а не экземпляр Growth.

Можете ли вы разместить больше кода или подтвердить, какой экземпляр класса вы проходите, и сам ли он расширяет Growth?

+0

Я просто пытался создать объект этого класса, но не имел успеха. Чем я создал другой класс, который реализует этот интерфейс, и я передал его как параметр над лесом ($ newclassobject). Означает ли это, что для создания объекта, который имеет конструктор на основе параметра интерфейса, мне нужно передать объект, который также реализован этим интерфейсом? –

+0

№ Класс должен реализовать интерфейс, чтобы он считался экземпляром интерфейса. Можете ли вы изменить свой вопрос, чтобы включить определение другого класса, о котором вы говорили? – fubar

+0

Пожалуйста, проверьте его снова, я понимаю, что otherFunction() должен быть в классе DeepForest(), но это странно, я не знаю. –