引号内的常量不打印?

时间:2010-05-30 01:25:22

标签: php

这打印苹果:

define("CONSTANT","apple");
echo CONSTANT;

但这不是:

echo "This is a constant: CONSTANT";

为什么?

4 个答案:

答案 0 :(得分:24)

因为“不打印引号内的常量”。正确的形式是:

echo "This is a constant: " . CONSTANT;

点是连接运算符。

答案 1 :(得分:16)

define('QUICK', 'slow');
define('FOX', 'fox');

$K = 'strval';

echo "The {$K(QUICK)} brown {$K(FOX)} jumps over the lazy dog's {$K(BACK)}.";

答案 2 :(得分:6)

如果要在字符串中包含对变量的引用,则需要使用特殊语法。此功能称为字符串插值,并包含在大多数脚本语言中。

This page描述了PHP中的功能。看起来在PHP中的字符串插值过程中不会替换常量,因此获得所需行为的唯一方法是使用Artefacto建议的连接。

事实上,我刚刚发现another post说了很多话:

  

AFAIK,有静态变量,有一个   与常数相同的“问题”:   没有插值可能,只需使用   临时变量或连接。

答案 3 :(得分:0)

这里建议使用连接作为唯一的解决方案,但在使用如下语法时这并不起作用:

CREATE OR REPLACE FUNCTION create_timestamps()   
        RETURNS TRIGGER AS $$
        BEGIN
            NEW.created_at = now();
            NEW.updated_at = now();
            RETURN NEW;   
        END;
        $$ language 'plpgsql';

CREATE OR REPLACE FUNCTION update_timestamps()   
        RETURNS TRIGGER AS $$
        BEGIN
            NEW.updated_at = now();
            RETURN NEW;   
        END;
        $$ language 'plpgsql';

CREATE TRIGGER users_insert BEFORE INSERT ON users FOR EACH ROW EXECUTE PROCEDURE create_timestamps();
CREATE TRIGGER users_update BEFORE UPDATE ON users FOR EACH ROW EXECUTE PROCEDURE update_timestamps();

当然,上面只是将文字' MY_CONSTANT'在$ html。

其他选项包括:

  • 定义一个临时变量来保存常量:

        define("MY_CONSTANT", "some information");
        $html = <<< EOS
        <p>Some html, **put MY_CONSTANT here**</p>
    EOS;
    
  • 如果有很多常量,你可以得到它们的数组并使用它:

        $myConst = MY_CONSTANT;
        $html = <<< EOS
        <p>Some html, {$myConst} </p>
    EOS;
    

当然,在这样一个简单的例子中,没有理由使用&lt;&lt;&lt;&lt;&lt;&lt;&lt;运算符,但是使用更长的输出块,上面两个可能比一串字符串连接更清晰,更容易维护!