• heredoc(实现模板与代码的分离)


    heredoc(实现模板与代码的分离)

    一、总结

    heredoc实现模板与代码的分离,实现的是在后台编程语言中批量输出html代码,在这个批量输出的html代码中又可以嵌套编程语言变量。所以很方便。

    比如php:如果不支持heredoc的话,就只能echo一行一行的输出html代码,这样人会疯掉的。还好php可以支持在html中非常方便的嵌套php代码(<?php ?>),也可以解决这个问题。

    像那些不方便在html中直接嵌套的代码比如python,要是不想一行一行的输出html,heredoc是个不错的选择

    视图页面的创建方法(后台语言以php为例):

    1、在php中输出html:a、echo一行一行的输出  b、heredoc批量且格式明显的输出

    2、在html中嵌套php代码

    二、heredoc(实现模板与代码的分离)

    heredoc技术,是一种Perl风格的字符串输出技术,可以很好的实现模板与代码的分离.

    代码:
     

    heredoc中批量输出html代码

    复制代码 代码示例:
    <?php
    $name = '脚本学堂';
    print <<<EOT
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>php中heredoc技术用法详解-脚本学堂</title>
    </head>
    <body>
    Hello,$name!
    </body>
    </html>
    EOT;
    ?>
     

    1.以<<<End开始标记开始,以End结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可
    2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以
    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();

    例2,定义了一个函数template
     

    复制代码 代码示例:
    function template($template, $EXT='htm') {
     $path = "template/$template.$EXT";
     return $path;
    }

    index.php
     

    复制代码 代码示例:

    <?php
    $title = "This is title";
    $content = "Heredoc";

    include template('index');
    ?>

    index.htm
     

    复制代码 代码示例:

    <!--<?php print <<<EOT

    -->

    <html>

    <head><title>$title</title></head>

    <body>

    $content

    </body>

    </html>

    <!--

    EOT;

    ?>-->

    我的目标是:把html从php中分离出来,并且html中不包含php控制程序。

    在php4中,提供了print<<< HTML 功能。
    举例如下:
     

    复制代码 代码示例:
    $data="这里是内容";
    print<<< HTML
    $data
    HTML;
    ?>
     

    输出:这里是内容。
    另外一方面,php中有函数eval()。它能够执行php代码。我们就结合上述
    知识来建立一个通用的函数getTpl().如下:

    下面是demo.php
     

    复制代码 代码示例:

    <?php

    function getTpl($tplname,$EXT='.htm')
    {
    extract($GLOBALS);
    $path=$tplname.$EXT;
    eval_r("print<<< EOT ".readfn($path)." EOT; ");
    }

    function readfn($fn)
    {
    $fp=fopen($fn,"rb");
    return fread($fp,filesize($fn));
    fclose($fp);
    }

    $title='这是标题';
    $data='这里是内容';

    getTpl('demo');

    ?>
     

    下面是demo.htm
     

    复制代码 代码示例:

    <html>
    <head>
    <title> $title </title>
    </head>

    <body>
    <b>$title</b>
    <p>$data
    </body>
    </html>

    经过这样的处理后,在demo.htm中只有php要替换的变量,而没有任何其他php的多余代码了。
    这样以来,外观和程序逻辑就得以完全分离,为网站的修改和后期维护提供了方便之门!
    注:以上方法分离了php和html,代表了显示和逻辑的分离。但是以失去复杂控制为代价的。

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

    结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。

    警告
    很重要的一点必须指出,结束标识符所在的行不能包含任何其它字符,可能除了一个分号(;)之外。这尤其意味着该标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符。例如在 Macintosh 系统中是 。

    如果破坏了这条规则使得结束标识符不“干净”,则它不会被视为结束标识符,PHP 将继续寻找下去。如果在这种情况下找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。

    不能用定界符语法初始化类成员。用其它字符串语法替代。
    例子 11-3. 非法的例子
     

    复制代码 代码示例:
    <?php
    class foo {
    public $bar = <<<EOT
    bar
    EOT;
    }
    ?>
     

    定界符文本表现的就和双引号字符串一样,只是没有双引号。这意味着在定界符文本中不需要转义引号,不过仍然可以用以上列出来的转义代码。变量会被展开,但当在定界符文本中表达复杂变量时和字符串一样同样也要注意。

    例子 11-4. 定界符字符串例子
     

    复制代码 代码示例:

    <?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;
    ?>

    实例:
    一、目录规划
    phpLearn
     |----Templates
     ----index.html
     |----index.php

    二、PHP文件

    index.php中给变量赋值,同时包含模板
     

    复制代码 代码示例:

    <?php
    $userNum1 = '123';
    include ('Templates/index.html'); //包含模板

    ?>

    三、模板文件
    index.hhtml
     

    复制代码 代码示例:

    <!--<?php
    echo <<<EOT
    -->
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>-----------------------</title>
    </head>

    <body>
    <br>
    <br>
    $userNum1 //使用变量
    <br>
    </body>
    </html>
    <!--
    EOT;
    ?>
    -->

    总结:
    1、echo <<<EOT 与 EOT;是成对出现的。如
     

    复制代码 代码示例:

    <!--
    echo <<<EOT
    -->
    //在此处可以有HTML元素

    <!--
    EOT;
    //在此处有PHP语法式的语句。

    echo <<<EOT
    -->

    2、html模板内目录 以php文件所在的目录(路径) 为准。
    3、html模板与php分离,可以不使用$_GET或则$_POST方法。直接使用名称作为变量。

    您可能感兴趣的文章:
    PHP echo heredoc语法的用法总结
    php heredoc的用法举例
    php中heredoc的方法(EOF)详解
    深入PHP EOF(heredoc)用法详解
    有关php中heredoc的例子与说明

    您可能感兴趣的文章:
    有关php中heredoc的例子与说明
    php header函数使用要点
    php file_get_contents函数抓取页面信息的代码
    PHP获取当前网址及域名的代码
    php跨域调用json的例子
    JQuery AJAX 中文乱码问题解决
    php 注释、变量、数组、常量及函数的应用介绍
    web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
    php utf8 一半乱码的问题
    nginx下fastcgi_param运行php出现空白页的问题

    php中的heredoc技术,是一种Perl风格的字符串输出技术,可以很好的实现模板与代码的分离.

    代码:
     

    复制代码代码示例:
    <?php
    $name = '脚本学堂';
    print <<<EOT
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>php中heredoc技术用法详解-脚本学堂</title>
    </head>
    <body>
    Hello,$name!
    </body>
    </html>
    EOT;
    ?>
     

    1.以<<<End开始标记开始,以End结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。
    2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。
    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();

    例2,定义了一个函数template
     

    复制代码代码示例:
    function template($template, $EXT='htm') {
     $path = "template/$template.$EXT";
     return $path;
    }

    index.php
     

    复制代码代码示例:

    <?php
    $title = "This is title";
    $content = "Heredoc";

    include template('index');
    ?>

    index.htm
     

    复制代码代码示例:

    <!--<?php print <<<EOT

    -->

    <html>

    <head><title>$title</title></head>

    <body>

    $content

    </body>

    </html>

    <!--

    EOT;

    ?>-->

    我的目标是:把html从php中分离出来,并且html中不包含php控制程序。

    在php4中,提供了print<<< HTML 功能。
    举例如下:
     

    复制代码代码示例:
    $data="这里是内容";
    print<<< HTML
    $data
    HTML;
    ?>
     

    输出:这里是内容。
    另外一方面,php中有函数eval()。它能够执行php代码。我们就结合上述
    知识来建立一个通用的函数getTpl().如下:

    下面是demo.php
     

    复制代码代码示例:

    <?php

    function getTpl($tplname,$EXT='.htm')
    {
    extract($GLOBALS);
    $path=$tplname.$EXT;
    eval_r("print<<< EOT ".readfn($path)." EOT; ");
    }

    function readfn($fn)
    {
    $fp=fopen($fn,"rb");
    return fread($fp,filesize($fn));
    fclose($fp);
    }

    $title='这是标题';
    $data='这里是内容';

    getTpl('demo');

    ?>
     

    下面是demo.htm
     

    复制代码代码示例:

    <html>
    <head>
    <title> $title </title>
    </head>

    <body>
    <b>$title</b>
    <p>$data
    </body>
    </html>

    经过这样的处理后,在demo.htm中只有php要替换的变量,而没有任何其他php的多余代码了。
    这样以来,外观和程序逻辑就得以完全分离,为网站的修改和后期维护提供了方便之门!
    注:以上方法分离了php和html,代表了显示和逻辑的分离。但是以失去复杂控制为代价的。

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

    结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。

    警告
    很重要的一点必须指出,结束标识符所在的行不能包含任何其它字符,可能除了一个分号(;)之外。这尤其意味着该标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符。例如在 Macintosh 系统中是 。

    如果破坏了这条规则使得结束标识符不“干净”,则它不会被视为结束标识符,PHP 将继续寻找下去。如果在这种情况下找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。

    不能用定界符语法初始化类成员。用其它字符串语法替代。
    例子 11-3. 非法的例子
     

    复制代码代码示例:
    <?php
    class foo {
    public $bar = <<<EOT
    bar
    EOT;
    }
    ?>
     

    定界符文本表现的就和双引号字符串一样,只是没有双引号。这意味着在定界符文本中不需要转义引号,不过仍然可以用以上列出来的转义代码。变量会被展开,但当在定界符文本中表达复杂变量时和字符串一样同样也要注意。

    例子 11-4. 定界符字符串例子
     

    复制代码代码示例:

    <?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;
    ?>

    实例:
    一、目录规划
    phpLearn
     |----Templates
     ----index.html
     |----index.php

    二、PHP文件

    index.php中给变量赋值,同时包含模板
     

    复制代码代码示例:

    <?php
    $userNum1 = '123';
    include ('Templates/index.html'); //包含模板

    ?>

    三、模板文件
    index.hhtml
     

    复制代码代码示例:

    <!--<?php
    echo <<<EOT
    -->
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>-----------------------</title>
    </head>

    <body>
    <br>
    <br>
    $userNum1 //使用变量
    <br>
    </body>
    </html>
    <!--
    EOT;
    ?>
    -->

    总结:
    1、echo <<<EOT 与 EOT;是成对出现的。如
     

    复制代码代码示例:

    <!--
    echo <<<EOT
    -->
    //在此处可以有HTML元素

    <!--
    EOT;
    //在此处有PHP语法式的语句。

    echo <<<EOT
    -->

    2、html模板内目录 以php文件所在的目录(路径) 为准。
    3、html模板与php分离,可以不使用$_GET或则$_POST方法。直接使用名称作为变量。

  • 相关阅读:
    HDU 5919 分块做法
    HDU 3333 分块求区间不同数和
    CF 333E 计算几何+bitset优化
    hdu 1043 八数码--打表
    hdu 1043 八数码问题-A*搜索
    hdu 5919 主席树
    hiho1388 FFT/NTT
    HDU 5869区间CGD不同种类数---树状数组+map统计区间不同种类数(离线)
    HDU 5875 二分+st表
    HDU 5898 基础数位DP
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9060104.html
Copyright © 2020-2023  润新知