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程序之die调试法 快速解决错误
Sep 17 PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 PHP
php 数组使用详解 推荐
Jun 02 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
一个简单的PHP验证码实现代码
May 10 PHP
几个实用的PHP内置函数使用指南
Nov 27 PHP
php生成唯一的订单函数分享
Feb 02 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
Yii快速入门经典教程
Dec 28 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 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
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
2014/12/19 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python如何生成网页验证码
2018/07/28 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
实现Python与STM32通信方式
2019/12/18 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
keras 多gpu并行运行案例
2020/06/10 Python
浅析Python面向对象编程
2020/07/10 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
2020/09/29 Python
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
4S店售后客服自我评价
2014/04/09 职场文书
食品安全标语
2014/06/07 职场文书
党员查摆问题及整改措施
2014/10/10 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
合同纠纷调解书
2015/05/20 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL