2012-04-04 1 views
1

Я работаю над преобразованием старой системы языка/перевода на основе define() в более гибкую (возможно, JSON-based, но она все еще открыта).Определяет неопределенный PHP?

В качестве части этого преобразования мне нужно будет преобразовать файлы из 42.php с несколькими тысячами строк в любой формат, который я буду использовать. Некоторые из ссылок на определенные строки ссылаются на другие или используют PHP-код. Мне не нужно сохранять это динамическое поведение (оно никогда не является действительно динамичным), но мне нужно будет иметь «текущие» значения во время преобразования. One определить может выглядеть следующим образом:

define('LNG_Some_string', 'Page $s of $s of our fine '.LNG_Product_name); 

Поскольку все Определяет, имеет легко узнаваемый префикс «LNG_», преобразование одного файла тривиально. Но я хотел бы создать небольшой скрипт, который обрабатывает все 42 за один проход.

В идеале я мог бы либо определить или переопределить определение(), но я не могу найти простой способ сделать это. Это вообще возможно?

В качестве альтернативы, что было бы хорошим способом обработки этого преобразования? Сценарий будет разовым, поэтому его не нужно поддерживать или быстро. Я просто хочу, чтобы он полностью автоматизировался, чтобы избежать человеческой ошибки.

+1

Поскольку 'define' определяет константу , по определению - вы не можете «undefine», потому что это не константа, тогда это переменная. И PHP имеет переменную нотацию и все остальное, что связано с работой с переменными. Короче говоря, вам, по-видимому, не нужны константы, вам нужны массивы для выполнения этой многоязыковой функции. –

+0

@ N.B. Я пытаюсь сделать именно это. Я не хочу констант. Проблема заключается в однократном преобразовании из констант в массив/do/json/ini/whatever. – Martijn

ответ

2

если скорость не важна, так что вы можете использовать функцию get_defined_constants.

$constans = get_defined_constants(true); 
$myconst = array(); 
$myconst = $constans['user']; 

$myconst будет содержать все константы, определенные скриптом :-)
PS: Я не хороший PHP кодировщик, это было просто предложение :-)

+0

Благодаря вам и Леонарду Чаллису мне удалось решить его, сравнив константы до и после включения каждого отдельного файла, используя get_defined_constants() и array_diff(). – Martijn

0

Определенные константы не могут быть неопределенными. Они неизменны.

Возможно, вы можете сделать это прямо перед тем, как они будут определены и изменятся в определенных обстоятельствах.

1

Вы не можете константы неопределенное, но вы можете создать свои новые скрипты utiliising их и функцию постоянной():

<?php 
/* presuming all the .php files are in the same directoy */ 
foreach (glob('/path/*.php') as $file) { 
    $contents = file_get_contents($file); 
    $matches = array(); 
    if (!preg_match('/define\(\'LNG_(\w+)\'/', $contents, $matches) { 
    echo 'No defines found.'; 
    exit; 
    } 

    $newContents = ''; 
    include_once $file; 
    foreach ($matches as $match) { 
    $newContents .= "SOME OUTPUT USING $match AS NAME AND " . constant($match) . " TO GET VALUE"; 
    } 
    file_put_contents('new_'.$file, $newContents); 
} 
?> 

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

  • Нет связанных вопросов^_^