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
PHP session有效期问题
Apr 26 PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
浅析PHP中的UNICODE 编码与解码
Jun 29 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
Nov 01 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
隐性调用php程序的方法
Jun 13 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
php curl操作API接口类完整示例
May 21 PHP
php连接sftp的作用以及实例代码
Sep 23 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
Nov 04 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
main.php
2006/12/09 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
2011/07/01 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
php中in_array函数用法探究
2014/11/25 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
php生出随机字符串
2017/07/06 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
python与pycharm有何区别
2020/07/01 Python
网络方面基础面试题
2012/11/16 面试题
客户经理竞聘演讲稿
2014/05/15 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
道德演讲稿
2014/05/21 职场文书
庆六一活动总结
2014/08/29 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server