[php] 연결하지 않고 문자열에 상수 포함
PHP에서 연결하지 않고 문자열에 상수를 포함시키는 방법이 있습니까?
define('MY_CONSTANT', 42);
echo "This is my constant: MY_CONSTANT";
답변
아니.
Strings를 사용하면 PHP가 상수 식별자와 별도로 문자열 데이터를 말할 수있는 방법이 없습니다. 이것은 heredoc을 포함하여 PHP의 모든 문자열 형식에 적용됩니다.
constant()
상수를 얻는 또 다른 방법이지만, 함수 호출은 연결없이 문자열에 넣을 수 없습니다.
답변
예, (어떻게 든;)입니다.
define('FOO', 'bar');
$test_string = sprintf('This is a %s test string', FOO);
이것은 아마도 당신이 목표로하는 것이 아니지만 기술적으로 이것은 연결이 아니라 대체이며,이 가정에서 연결하지 않고 문자열의 상수를 포함 한다고 생각 합니다.
답변
문자열 내에서 상수를 사용하려면 다음 방법을 사용할 수 있습니다.
define( 'ANIMAL', 'turtles' );
$constant = 'constant';
echo "I like {$constant('ANIMAL')}";
어떻게 작동합니까?
모든 문자열 함수 이름과 임의의 매개 변수를 사용할 수 있습니다
함수 이름을 변수에 넣고 큰 따옴표로 묶은 문자열 안에 매개 변수를 사용하여 호출 할 수 있습니다. 여러 매개 변수와 함께 작동합니다.
$fn = 'substr';
echo "I like {$fn('turtles!', 0, -1)}";
생산
나는 거북이를 좋아한다
익명의 기능들
PHP 5.3 이상을 실행중인 경우 익명 함수를 사용할 수도 있습니다.
$escape = function ( $string ) {
return htmlspecialchars( (string) $string, ENT_QUOTES, 'utf-8' );
};
$userText = "<script>alert('xss')</script>";
echo( "You entered {$escape( $userText )}" );
예상대로 올바르게 이스케이프 된 HTML을 생성합니다.
콜백 배열은 허용되지 않습니다!
지금까지 함수 이름이 호출 가능할 수 있다는 인상을 받고 있다면 is_callable
문자열 내부에서 사용될 때 치명적인 오류가 발생할 때 true를 반환하는 배열은 아닙니다 .
class Arr
{
public static function get( $array, $key, $default = null )
{
return is_array( $array ) && array_key_exists( $key, $array )
? $array[$key]
: $default;
}
}
$fn = array( 'Arr', 'get' );
var_dump( is_callable( $fn ) ); // outputs TRUE
// following line throws Fatal error "Function name must be a string"
echo( "asd {$fn( array( 1 ), 0 )}" );
명심하십시오
이 방법은 잘못 권장되지만 때로는 훨씬 더 읽기 쉬운 코드가 생성되므로 사용자에게 달려 있습니다. 가능성이 있습니다.
답변
define( 'FOO', 'bar');
$FOO = FOO;
$string = "I am too lazy to concatenate $FOO in my string";
답변
define('FOO', 'bar');
$constants = create_function('$a', 'return $a;');
echo "Hello, my name is {$constants(FOO)}";
답변
당신이 정말로 경우 연결없이 에코 일정에 원하는 여기에 솔루션입니다 :
define('MY_CONST', 300);
echo 'here: ', MY_CONST, ' is a number';
참고 :이 예제에서 echo는 많은 매개 변수를 사용합니다 ( 쉼표를보십시오) ) 실제로 연결되지 않습니다
Echo는 함수로 작동하고 더 많은 매개 변수를 사용하며 연결보다 더 효율적입니다. 연결하고 에코 할 필요가 없기 때문에 새로운 String 연결 객체를 만들 필요없이 모든 것을 에코합니다. :))
편집하다
당신이 고려하는 경우도 합치 같은 문자열 지내는 문자열 매개 변수를 나 쓰기 와 전체 문자열을 “ 는 , (쉼표 버전)는 항상 가장 빠른, 다음에 간다 . (와 연결 ‘ 작은 따옴표) 및 방법을 구축하는 가장 느린 문자열은 큰 따옴표를 사용하고 있습니다 “ , 이런 식으로 작성된 표현식은 선언 된 변수 및 함수에 대해 평가되어야하기 때문에 ..
답변
당신은 할 수 있습니다 :
define( 'FOO', 'bar' );
$constants = get_defined_constants(true); // the true argument categorizes the constants
$constants = $constants[ 'user' ]; // this gets only user-defined constants
echo "Hello, my name is {$constants['FOO']}";