3 回答
TA贡献1772条经验 获得超5个赞
没有。
使用字符串,除了常量标识符外,PHP无法分辨字符串数据。这适用于PHP中的任何字符串格式,包括heredoc。
constant() 是获取常量的另一种方法,但是没有连接也不能将函数调用放入字符串中。
TA贡献1853条经验 获得超18个赞
要在字符串中使用常量,可以使用以下方法:
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 )}" );
记住
这种做法是不明智的,但有时会导致代码更具可读性,因此由您自己决定-存在这种可能性。
- 3 回答
- 0 关注
- 328 浏览
添加回答
举报