#php #model-view-controller #scope
#php #model-view-controller #область видимости
Вопрос:
Вот моя ситуация:
Я работаю над проектом PHP, который использует несколько функций, которые я написал для работы с внешним XML-документом. Что я хочу сделать, так это импортировать один и тот же functions.php
файл на множество разных страниц, которые используют один и тот же код. Проблема в том, что путь к файлу xml не всегда один и тот же и часто зависит от отображаемого в данный момент представления.
То, что я пытаюсь сделать, это в основном объявить a $source = 'path-relative-to-view';
, на мой взгляд, до того, как я include 'path-to-functions.php';
, а затем функции будут обращаться к переменной $source всякий раз, когда это необходимо. Таким образом, мне не придется переписывать функции для каждого отдельного каталога, в котором я нахожусь.
Я предполагаю, что это возможно, но, к сожалению, я недостаточно использовал PHP, чтобы знать наверняка.
Комментарии:
1. Извините, если я неправильно понял. Вы хотите сказать, что ваши функции достаточно универсальны, но у вас есть жестко закодированный $source?
Ответ №1:
Вы могли бы использовать глобальную переменную — но не делайте этого, глобальные переменные не годятся.
Просто перепишите функции, чтобы использовать путь к файлу в качестве одного из их параметров.
Еще одна вещь, которую вы можете сделать, это сгруппировать их внутри класса. Затем используйте переменную-член класса для хранения пути, к которому все они смогут получить доступ.
Комментарии:
1. Это именно тот путь, который я бы выбрал: сначала написание сигнатур методов для включения параметров, а затем, при необходимости, их классификация. Приятно не передавать перезапись метода sig и сразу переходить к его классификации, поскольку это устраняет необходимость повторной передачи источника в качестве параметра. Это просто создание, установка и запуск функций.
2. могу ли я спросить, почему глобальные переменные такие плохие?
3. Дело не в том, что они «плохие» сами по себе. Скорее, недостатки перевешивают преимущества — обычно с большим отрывом.
Ответ №2:
Вам придется объявлять $source
global в каждой функции, которая будет его использовать.
function abc
{
global $source;
//--use $source
}
Комментарии:
1. Даже если это не рекомендуется, я определенно должен знать, как использовать. Мне было трудно понять документацию о том, как ее использовать, но, думаю, мне нужно было всего одно предложение от вас! Спасибо!