2012-05-25 4 views
10

PHP는 큰 따옴표로 묶인 문자열에서 변수 보간을 지원합니다.함수 출력을위한 PHP 보간 문자열

$s = "foo $bar"; 

그러나 함수 호출 결과를 큰 따옴표 붙은 문자열로 보간 할 수 있습니까?

$s = "foo {bar()}"; 

그런가요? 가능하지 않나요?

+2

이 예는 수 없습니다. 그냥 시도하여 대답을 얻을 수 있습니다 – Ibu

+0

* interpolating * 또는 * 해석 * 의미 했습니까? – hakre

답변

2

PHP의 큰 따옴표 기능은 PHP 코드를 평가하지 않고 간단히 변수를 값으로 대체합니다. 정말이있는 경우

$foo = create_function("", "bar()"); 
$foo(); 

만이 사용 : 당신은 그냥 함수를 만들려면

eval("function foo() { bar() }"); 

을 또는 : 당신이 실제로 동적 (매우 위험) PHP 코드를 평가하려면 eval를 사용해야합니다 다른 옵션은 없습니다.

+1

함수가 클래스 안에 있다면, 다음과 같이 문자열 내부를 참조 할 수 있습니다 :'$ s = "foo {$ this-> bar()}"; – nawfal

14

Overv 's answer가 나타내는 것처럼 string-to-function-name 호출 기술을 사용하는 것이 절대적으로 가능합니다. 파서가 $가 될 것으로 예상하고 있기 때문에 많은 사소한 대체의 경우는, 같은

당신은 변수를 필요
"<input value='<?php echo 1 + 1 + foo()/bar(); ?>' />" 

과 다른 문법보다 훨씬 더 읽습니다. ID tranform이 통어론 해킹으로 잘 작동하는 곳입니다. 그냥 신원 함수를 선언하고, 범위 변수에 이름을 할당합니다

function identity($arg){return $arg;} 
$interpolate="identity"; 

는 그런 다음 함수 인수로 유효한 PHP 식을 전달할 수 있습니다

"<input value='{$interpolate(1 + 1 + foo()/bar())}' />" 

거꾸로 당신이 할 수 있다는 것입니다 많은 사소한 지역 변수와 echo 문을 제거합니다.

단점은 $ interpolate 변수가 범위를 벗어난다는 것입니다. 따라서 함수와 메소드 내부에서 반복적으로 선언해야합니다.