PHP 变量定义和变量替换的方法


Posted in PHP onJuly 30, 2009

有两种方法把变量替换到字符串中——简单的方法和复杂的方法。
简单的方法是把变量名放在双引号字符串或heredoc中:
$who = ‘Kilroy';
$where = ‘here';
echo “$who was $where”;
Kilroy was here
复杂的方法是把要替换的变量用大括号括起来。这种方法可以用于消除歧义或替换数组查找。大括号的经典作用是把变量名从周围的文本中分隔出来:
$n = 12;
echo “You are the {$n}th person”;
You are the 12th person
如果没有大括号的话,PHP就会尝试打印出变量$nth的值。
和一些shell环境不同,在PHP字符串中变量不会重复解析,而只处理在双引号字符串中的解析,然后把其结果被作为字符串的值:
$bar = ‘this is not printed';
$foo = ‘$bar'; // 单引号
print(”$foo”); //双引号
$bar
4.1.2 用单引号括起来的字符串
Single-Quoted Strings
用单引号括起来的字符串并不替换变量。因为字符串直接量是用单引号括起来的,所以在下面的字符串中变量名没有被解析:
$name = ‘Fred';
$str = ‘Hello, $name'; // single-quoted 用单引号括起来
echo $str;
Hello, $name
在用单引号括起来的字符串中唯一可用的转义序列是 \'(把单引号放在用单引号括起来的字符串中)、\\(把一个反斜杠放在用单引号括起来的字符串中)。任何其他的反斜杠只能被解释为一个反斜杠:
$name = ‘Tim O\'Reilly'; //转义的单引号
echo $name;
$path = ‘C:\\WINDOWS'; //转义的反斜杠
echo $path;
$nope = ‘\n'; // 不是转义序列
echo $nope;
Tim O'Reilly
C:\WINDOWS
\n
4.1.3 用双引号括起来的字符串
Double-Quoted Strings
用双引号括起来的字符串将会进行变量解析并且允许使用许多转义序列。表4-1列出了在用双引号括起来的字符串中PHP认可的转义序列。
表4-1:用双引号括起来的字符串中的转义序列
转义序列 字符含义
\”
双引号
\n
换行
\r
回车
\t
制表符
\\
反斜杠
\$
美元符号
\{
左大括号
\}
右大括号
\[
左中括号
\]
右中括号
\0 through \777
用八进制表示的ASCII字符
\x0 through \xFF
用十六进制表示的ASCII字符
如果在用双引号括起来的字符串中发现一个未知的转义序列(例如,一个反斜杠后跟一个不在表4-1中的字符),就忽略这个转义序列(如果警告级设置为E_NOTICE,就会为这样的未知序列产生一个警告):
$str = “What is \c this?”; // 未知的转义序列
echo $str ;
What is \c this?
4.1.4 字符串定界
Here Documents heredoc
使用heredoc可以简单地把多行字符串放在程序中,如下所示:
$clerihew = <<< End_Of_Quote
Sir Humphrey Davy
Abominated gravy.
He lived in the odium
Of having discovered sodium.
End_Of_Quote;
echo $clerihew;
Sir Humphrey Davy
Abominated gravy.
He lived in the odium
Of having discovered sodium.
<<<符号(我们习惯称为字符串定界符??译者注)告诉PHP解析器你正在书写一个heredoc。在<<<符号和标识符(本例中即 End_Of_Quote)之间必须有一个空格,这样程序才可以辨别标识符。从下一行开始就是被引用的文本,直到它遇到仅由标识符组成的一行为止。
你可以把分号放在终止标识符的后面来结束语句,正如前面的代码所示。如果你在一个更复杂的表达式中使用heredoc,你需要将表达式分行来写:
printf(<<< Template
%s is %d years old.
Template
, “Fred”, 35);
在heredoc中的单引号和双引号被跳过(当作一般的符号):
$dialogue = <<< No_More
“It's not going to happen!” she fumed.
He raised an eyebrow. “Want to bet?”
No_More;
echo $dialogue;
“It's not going to happen!” she fumed.
He raised an eyebrow. “Want to bet?”
在heredoc中的空白符也被保留:
$ws = <<< Enough
boo
hoo
Enough;
// $ws = ” boo\n hoo\n”;
因为在结尾终止符前的换行符将被移除,所以下面这两个赋值是相同的:
$s = ‘Foo';
// same as 和下面的相同
$s = <<< End_of_pointless_heredoc
Foo
End_of_pointless_heredoc;
如果想用一个换行符来结束heredoc引用的字符串,则需要自己额外加入:
$s = <<< End
Foo

End;
//注意Foo后面跟一个空行,不可删除

PHP 相关文章推荐
用PHP制作静态网站的模板框架(二)
Oct 09 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
php实现统计邮件大小的方法
Aug 06 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
php rsa加密解密使用详解
Jan 14 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
PHP开发Apache服务器配置
Jul 15 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 #PHP
一个PHP数组应该有多大的分析
Jul 30 #PHP
PHP UTF8编码内的繁简转换类
Jul 20 #PHP
php 验证码制作(网树注释思想)
Jul 20 #PHP
php PDO中文乱码解决办法
Jul 20 #PHP
PHP 配置文件中open_basedir选项作用
Jul 19 #PHP
PHP form 表单传参明细研究
Jul 17 #PHP
You might like
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
Python中给List添加元素的4种方法分享
2014/11/28 Python
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
团员的自我评价
2013/12/01 职场文书
职业规划书如何设计?
2014/01/09 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript