2012-04-25 3 views
1

간단한 질문입니다. 필자는 원하는 연락처 페이지에서 호출하기가 쉽기 때문에 연락처 양식을 함수에 저장했습니다.str_replace : 문자열을 함수로 바꾸기

이제는 유용성을 확장하기 위해 str_replace를 사용하여 {contactform}을 검색하고 싶습니다.

예 :

function contactform(){ 
    // bunch of inputs 
} 

$wysiwyg = str_replace('{contactform}', contactform(), $wysiwyg); 

가 그러니까 기본적으로, {것은 ContactForm}이 발견 된 경우. contactform의 출력으로 교체하십시오.

이제 대체하기 전에 함수를 실행하고 출력에 변수를 저장 한 다음 동일한 변수로 바꿀 수 있다는 것을 알고 있습니다. 그러나 내가 염두에 두는 것보다 더 좋은 방법이 있는지 알고 싶습니다.

감사

+0

{contactform}이 대부분 나타나지 않으면 @jedwards에서 제안한대로 'preg_replace_callback'을 사용하는 것이 더 좋습니다. 항상 존재한다면 현재 코드가 가장 적합합니다. –

답변

1

contactform()의 내용을 두 번 이상 사용할 계획이라면 괜찮습니까? $ var로 설정합니다.

str_replace 함수를 실행하기 전에 http://php.net/strpos을 사용하여 {contact_form}이 있는지 확인하십시오.

당신은 두 가지를 시도하고 서버 지원이 벤치 마크는 경우 수 :

<?php echo 'Memory Usage: '. (!function_exists('memory_get_usage') ? '0' : round(memory_get_usage()/1024/1024, 2)) .'MB'; ?> 
0

당신이 당신의 질문에 대답하기 위해 여기 http://php.net/call_user_func

$wysiwyg = 'Some string and {contactform}'; 

$find = '{contactform}'; 

strpos($wysiwyg, $find) ? call_user_func($find) : ''; 
2

PHP의 call_user_func() 자세한 내용을 살펴 있어야 할 수 있습니다, 당신은 사용 PCRE 다음 preg_replace_callback과는 contactform() 기능을 수정할 수 중 또는 일치 항목을 허용하는 래퍼를 만듭니다.

나는 한 번 함수를 실행하고 변수에 저장하는 것이 더 바람직하다고 생각합니다.

0

예,이 하나를 직접 작성합니다. (이미 PHP가있는 것이 확실하지 않은 경우, 내 다음 지점을 참조하십시오.)

아, 그게 있습니다 : preg_replace_callback(). 물론 3 개의 정규 표현식 라이브러리 중 하나이며 간단한 문자열 조작을 수행하지 않습니다.

어쨌든, 저의 요지는 PHP의 [비] 디자인 지침을 따르지 마십시오. 콜백을 사용하여 멀티 바이트 안전 문자열 대체 함수를 작성하고 call_user_func()을 사용하지 마십시오.

관련 문제