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 相关文章推荐
漂亮但不安全的CTB
Oct 09 PHP
PHP 超链接 抓取实现代码
Jun 29 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
php强制下载类型的实现代码
Apr 21 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
Nov 14 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
php实现随机生成易于记忆的密码
Jun 19 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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 各种排序算法实现代码
2009/08/20 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
JS版网站风格切换实例代码
2008/10/06 Javascript
javascript 闭包疑问
2010/12/30 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
js post提交调用方法
2014/02/12 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
python通过yield实现数组全排列的方法
2015/03/18 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
Python 函数返回值的示例代码
2019/03/11 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
国际贸易毕业生自荐书
2014/06/22 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
举起手来观后感
2015/06/09 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python