2010-11-30 3 views
0

현재 작업하고있는 웹 사이트의 템플릿 시스템을 만들려고합니다. preg_replace를 사용하여 특정 태그로 둘러싸인 데이터를 처리하는 함수를 호출하려고합니다. 예를 들어, process ('date')는 오늘 날짜를 반환하고 $ 날짜 $와 같은 코드에 넣습니다. preg_replace를 사용하여 수정해야하는 문자열을 찾았지만 함수를 호출 할 수 없습니다. PHP는 함수가 대신 속성이라고 생각하는 것 같습니다. preg_replace가 속성으로 함수를 처리 중입니다.

내가 사용하고있는 코드입니다 :

$view = preg_replace("/\$_([a-zA-Z0-9_]+)_\$/e", "$this->process('\\1')", $view); 

입니다 오류가 나는 얻을 :

공지 사항 : 정의되지 않은 속성 : /location/ClassName.class.php에서 클래스 이름 : $ 과정 온라인 X

나는 이것을 충분히 설명하기를 희망한다. 프로세스로 속성을 표시하는 대신 preg_replace를 메서드로 실행하려면 어떻게해야합니까?

+0

은'$ this'가 문자열을 바꿀 때 올바른 범위에 있습니까? – stillstanding

+0

나는 이렇게 믿는다 ... 나는 $ this-> process ('date') 라인을 추가 할 수있다; preg_replace 이상에서 작동합니다. – Wige

답변

1

preg_replace_callback은 실제로하려는 것을 위해 설계된 것으로서 preg_replace 대신에 preg_replace_callback을 사용하는 것이 좋습니다. 가능한 문제는 범위/기능 접근성입니다. preg_replace를 호출하는 코드가 호출하려고하는 함수에 액세스 할 수없는 경우 PHP가 함수를 찾을 수 없으므로이 오류가 발생할 수 있으며이를 매개 변수로 처리하는 것이 기본값 일 수 있습니다. 함수가이 preg_replace와 같은 파일에 없으면 파일을 변경하여 변경 사항을 확인하십시오.

+0

이 함수는 preg_replace를 호출하는 메소드와 동일한 클래스에있는 메소드입니다. preg_replace_callback 사용을 고려하고 있었지만 범위가 제대로 유지되는지 확신 할 수 없었습니다. preg_replace_callback ("/ \ $ _ ([a-zA-Z0-9 _] +) _ \ $ /", "this-> process", $ view); 또는 프로세스의 범위를 어떻게 나타낼 것인가? – Wige

+0

테스트 후, 클래스의 멤버 함수에서 호출되거나 클래스 변수를 전달한 preg_replace_callback은 전혀 작동하지 않습니다. 기본적으로 preg_replace_callback에서 $ this를 사용하면 오류가 발생하므로 다시 preg_replace를 사용하려고합니다. – Wige

+0

호출 된 메서드를 정적 메서드로 변경해보십시오. 이전에 템플릿 객체가 객체로 코딩되었지만 코드가 호출 될 때 객체로 생성되지 않는 컴파일 시간 후에 코드를 호출한다는 사실을 살펴 보았습니다. –

관련 문제