2013-05-17 1 views
0

Это вопрос дизайна, который раздражал меня, потому что в глубине души я знаю, что делаю это неправильно. Это не обязательно просто проблема PHP, но сейчас я работаю над PHP-проектом, так что вот откуда я. Я просто дам вам сценарий: У меня есть класс поколения JSON, который используется сценарием доступа к данным. В основном это URL-адрес для веб-сайта, который создает экземпляр класса JSONGen, который, в свою очередь, просматривает статический файл и извлекает запрошенные данные и отправляет его как объект JSON. Файл, содержащий необработанные данные, имеет все размеры в формате массива, что позволяет упростить чтение и обновление (поэтому вам не нужно просеивать необработанные данные JSON и синтаксическую ошибку риска и т. Д.). Мой вопрос заключается в доступе к этому файлу. Я сделал это, чтобы разместить запрос ([json file]) вне определения класса. Все в [json-файле] присваивается одному объекту $ JSON. В конструкторе класса, я делаю:Include vs Расширение для доступа к данным

global $JSON; 
$this->JSON = $JSON; 

(где $ this-> JSON является переменным частным классом).

Это дает мне доступ к JSON из любого места класса, который прекрасен. Он чувствует себя взломанным, но я нигде не могу найти что-либо, обращаясь к этому конкретному типу подхода.

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

Должен ли я использовать удлинитель и помещать JSON в класс (THAT кажется действительно глупым для меня) или продолжить с моим включением? Или я никогда не буду включать файл в класс, подобный этому, и скорее передать его конструктору или другому методу доступа?

Этот конкретный экземпляр представляет собой небольшой проект, и просто не имеет смысла настраивать БД для него. Мы можем добавить в файл, изменить конфигурацию и все обновления сайта .... поэтому, пожалуйста, не говорите мне переключиться на DB-я ищу стратегии для этой конкретной проблемы в более общем смысле.

Спасибо!

+0

Итак, если я правильно понял, включите результаты в создаваемый экземпляр? или вы создаете глобальный экземпляр? – Orangepill

+1

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

+0

@jonathanKuhn, где я собирался ... – Orangepill

ответ

0

Возможно собирается получить downvoted для этого, но здесь идет ...

class JSON_Response { 
     public static $JSON; 

     // don't let people make one of these it gives the illusion that there can be more then one 
     protected function __construct(){} 
} 

затем в файле

JSON_Response::$JSON = $json; 

и доступа, если из любого места, как JSON_Response::$JSON;

и если есть что-то, что вы обычно делаете с json-объектом (отметьте флаг или что-то еще), вы можете просто добавить статический метод в класс JSON_Response.