PHP定义字符串的四种方式详解


Posted in PHP onFebruary 06, 2018

1、简介

在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用。

我们在使用php进行开发的时候,大多数使用双引号、单引号进行定义字符串。既然有这两种方式,那么他们之间肯定是有区别的。

并且,除了单双引号定义字符串这两种方式外,php还增加了heredoc和nowdoc这两种语法糖进行补充。

2、单引号与双引号

2.1、单引号

在单引号中,任何特殊字符都会按原样输出【除\\、\‘将会被转义输出】

eg.

<?php
$var = 'this is a var!';
echo '666$var666、\'、\"、\\、\n、\r、\t、\$';

PHP定义字符串的四种方式详解 

从上面例子中我们可以明显看到,变量是没有被解析的;同时带反斜杠的转义字符仅仅只有单引号、反斜杠被转义输出了,其他的是直接输出。

2.2、双引号

在双引号中,遇到$将会解析该变量;

双引号中会转义反斜杠的转义字符;

<?php
$var = 'this is a var!'; 
echo "666$var 666、\'、\"、\\、\n、\r、\t、\$";

转义字符代码 转义字符的含义
\ " 双引号
\ ' 单引号
\ \ 反斜杠
\ n 换行符
\ r 回车符
\ t 制表符
\ $ 美元符号

由上面例子我们可以知道,双引号中的变量被解析了,替换成字符串;其他带反斜杠的转义字符都进行了相应的转义。

PHP定义字符串的四种方式详解 

2.3、单双引号之间的区别

以上两者主要区别:

1、 双引号会替换变量的值,而单引号会把它当做字符串输出。

2、对于转义的支持

3、性能速度问题,由于双引号中的字符串需要检测是否含有$符号修饰的变量,因此从理论上讲,单引号是比较快的。

3、heredoc与nowdoc

3.1、heredoc

heredoc可以理解为不使用双引号来定义字符串,但效果与使用双引号一致。【此时双引号相当于普通字符】

语法要求:

1、开始标记和结束标记使用相同的字符串,通常以大写字母来写。

2、开始标记后不能出现空格或多余的字符。

3、结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。

4、位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。

eg.

<?php
 $var = 'this is suifeng'; 
 echo <<<"EOT"
 <!DOCTYPE html>
 <html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
   <title>"随风"</title>
 </head>
 <body>
 66666666666<br/>
 "666666666"<br/>
 $var<br/>
 \$var<br/>
 \n666<br>
 </body>
 </html>
 EOT;

PHP定义字符串的四种方式详解 

从打印的结果我们可以看出:此时双引号仅仅只是一个普通字符;其他的效果和双引号的字符串效果一致。

3.2、nowdoc

同理,nowdoc是不使用单引号来定义,但效果相当于使用单引号来定义的字符串。【此时单引号相当于普通字符】

语法同heredoc

eg.

<?php 
 $var = 'this is suifeng'; 
 echo <<<'EOT' 
 <!DOCTYPE html>
 <html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
   <title>"随风"</title>
 </head>
 <body>
 '02020'<br/>
 \'<br/>
 66666666666<br/>
 "666666666"<br/>
 $var<br/>
 \$var<br/>
 \n666<br>
 </body>
 </html>
 EOT;

PHP定义字符串的四种方式详解 

注意:

定界符之后必须不能有任何字符【特别是空格字符有时会没注意到】,否则将会出错。

如上例中的EOT后面有空格就会报这个错误:【 Parse error : syntax error, unexpected '<<' (T_SL)】

总结

以上所述是小编给大家介绍的PHP定义字符串的四种方式详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP开发大型项目的一点经验
Oct 09 PHP
PHP新手上路(六)
Oct 09 PHP
php str_replace的替换漏洞
Mar 15 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 PHP
PHP异步进程助手async-helper
Feb 05 #PHP
详解PHP中的外观模式facade pattern
Feb 05 #PHP
浅析PHP开发规范
Feb 05 #PHP
实例讲解PHP页面静态化
Feb 05 #PHP
PHP使用ActiveMQ实例
Feb 05 #PHP
详解PHP中mb_strpos的使用
Feb 04 #PHP
详解PHP文件的自动加载(autoloading)
Feb 04 #PHP
You might like
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
php设计模式 Facade(外观模式)
2011/06/26 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
Python正则表达式知识汇总
2017/09/22 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
详解Python的循环结构知识点
2019/05/20 Python
Python中的引用知识点总结
2019/05/20 Python
使用python远程操作linux过程解析
2019/12/04 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
利用python画出AUC曲线的实例
2020/02/28 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
HEMA法国:荷兰原创设计
2019/02/21 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
家长给小学生的评语
2014/01/30 职场文书
新员工入职感言
2014/02/01 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
Python 如何实现文件自动去重
2021/06/02 Python
使用JS实现简易计算器
2021/06/14 Javascript
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers