2013-11-20 2 views
2

Я начинаю использовать пространства имен, но мне сложно понять, когда их использовать.PHP: Когда использовать пространства имен над классами для группировки?

  • Я хочу группы «вспомогательные методы»
  • Я не ожидаю, чтобы расширить эту группу (на самом деле не класс)
  • Я думаю, что я хочу, чтобы изменить переменную экземпляра

Вот пример ситуации, которую у меня есть:

$date = ''; // variable to be used in all methods 

function get_sports_data() { 
    get_sports_data_yahoo(); 
    get_sports_data_google(); 
    get_sports_data_bing(); 
} 
function get_sports_data_yahoo() {} // uses $date 
function get_sports_data_google() {} // uses $date 
function get_sports_data_bing() {} // uses $date 

Я не ожидаю использовать вспомогательные функции по отдельности.

  1. Было бы лучше использовать пространство имен под названием get_sports_data с методами для yahoo, google и bing?
  2. Правильно ли установить дату в качестве экземпляра объекта или было бы лучше передать переменную через каждый метод?

Я спросил чат PHP, но я думаю, что они были заняты.

+0

Как насчет 'get_sports_data ($ filter = null)' и '$ filter =" yahoo "'/etc? – Izkata

+0

Итак, объединяя все функции в одну большую функцию? Функции довольно большие, кажется, что их проще разделить. Будет ли это хорошим выбором, если они большие? –

+0

Основываясь на именах функций, я предполагал, что они делают почти то же самое, с некоторыми различными параметрами, основанными на сайте. Если я ошибаюсь, тогда нет, держите их отдельно. – Izkata

ответ

2

Не зная ничего о остальной части приложения это трудно сказать, что вам нужно, но моя первая мысль, что вы можете иметь три класса и интерфейс там ...

  • Интерфейс DataProvider определяет ввод и вывод getSportsData
  • Классы затем реализовать этот интерфейс:
    • YahooDataProvider
    • BingDataProvider
    • Goog leDataProvider

Это кажется немного излишним, но так как вы спрашиваете о дизайне OO, что бы мой естественной отправной точкой.

Пространства имен в основном используются для группировки классов и интерфейсов, когда они составляют согласованный модуль или библиотеку. Как правило, это делается для того, чтобы люди могли использовать несколько библиотек и не беспокоиться о конфликтах с именами.

I.e. каждый набор имен имеет свое собственное пространство, и они никогда не сталкиваются друг с другом.

Возможно, вы решили дать им пространство имен, но, возможно, только в том случае, если они предоставят кучу функциональности, которую, по вашему мнению, вы захотите использовать в другом месте или выпустить для публичного использования.

+0

Это приложение. Он получает данные и печатает их. –

+0

Очевидно, что есть намного больше кода, который только этот маленький фрагмент, и я действительно только пытаюсь сказать, что без дополнительного контекста невозможно предоставить большую помощь по дизайну. Тем не менее, я надеюсь, что несколько указателей на хорошее использование - все, что вы действительно ищете, не так ли? –

+0

Я изучал интерфейсы и, похоже, соответствовал моей цели, хотя использование класса вместо функции действительно кажется излишним. Существует ли «меньший» способ сделать это? –

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