2012-04-04 3 views
1

저는 이전의 define() 기반 언어/번역 시스템을보다 유연한 것으로 변환하려고합니다. (아마도 JSON 기반이지만 여전히 열려 있습니다).정의되지 않은 PHP 정의?

이 변환의 일부로 수천 개의 문자열이있는 42 개의 .php 파일을 각각의 형식으로 변환해야합니다. 정의 된 문자열 중 일부는 다른 정의를 참조하거나 PHP 코드를 사용합니다. 이 동적 인 동작을 유지할 필요는 없습니다 (어쨌든 결코 동적 인 것은 아닙니다).하지만 변환시 "현재"값을 가져야합니다. 하나는 다음과 같을 수 정의 : 모든 정의하므로

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

는 하나의 파일을 변환하는 것은 간단하다, 쉽게 인식 'LNG_'접두사가. 하지만 한 번에 42 개를 모두 처리하는 작은 스크립트를 만들고 싶습니다.

이상적으로는 define()의 정의를 해제하거나 재정의 할 수 있지만 간단한 방법은 찾을 수 없습니다. 가능한가요?

또는이 변환을 처리하는 좋은 방법은 무엇입니까? 스크립트는 일회성 일 것이므로 유지 보수가 가능하거나 빠를 필요가 없습니다. 난 그냥 인간의 오류를 피하기 위해 완전히 자동화 싶습니다.

+1

:-) 단지 제안했다 , 정의에 의해 - 그것은 상수가 아니기 때문에 당신은 그것을 '정의 해제'할 수 없습니다 - 그것은 변수입니다. 그리고 PHP는 가변 표기법과 변수로 작업하는 모든 것을 제공합니다. 간단히 말해서, 상수가 필요없는 것 같습니다.이 다중 언어 기능을 수행하려면 배열이 필요합니다. –

+0

@ N.B. 나는 그것을 정확하게하려고 노력하고있다. 나는 상수를 원하지 않는다. 문제는 상수에서 array/do/json/ini/whatever로 한 번 변환하는 것입니다. – Martijn

답변

2

당신이 get_defined_constants 기능을 사용할 수 있도록 속도가 중요하지 않은 경우.

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

$myconst
PS :-) 스크립트에 의해 정의 된 모든 상수를 포함합니다 : define`는 상수를 정의`때문에 내가 좋은 PHP는 코더 아니에요, 그것은

+0

당신과 Leonard Challis 덕분에 필자는 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); 
} 
?> 
관련 문제