2016-11-19 2 views
0

Я Тринг объявить интерфейсы для моих классов, как это:Объявление интерфейса в PHP - почему объявления смешиваются?

namespace Helpers\Interfaces { 
    interface Cache { 
     public static function getInstance($profile = null); 
    } 
} 

А потом применять их так:

namespace Helpers { 
    class Cache implements Interfaces\Cache { 
     public static function getInstance($profile = null) { 
      /* ... */ 
     } 
    } 
} 

До сих пор, так хорошо (по-видимому, по крайней мере). Проблема, которую я имею, это NetBeans, дает мне сообщение о том, что мой класс не является абстрактным и не реализует определенный метод.

Метод принадлежит к объекту, который я создал для сбора параметров конфигурации, необходимых для работы определенных методов, без предоставления определенных параметров конфигурации в зависимости от объекта (например, хоста, порта, ключа API и т. Д.).

Этот метод, в данном примере, называется \Configuration\Helpers\Cache::getConfiguration($profile);

Конфликтная декларация приходит от этого интерфейса:

namespace Configuration\Helpers\Interfaces { 
    interface Cache { 
     public static function getConfiguration($profile = null); 
    } 
} 

, который применяется следующим образом:

namespace Configuration\Helpers { 
    class Cache implements Interfaces\Cache { 
     public static function getConfiguration($profile = null) { 
      /* ... */ 
     } 
    } 
} 

Это эффективно смешивание интерфейсы, хотя они именовались! Я хотел бы отметить, что и интерфейс, и объявление класса, реализующие такой интерфейс, всегда находятся в одном файле, по одному файлу на объект.

PHP версия 7.0.13 на NetBeans 8.2.

Что я делаю неправильно?

ответ

0

Ваши интерфейсы и классы находятся в разных пространствах имен. Возможно, вам придется добавить инструкцию использования в свой класс. Например, вы можете добавить: использовать Helpers \ Interfaces в качестве интерфейсов. Эта строка может идти выше определения класса: class Cache реализует интерфейсы \ Cache.

Смотрите также: http://php.net/manual/en/language.namespaces.definitionmultiple.php

+0

Я дам ему попробовать. Спасибо за подсказку :) –

+0

Нет, это не приводит к исчезновению ошибки. Я, однако, подозреваю, что это связано с NetBeans, а не с моим стилем кодирования, так как у меня нет никаких предупреждений или ошибок при выполнении моего кода, это просто NetBeans, жалующийся на объявление ... –

Смежные вопросы