PHP句法规则详解 入门学习


Posted in PHP onNovember 09, 2011

1.简单句法规则(用花括号界定变量名,适用于PHP所有版本):

$a ='flower'; 
echo "She received some $as";// 无效;字母s会被当成有效的变量名组成元素,但是这里的变量是$a 
echo "She received some ${a}s";// 有效 
echo "She received some {$a}s";// 有效;推荐的使用方法

我们希望表达的是”她收到一些花“,语境中的flower应该采用复数形式(也就是说应该在后面加上S),但是如果不对变量做任何界定的话,就会出现第一个echo的情况。显然我们希望输出的是$a而不是$as。那么我们通常是怎么来处理这个输出的呢?
echo "She received some $a"."s"; 
echo "She received some ".$a."s";// 这两种习惯性的写法应该没有加花括号的写法简洁明了吧?

注意:不管{是出现在$前面还是后面,只有两者紧挨着时花括号才会被当成是界定符号。不要在之间加空格,要不然就会被当作普通的花括号处理

echo "She received some { $a}s";// 输出的结果为:She received some { flower}s

2.复杂句法规则(用花括号界定表达式等,使用与PHP4+):

echo "有效的写法: {$arr[4][3]}";// 有效;界定多维数组 
echo "有效的写法: {$arr['foo'][3]}";// 有效;当在字符串中使用多维数组时,一定要用括号将它括起来 
echo "有效的写法: {$this->width}00";// 有效;如果不界定的话,就会变成 $this->width00 
echo "有效的写法: {$this->value[3]->name}";// 有效;该例演示了界定链式调用 
echo "有效的写法: $name: {${$name}}";// 有效;该例演示的效果实际上是一个可变变量 
echo "有效的写法: {${getName()}}";// 有效;该例演示了将函数的返回值作为变量名 
echo "有效的下发: {${$this->getName()}}";// 有效;该例演示了将函数的返回值作为变量名

注意1:echo "这样写有效吗: {getName()}";输出结果为:'这样写有效吗:
{getName()}'。因为里面不含$,所以花括号不会被当作界定符
注意2:echo "这样写有效吗:{$arr[foo][3]}"; 在回答这个问题前我们先来进行一个实验:
error_reporting(E_ALL); 
$arr = array('a','b','c','d'=>'e'); 
echo "This is $arr[d]";// 我们发现这样写是没有问题的,那么我们像下面这样写呢? 
echo $arr[d];

产生了这样的错误:
Notice: Use of undefined constant d - assumed 'd'
注意:采用了未定义的常量d,可能应该为'd'
那么如果我们像下面这样修改一下代码的话
error_reporting(E_ALL); 
$arr = array('a','b','c','d'=>'e'); 
define('f','d'); 
echo $arr[f];

我们发现这次没有问题了。可以看出在字符串中数组的索引不加单引号是没有问题的,但是如果这种写法不是出现在字符串当中就会报错,而对于字符串中 {$arr[foo][3]}的解析就是按照非字符串的方式解析的。所以说在字符串当中对数组只加花括号界定而不对索引加单引号的写法是错误的。因为程序 会把不加单引号的索引当作是常量来进行解析,这就产生了错误。正确的写法应该是:

echo "有效的写法: {$arr['foo'][3]}";

特别提醒一点:echo "This is $arr[d]";这种写法虽然能够被程序解析,但这也仅限于数组是一维数组的情况。严谨的写法应该是:echo "This is {$arr['d']}";我的学生曾经在这一点上和我争论过,他说:既然前面一种写法能出结果,为什么一定要用后面一种写法呢?那么,我们再继续修改一 下前面的代码

error_reporting(E_ALL); 
$arr = array('a','b','c','d'=>array('e'=>'f')); 
echo "This is $arr[d][e]";

这样还能够被正确解析吗?我只想告诉你,加花括号是严谨的必要的。当然,如果你不是我的学生那么我管不了那么多......

注意3:

error_reporting(E_ALL); 
$arr = array('a','b','c','d'); 
echo "This is {$arr[2]} <br />"; 
echo "This is {$arr['2']} <br />";

执行上面的代码。结果是一样的,为什么会这样呢?我只能告诉你PHP是弱类型语言,至于什么叫弱类型语言我就不在这里多说了。自己去Google一下吧。说了这么多,那么最能体现这些句法规则优势的具体应用在什么地方呢?----SQL语句
// 示例一: 
$SQL1 ="select * from table where id={$_GET['id']}";// 示例二: 
$SQL2 ="select * from table where id={$this->id}";

OK,花括号我们就玩到这里了。
PHP 相关文章推荐
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
PHP实现的json类实例
Jul 28 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
PHP数组实际占用内存大小原理解析
Dec 11 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 #PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 #PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 #PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 #PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 #PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 #PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 #PHP
You might like
php while循环得到循环次数
2013/10/26 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
php建立Ftp连接的方法
2015/03/07 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
Javascript之文件操作
2007/03/07 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
BootStrap中
2016/12/10 Javascript
JS中的BOM应用
2018/02/02 Javascript
Vue Router去掉url中默认的锚点#
2018/08/01 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
Python中的exec、eval使用实例
2014/09/23 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
详解Python装饰器
2019/03/25 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
创业计划书撰写原则
2014/01/25 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
暂住证明怎么写
2015/06/19 职场文书
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python