PHP定界符:HEREDOC和NOWDOC
本帖最后由 马黑黑 于 2025-4-10 21:26 编辑HEREDOC较早出现,它用于充当定界符号,以使多行文本可以连贯书写,不必老用 echo 或 print 去写HTML代码,非常方便。更主要的,HEREDOC 定界符可以可以解析包含PHP变量在内的内容,确保由它包裹的多行文本可以正常执行而不会出错,这得益于它封装了转义引号、PHP变量符号 $ 等等特殊字符;而要使用传统的 echo 和 print,我们需要另外转义,比较繁琐。
过去,HEREDOC 只有一种写法:
<<<EOF
// 这里是多行文本(可以是HTML、CSS、JS甚至PHP代码
EOF;
现在的PHP版本,支持这么写:
<<<“EOF”
// 这里是多行文本(可以是HTML、CSS、JS甚至PHP代码
EOF;
就是说,EOF 可以加小角双引号。
而加小角单引号的,是 NOWDOC 定界符,试看:
<<<'EOF'
// 这里是多行文本(可以是HTML、CSS、JS甚至PHP代码
EOF;
与 HEREDOC 定界符不同,NOWDOC 定界符里面的文本(代码),PHP变量不会被解析,PHP语句也不会被执行,但CSS、HTML、JS正常执行。
看下面两组代码:
<?php
/*heredoc 定界符
$name 变量会被PHP解析
*/
$name = 'Jack';
$mystr = <<<EOF
<style>
.tRed { color: red; }
.tBlue { color: blue; }
</style>
<div class="tRed">{$name}'s been back.</div>
<div class="tBlue">And he says Kate's going to be back soon.</div>
EOF;
echo $mystr;
/*输出:
Jack's been back.
And he says Kate's going to be back soon.
*/
?>
<?php
/*nowdoc 定界符
$name 变量不会被PHP解析
*/
$name = 'Jack';
$mystr = <<<'EOF'
<style>
.tRed { color: red; }
.tBlue { color: blue; }
</style>
<div class="tRed">{$name}'s been back.</div>
<div class="tBlue">And he says Kate's going to be back soon.</div>
EOF;
echo $mystr;
/*输出:
{$name}'s been back.
And he says Kate's going to be back soon.
*/
?>
定界符规定:
由 <<< 引导,紧跟着加关键词,关键词可以自定义,一般使用大写字母,例如本文示例的 EOF,和前导符号一起写成 <<<EOF,二者间不能有空格,EOF 之后也不能有空格或其它任何字符;多行文本之后另起一行,顶格书写收尾符 EOF(收尾符和起始符要相一致),必须紧跟着小角分好 ; ,写成 EOF;,小角分号之后不能有任何包含空格在内的任何字符。此外,如果想在多行文本显示符号 <<<,需要额外转义,可以写成 \<<< 。
PHP定界符和HTML标签 pre 在格式上有一丝丝类似,就是它们包裹的内容会“原本”输出——当然不是真正的原本。
“与 HEREDOC 定界符不同,NOWDOC 定界符里面的文本(代码),PHP变量不会被解析”
知道了两者的区别,看到“加小角单引号的,是 NOWDOC 定界符”
可是在下面的两组代码里,看着是一样的啊,并没加小角单引号啊?{:4_203:} 这个内容看着很难,努力去理解也没理解明白{:4_173:} 红影 发表于 2025-4-10 21:05
“与 HEREDOC 定界符不同,NOWDOC 定界符里面的文本(代码),PHP变量不会被解析”
知道了两者的区别,看 ...
加小引号是指定界符的起始关键词:
<<<EOF
//多行文本
EOF;
<<<'EOF'
//多行文本
EOF; 红影 发表于 2025-4-10 21:06
这个内容看着很难,努力去理解也没理解明白
PHP是后端语言,跑在服务器上。这个论坛 discuz! 就是用 PHP 编写的 马黑黑 发表于 2025-4-10 21:24
加小引号是指定界符的起始关键词:
嗯嗯,现在看到了,的确多了小引号{:4_187:} 马黑黑 发表于 2025-4-10 21:25
PHP是后端语言,跑在服务器上。这个论坛 discuz! 就是用 PHP 编写的
哦,我只会玩,对它还真不了解呢{:4_173:} 红影 发表于 2025-4-10 22:13
哦,我只会玩,对它还真不了解呢
论坛就是PHP支撑的。上世纪,PHP门槛高,大家用的是ASP,像那个曾经风行一时的动网论坛就是,它发帖前有预览功能呢,不过现在ASP基本沉寂了。
PHP是老牌后端语言,现在的新秀 Python 也很出色,不过目前还无法叫板PHP。 红影 发表于 2025-4-10 22:12
嗯嗯,现在看到了,的确多了小引号
之前应该是我忘记添上了{:4_170:} 马黑黑 发表于 2025-4-10 22:22
论坛就是PHP支撑的。上世纪,PHP门槛高,大家用的是ASP,像那个曾经风行一时的动网论坛就是,它发帖前有 ...
我都不知道什么是前端后端,去搜了一下:前端主要负责用户界面的设计和实现,包括HTML、CSS、JavaScript等技术。而后端则负责服务器端的逻辑处理、数据存储以及与数据库的交互等。
PHP在后端开发中的优势不言而喻。首先,它拥有强大的数据库处理能力,能够与MySQL、PostgreSQL等多种数据库无缝对接,实现数据的存储、检索和操作。其次,PHP的面向对象编程特性使得代码更加模块化和可维护。此外,PHP还提供了丰富的内置函数和库。 马黑黑 发表于 2025-4-10 22:23
之前应该是我忘记添上了
没事,我主要想证明 我是认真看了的,虽然没看懂,但态度要好啊{:4_173:} 红影 发表于 2025-4-10 22:32
没事,我主要想证明 我是认真看了的,虽然没看懂,但态度要好啊
{:4_172:} 红影 发表于 2025-4-10 22:31
我都不知道什么是前端后端,去搜了一下:前端主要负责用户界面的设计和实现,包括HTML、CSS、JavaScript ...
PHP也是一门高级语言,内置变量、函数、语句等和JS一样,基本都是语义化的。
和 JS 一样,PHP 也有明显的 C 语言特征。我是先会 PHP,后会 JS 。学习PHP绕不开 JS,好在它们很相近,学习 JS 基本上就是过目一遍文档,然后用到哪儿再深入研习一下下。 谢谢老师辛苦,学习了。{:4_190:} 看到这个PHP标题就想到了整站系统。。
这个是回归老本行啦。。
我来看看说些什么。。{:4_174:} 现在的PHP版本,支持EOF 可以加小角双引号。
下面的第一个例子中有新的不用哎。。你也没加小角双引号啊,还是过去的写法。{:4_173:}
这个双引号加和不加效果一样的吧。反正变量会被解析。。 其实我更关心的是它能不能解析\n。为啥明明有它不识别成换行符让我手工换行。{:4_205:} 马黑黑 发表于 2025-4-10 23:08
笑什么啊,我在努力中啊{:4_203:} 红影 发表于 2025-4-11 20:44
笑什么啊,我在努力中啊
{:4_190:} 马黑黑 发表于 2025-4-10 23:11
PHP也是一门高级语言,内置变量、函数、语句等和JS一样,基本都是语义化的。
和 JS 一样,PHP 也有明 ...
原来学这个还要学习js,我对js还是有点敬而远之的{:4_173:}