当前位置:  开发笔记 > 编程语言 > 正文

在字符串中包含常量而不连接

如何解决《在字符串中包含常量而不连接》经验,为你挑选了9个好方法。

PHP中是否有一种方法可以在不连接的情况下在字符串中包含常量?

define('MY_CONSTANT', 42);

echo "This is my constant: MY_CONSTANT";

Pekka suppor.. 136

没有.

使用字符串,PHP无法将字符串数据与常量标识符区分开来.这适用于PHP中的任何字符串格式,包括heredoc.

constant() 是一种获取常量的替代方法,但函数调用也不能在没有连接的情况下放入字符串中.

PHP中的常量手册



1> Pekka suppor..:

没有.

使用字符串,PHP无法将字符串数据与常量标识符区分开来.这适用于PHP中的任何字符串格式,包括heredoc.

constant() 是一种获取常量的替代方法,但函数调用也不能在没有连接的情况下放入字符串中.

PHP中的常量手册


"函数调用不能放入字符串中"是的它可以:`define('ANIMAL','turtles'); $常数= '常数'; echo"我喜欢{$ constant('ANIMAL')}";`
我只是指出它是可能的,而不是评论哪种方式更好.
呵呵!但是每个人都有创造力的应得+1.:)

2> Felix Kling..:

是的(以某种方式;)):

define('FOO', 'bar');

$test_string = sprintf('This is a %s test string', FOO);

这可能不是你的目标,但我认为,从技术上讲,这不是连接而是替换,并且从这个假设中,它包含一个不带连接的字符串中的常量.


@Pekka:我知道:-D(就在这个时候......;))
:-D总有办法
@blahunka:很好的座右铭.我们可能每天都在使用它

3> raveren..:

要在字符串中使用常量,可以使用以下方法:

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 = "";
echo( "You entered {$escape( $userText )}" );

按预期生成正确转义的html.

不允许回调数组!

如果到现在你的印象是函数名可以是任何可调用的,那不是这种情况,因为传递给它时返回true的数组is_callable在字符串中使用时会导致致命错误:

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

记住

这种做法是不明智的,但有时候会产生更易读的代码,所以这取决于你 - 可能性就在那里.


我可以看到这对于构建模板引擎很有用,但实际上很难使用。

4> 小智..:
define( 'FOO', 'bar');  
$FOO = FOO;  
$string = "I am too lazy to concatenate $FOO in my string";


当我有一堆疯狂的SQL字符串要编写时,这是我最常用的.还有......被动攻击性很强?;-)
这只魔咒最少,以看起来多余为代价

5> thetaiko..:
define('FOO', 'bar');
$constants = create_function('$a', 'return $a;');
echo "Hello, my name is {$constants(FOO)}";



6> Juraj Blahun..:

如果你真的想在没有连接的情况下回显常量,那么解决方法是:

define('MY_CONST', 300);
echo 'here: ', MY_CONST, ' is a number';

注意:在这个例子中,echo接受了许多参数(查看逗号),因此它不是真正的连接

Echo表现为一个函数,它需要更多参数,它比串联更有效,因为它不必连接然后回显,它只是回应所有内容而无需创建新的String连接对象:))

编辑

另外,如果你考虑连接字符串,传递字符串作为参数用",The ,(逗号版本)编写整个字符串总是最快的,接下来就是.(用'单引号连接)和最慢的字符串构建方法是使用双引号",因为必须根据声明的变量和函数来评估以这种方式编写的表达式.



7> Simon..:

你可以这样做:

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']}";



8> Yamiko..:

正如其他人所指出的那样,你无法做到这一点.PHP有一个函数constant()不能直接在字符串中调用,但我们可以轻松地解决这个问题.

$constant = function($cons){
   return constant($cons);
};

以及它的用法的基本例子:

define('FOO', 'Hello World!');
echo "The string says {$constant('FOO')}"; 



9> Jekis..:

最简单的方法是

define('MY_CONSTANT', 42);

$my_constant = MY_CONSTANT;
echo "This is my constant: $my_constant";

另一种使用方式 (s)printf

define('MY_CONSTANT', 42);

// Note that %d is for numeric values. Use %s when constant is a string    
printf('This is my constant: %d', MY_CONSTANT);

// Or if you want to use the string.

$my_string = sprintf('This is my constant: %d', MY_CONSTANT);
echo $my_string;

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有