В C макрос является замена синтаксиса, что препроцессор использует как для оптимизации кода (избежать ненужной функции скачок для короткой задачи) и сделать его легко записи для кодировщика. Компонент просто переводит псевдокод (макрос ) в фактический код, когда код компилируется в исполняемый файл. Поскольку PHP не прекомпилирован, я не вижу, как это может быть полезно. Код источника php должен быть предварительно скомпилирован, чтобы получить замену ... Макросы просто не имеют пурпуру во компилированном языке во время выполнения, как в прекомпилированном языках.
Когда я работал над модульной системой, где каждый модуль был файлом с определением объекта . Мне нужно было сделать некоторые глобальные переменные доступными в методе этого объекта (т. Е. Объекта подключения к базе данных) в каждом модуле, но я хотел, чтобы имел список этих переменных только один раз во всей системе (было бы неприятно редактировать все модули если я решил, например, изменить имя любой из этих переменных).
Функция бесполезна в этом случае, поэтому мне нужен макрос.
Я решил проблему так:
// In initialisation part of code
define('MY_MACRO', 'global $database, $global_config,
$any_other_needed_variables;');
// In beginning of module object's method
eval (MY_MACRO);
Но, возможно, есть гораздо лучший способ сделать это
Разница заключается в том, что макросы применяются в виде текста замещения перед тем разбор осуществляются. Это означает, что макросы могут выполнять замену на код, который сам по себе не был бы корректным языком .
Классическим примером неправильного использования этого вида техники в С
#define BEGIN {
#define END }
then you can do silly things like:
for (i = 0; i < 10; i++)
BEGIN
printf("%d\n", i);
END
Используется рассудительно эти виды техники могут открыть все виды возможностей.
Пытались ли вы что-нибудь самостоятельно? Каков ваш подход? Возможно, это поможет нам понять ваш запрос. –