为了账号安全,请及时绑定邮箱和手机立即绑定

在字符串中包含常量而不进行串联

在字符串中包含常量而不进行串联

PHP
交互式爱情 2019-12-26 11:05:50
PHP中有没有一种方法可以在字符串中包含常量而不进行串联?define('MY_CONSTANT', 42);echo "This is my constant: MY_CONSTANT";
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

没有。


使用字符串,除了常量标识符外,PHP无法分辨字符串数据。这适用于PHP中的任何字符串格式,包括heredoc。


constant() 是获取常量的另一种方法,但是没有连接也不能将函数调用放入字符串中。



查看完整回答
反对 回复 2019-12-26
?
慕容森

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 )}" ); 

记住

这种做法是不明智的,但有时会导致代码更具可读性,因此由您自己决定-存在这种可能性。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信