定界符    echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?> 

解决方案 »

  1.   

    另一种给字符串定界的方法使用定界符语法(“<<<”)。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。 
      

  2.   

    定界符
    另一种给字符串定界的方法使用定界符语法(“<<<”)。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。 结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。 
      

  3.   

    heredoc句法结构:<<<。在该提示符后面,要定义个标识符,然后是一个新行。接下来是字符串 本身,最后要用前面定义的标识符作为结束标志。 结束时所引用的标识符必须在一行的开始位置, 而且,标识符的命名也要像其它标签一样遵守PHP的规则:只能包含字母、数字和下划线,并且不能用数字和下划线作为开头。 
    要注意的是结束标识符这行除了 可能有一个分号(;)外,绝对不能包括其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或tabs。更重要的是结束标识符的前面必须是个被本地操作系统认可的新行标签,比如在UNIX和Mac OS X系统中是\n ,而结束标识符(可能有个分号)的后面也必须跟个新行标签。 如果不遵守该规则导致结束标签不“干净”,PHP将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP将会在最后一行产生一个句法错误。 Heredocs结构不能用来初始化class,而从PHP 5.3以后,则该限制只能用在包含变量的情况下。 Example #1 非法的示例<?php
    class foo {
        public $bar = <<<EOT
    bar
    EOT;
    }
    ?> 
    Heredoc结构就象是没有使用双引号的双引号字符串, 这就是说在heredoc结构中引号不用被替换,但是上文中列出的字符 (\n等)也可使用。 变量将被替换,但在heredoc结构中字符串表达复杂变量时,要格外小心。 Example #2 Heredoc结构的字符串示例<?php
    $str = <<<EOD
    Example of string
    spanning multiple lines
    using heredoc syntax.
    EOD;/* 含有变量的更复杂示例 */
    class foo
    {
        var $foo;
        var $bar;    function foo()
        {
            $this->foo = 'Foo';
            $this->bar = array('Bar1', 'Bar2', 'Bar3');
        }
    }$foo = new foo();
    $name = 'MyName';echo <<<EOT
    My name is "$name". I am printing some $foo->foo.
    Now, I am printing some {$foo->bar[1]}.
    This should print a capital 'A': \x41
    EOT;
    ?> 
    以上例程会输出:My name is "MyName". I am printing some Foo.
    Now, I am printing some Bar2.
    This should print a capital 'A': A也可以把Heredoc结构用在函数参数中来传输数据: Example #3 Heredoc结构在参数中的示例<?php
    var_dump(array(<<<EOD
    foobar!
    EOD
    ));
    ?> 
    在PHP 5.3.0以后,也可以用Heredoc结构来初始化静态变量和类的属性和常量: Example #4 使用Heredoc结构来初始化静态值<?php
    // 静态变量
    function foo()
    {
        static $bar = <<<LABEL
    Nothing in here...
    LABEL;
    }// 类的常量、属性
    class foo
    {
        const BAR = <<<FOOBAR
    Constant example
    FOOBAR;    public $baz = <<<FOOBAR
    Property example
    FOOBAR;
    }
    ?> 
    在PHP 5.3.0中还在Heredoc结构中用双引号来声明标志符: Example #5 在heredoc结构中使用双引号<?php
    echo <<<"FOOBAR"
    Hello World!
    FOOBAR;
    ?> 
      

  4.   

    定界符 
    1.PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
    2.在PHP定界符中的任何特殊字符都不需要转义;
    3.PHP定界符中的PHP变量会被正常的用其值来替换。
      

  5.   

    Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。但是现在的一些论坛程序,和 部分文章系统,都巧妙的使用heredoc技术,来部分的实现了界面与代码的准分离,phpwind模板就是一个典型的例子。 如下:<?php
    header("content-type:text/html;charset=utf-8");
    $name = '浅水游';
    print <<<EOT
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>Untitled Document</title>
    </head>
    <body>
    12321;
    Hello,$name!
    </body>
    </html>
    EOT;
    ?>
    1.以<<<End开始标记开始,以End结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。
    2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.或,来拼接,如下:
    $v=2;
    $a= <<<EOF
    "abc"$v
    "123"
    EOF;
    echo $a; //结果连同双引号一起输出:"abc"2 "123"
    3.heredoc常用在输出包含大量HTML语法d文档的时候。比如:函数outputhtml()要输出HTML的主页。可以有两种写法。很明显第二种写法比较简单和易于阅读。
    function outputhtml(){
    echo "<html>";
    echo "<head><title>主页</title></head>"; 
    echo "<body>主页内容</body>";
    echo "</html>;
    }
    function outputhtml()
    {
    echo <<<EOT
       <html>
       <head><title>主页</title></head>
       <body>主页内容</body>
       </html>
    EOT;
    }
    outputhtml();
    heredoc句法结构:<<<。在该提示符后面,要定义个标识符,然后是一个新行。接下来是字符串 本身,最后要用前面定义的标识符作为结束标志。 结束时所引用的标识符必须在一行的开始位置, 而且,标识符的命名也要像其它标签一样遵守PHP的规则:只能包含字母、数字和下划线,并且不能用数字和下划线作为开头。 
    要注意的是结束标识符这行除了 可能有一个分号(;)外,绝对不能包括其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或tabs。更重要 的是结束标识符的前面必须是个被本地操作系统认可的新行标签,比如在UNIX和Mac OS X系统中是\n ,而结束标识符(可能有个分号)的后面也必 须跟个新行标签。 如果不遵守该规则导致结束标签不“干净”,PHP将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP将会在最后一行产生一个句法错误。 Heredocs结构不能用来初始化class,而从PHP 5.3以后,则该限制只能用在包含变量的情况下。 Example #1 非法的示例<?php
    class foo {
        public $bar = <<<EOT
    bar
    EOT;
    }
    ?> 
    Heredoc结构就象是没有使用双引号的双引号字符串, 这就是说在heredoc结构中引号不用被替换,但是上文中列出的字符 (\n等)也可使用。 变量将被替换,但在heredoc结构中字符串表达复杂变量时,要格外小心。 Example #2 Heredoc结构的字符串示例<?php
    $str = <<<EOD
    Example of string
    spanning multiple lines
    using heredoc syntax.
    EOD;/* 含有变量的更复杂示例 */
    class foo
    {
        var $foo;
        var $bar;    function foo()
        {
            $this->foo = 'Foo';
            $this->bar = array('Bar1', 'Bar2', 'Bar3');
        }
    }$foo = new foo();
    $name = 'MyName';echo <<<EOT
    My name is "$name". I am printing some $foo->foo.
    Now, I am printing some {$foo->bar[1]}.
    This should print a capital 'A': \x41
    EOT;
    ?> 
    以上例程会输出:My name is "MyName". I am printing some Foo.
    Now, I am printing some Bar2.
    This should print a capital 'A': A也可以把Heredoc结构用在函数参数中来传输数据: Example #3 Heredoc结构在参数中的示例<?php
    var_dump(array(<<<EOD
    foobar!
    EOD
    ));
    ?> 
    在PHP 5.3.0以后,也可以用Heredoc结构来初始化静态变量和类的属性和常量: Example #4 使用Heredoc结构来初始化静态值<?php
    // 静态变量
    function foo()
    {
        static $bar = <<<LABEL
    Nothing in here...
    LABEL;
    }// 类的常量、属性
    class foo
    {
        const BAR = <<<FOOBAR
    Constant example
    FOOBAR;    public $baz = <<<FOOBAR
    Property example
    FOOBAR;
    }
    ?> 
    在PHP 5.3.0中还在Heredoc结构中用双引号来声明标志符: Example #5 在heredoc结构中使用双引号<?php
    echo <<<"FOOBAR"
    Hello World!
    FOOBAR;
    ?>            定界符 
    1.PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
    2.在PHP定界符中的任何特殊字符都不需要转义;
    3.PHP定界符中的PHP变量会被正常的用其值来替换。
    这个可以用来保存大段的文本比较有用。