2013-12-07 3 views
0

Я столкнулся с переменными конфликтующими проблемами в приложении, которое я разрабатываю.Ограничить область действия переменной внутри файла include в php

, например, в одной из моей странице веб-приложений, есть два модуля

я: облака тегов модуль II: фото Список модуль

оба имеют переменную $ listOrder, например, когда модуль обработки сценария " бирка облака "установлен $ listOrder =" tagid desc " как его не установить первоначально.

if(!isset($listOrder)) 
    $listOrder = "tagid desc"; 

Когда сценарий дойдет до модуля для распечатки фотографий, попробуйте обработать следующую строку, как показано выше. поскольку переменная уже установлена ​​в списке облаков тегов. он сохраняет значение «tagid desc» в качестве значения. что вызывает ошибку sql, поскольку «tagid» не является полем фотографий.

Это простой пример, что на каждой странице имеется более 4 или 5 модулей с множеством одинаковых переменных, что вызывает конфликты.

Можем ли мы что-то сделать, чтобы ограничить объем переменных до уровня модуля в php, чтобы избежать таких конфликтов.

ответ

0

Да, вы можете. Вы можете использовать классы и (начиная с PHP 5.3) пространства имен.

Если у вас есть класс, как это, вы можете поместить переменные и функции в этом классе:

class Module1 
{ 
    public $listOrder = 'tagid desc'; 

    public function generateSQL() 
    { 
    return 'select * from YourTable order by ' . $this->listOrder; 
    } 
} 

Теперь вы можете сделать экземпляр модуля (можно даже создать несколько экземпляров) и вызовите его методы:

$module1 = new Module1; 
$module1->listOrder = 'name asc'; // Override default sorting 
$sql = $module1->generateSQL(); 

Это лишь небольшой пример возможностей, но я думаю, полный учебник по классам/OOP будет в порядке здесь. ;)

+0

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

+0

в качестве альтернативы, если я отключу все переменные, установленные в пределах модуля, может решить мою проблему. – irfanmcsd

+0

Включаемые файлы также могут содержать классы. Вы должны сделать как можно меньше в глобальном масштабе. – GolezTrol

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