Я только начинаю писать часть программного обеспечения с открытым исходным кодом, которое написано процедурно как альтернатива скелетам/фреймворкам ООП mvc. Поэтому, хотя я мог бы просто написать свою собственную структуру OOP MVC, целью является сделать все это процедурно. Это предназначено для учебных целей и для целей создания готовой кодовой базы DIY при выполнении нового проекта. Я еще не полностью разбираюсь в ООП, поэтому я чувствую, что делать это так - шаг в этом направлении. Однако цель этого проекта - быть процедурной альтернативой, поэтому он должен быть написан процедурно (и я даю это предисловие, чтобы избежать ответов на использование ООП).PHP: Промежуточный код - используйте пространство имен или массив замыканий, чтобы избежать загрязнения глобального пространства имен?
После того, как я начал писать, я понимаю, что код сильно загрязняет глобальное пространство имен (например, процедурный код).
Во-первых, решить проблему загрязнения глобального пространства имен и минимизации случайных конфликтов имен, я решил префикс переменные и функции, используемые как так:
$prefix_variableName = 'value';
prefix_functionName($var){ return $var; }
Тогда я понял, есть лучшие способы сделать это. У меня есть две идеи:
1: Создайте глобальный массив замыканий. Таким образом, единственным глобальным я установил в коде есть один массив .. как так ..
$myApp = array(
'var1' => 'value1',
'var2' => 'value2',
'function1' => function($var1){ return $var1; },
'function2' => function($var2){ return $var2; }
//etc
);
2: Создание пространства имен для глобального кода в верхней части каждого файла .. как ..
namespace myApp;
$var1 = 'value1';
function1($msg){ return $msg; }
Возможно ли оба варианта? Может ли процедурный код заменяться именами имен? Какой из них является лучшим вариантом для этого обстоятельства и почему? Есть ли еще варианты?
«Я хочу написать проект, отличный от OO» [приступает к повторному использованию PHP OO] Проблемы, которые у вас возникают, - это точная причина для OO *. – Sammitch
Я создал функцию, называемую getResource один раз. Он принял ключ (строка), объявил статический массив и возвратил false, если ключ не был в массиве. – bassxzero
@sammitch, вы правы. однако, я все еще могу написать процедурный код и попытаться избежать проблем, если смогу, не так ли? Код будет не-OO, при этом максимизируя проблемы. Конечно, это барьер, но он необходим по назначению. Мой проект будет для людей, которые либо хотят писать процедурные, либо не знают OO (и мне хотелось бы, чтобы что-то подобное было доступно мне). – Scott