Проблема с областью действия переменной в PHP

#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. Даже если это не рекомендуется, я определенно должен знать, как использовать. Мне было трудно понять документацию о том, как ее использовать, но, думаю, мне нужно было всего одно предложение от вас! Спасибо!