php中大括号作用介绍


Posted in PHP onMarch 22, 2012

一、不管什么程序,function name(){}, for(){}, ….太多了,不说也知道做什么用了。
二、$str{4}在字符串的变量的后面跟上{}刚大括号和中括号一样都是把某个字符串变量当成数组处理。
三、{$val}这时候大括号起的作用就是,告诉PHP,括起来的要当成变量处理。

$arr=array(0=>123, 'name'=>'你好'); 
foreach($array as $k=>$v){ 
echo "select * from blog_blogs where blog_tags like '%{$arr[$k]}%' order by blog_id"; //加一个大括号只是将作为变量的标志符 
} 
echo '<br/ ><br/ ><br/ ><br/ ><br/ ><br/ ><br/ >'; 
foreach($array as $k=>$v){ 
echo "select * from blog_blogs where blog_tags like '%{{$arr[$k]}}%' order by blog_id"; //加两个大括号,外层的将作为普通的字符 
} 
//用大括号来区分变量 
//echo "$arr['name']"; //用此句会报语法错误 
echo "{$arr['name']}"; //此句正常,大括号内的字符将作为变量来处理 
//$str{4} 在字符串的变量的后面跟上{} 大括号和中括号一样都是把某个字符串变量当成数组处理 
$str = 'abcdefg'; 
echo $str{4};

{}大括号在php中的作用(PHP变量放在大括号里面的含义)

如:$sql = "insert into article (`channel_id`,`title`,`detail`,`pub_time`) values ('{$cid}','{$title}','{$detail}','{$time}');";
不加似乎也可以,加{}是什么意思呢?
还有字段名 为什么要以``包括呢?

==============================================

至少便于阅读嘛~~~''是insert into语句要求的,因为字符串要成对出现嘛
加{}有时候是为了防止变量名和后面的字符串连在一起嘛
例如
{$cid}dd
如果cid=aa
那么{$cid}dd=aadd
不加的话你自己看看了$ciddd,岂不变成了ciddd变量了~~

PHP 变量后面加上一个大括号{},里面填上数字,就是指 PHP 变量相应序号的字符。
例如:
$str = 'hello';
echo $str{0}; // 输出为 h
echo $str{1}; // 输出为 e
如果要检查某个字符串是否满足多少长度,可以考虑用这种大括号(花括号)加 isset 的方式替代 strlen 函数,因为 isset 是语言结构,strlen 是函数,所以使用 isset 比使用 strlen 效率更高。
比如判断一个字符串的长度是否小于 5:
if ( !isset ( $str{5} ) ) 就比 if ( strlen ( $str ) < 5 ) 好。

下面几个比较能说明原因的解释是:

表示{}里面的是一个变量 ,执行时按照变量来处理 在字符串中引用变量使用的特殊包括方式,这样就可以不使用.运算符,从而减少代码的输入量了。

其实输出那块是等同于print "hello ".$arr['fruit'];

一、使用大括号的变量
前一篇日志提到了,PHP Notice警告的是下面一句:

switch (${action}.'_'.${child}) {
初看并没有什么问题。我也查询了PHP手册上关于变量的定义:这里。
1、可变变量的情况
可见,与大部分资料一样,变量使用大括号的情况,在于“可变变量”(Variable variables)。其中提到:

引用
In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.
也就是说,为了在数组环境中也可以使用可变变量,因此,需要根据不同的情况,恰当的使用大括号{}限制变量的范围。${$a[1]} 与${$a}[1] 是完全不同的:

引用
${$a[1]} 这里$a[1]是一个变量;
${$a}[1] 这里$a是一个变量;
2、定界、避免歧义
实际上,这情况与可变变量时类似。例如,若使用“.”连接符,连接一个字符串,可能是这样:

echo $str.'_2010';
用大括号来写,可能更简单:

echo "${str}_2010";
可见,如果没有大括号,则可能把$str_2010整个作为一个变量来处理。当然,这样的写法,只能用在双引号中,单引号里面是不会执行变量替换的。

3、字符串变量中的单个字符
例如:

<?php 
$str='000'; 
$str{0}='1'; 
echo $str; //输出为100 
?>

这不难理解,与中括号[]的作用是一致的,有点类似Python中把字符串看成对象的情况。所以,下面的语句功能相同:
<?php 
$str='000'; 
$str[0]='1'; 
echo $str; //也是输出100 
?>

不过,这些都不是我想说明的内容,真正想描述的情况,请见下面。

二、变量使用大括号的异同
首先,把PHP的错误信息输出全部打开,即/etc/php.ini 为:

引用
error_reporting = E_ALL
display_errors = On
然后,打开测试页面,其中代码为:

<?php 
$test='123'; 
echo $test; 
echo "${test}"; 
echo "{$test}"; 
echo ${test}.'_'; 
echo ${test}; 
?>

你会看到如下的结果:

引用
123123123
Notice: Use of undefined constant test - assumed 'test' in /var/www/html/phpcrm/testpages/variables.php on line 6
123_
Notice: Use of undefined constant test - assumed 'test' in /var/www/html/phpcrm/testpages/variables.php on line 7
123
这说明什么?
1、可接受的写法
从输出结果中“123123123”,表明前面三行的echo语句都是正常的:

echo $test; 
echo "${test}"; 
echo "{$test}";

2、不建议的写法
后面的两行都有Notice警告,也就是曾把test变量看成常量,只是后来才假设为变量来处理的。因此,为了避免歧义和冲突,不建议这样写:
echo ${test}.'_'; 
echo ${test};

不过,可以有一种变通的写法
echo ${'test'}.'_'; 
echo ${'test'};

这样写的话就不会报错了
3、不正确的写法
网上不少资料介绍,${var}与{$var}的作用是一样的。但是,如果你再加入一句:

echo {$test};
那么,你将会得到以下错误信息:

引用
Parse error: syntax error, unexpected '{' in /var/www/html/phpcrm/testpages/variables.php on line 8
这可不是Notice警告,是错误,因解析问题,程序将不能正常运行。

三、总结
结合前面两部分的内容,我相信,对于变量引用时使用大括号,应遵循以下原则:

引用
1、正确的写法为:${var} 的形式;
2、与双引号一同使用;
3、根据需表达的意思进行定界。
所以,最后我把switch一行改为:

switch ("${action}_${child}") {
即不再出现Notice警告。

PHP 相关文章推荐
php代码优化及php相关问题总结
Oct 09 PHP
上传多个文件的PHP脚本
Nov 26 PHP
PHP Socket 编程
Apr 09 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
php程序内部post数据的方法
Mar 31 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
那些年一起学习的PHP(三)
Mar 22 #PHP
那些年一起学习的PHP(二)
Mar 21 #PHP
那些年一起学习的PHP(一)
Mar 21 #PHP
ecshop 批量上传(加入自定义属性)
Mar 20 #PHP
批量去除PHP文件中bom的PHP代码
Mar 13 #PHP
TMDPHP 模板引擎使用教程
Mar 13 #PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 #PHP
You might like
虫族 Zerg 历史背景
2020/03/14 星际争霸
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
自动更新作用
2006/10/08 Javascript
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
javascript history对象详解
2017/02/09 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
js实现全选反选不选功能代码详解
2019/04/24 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
大学生职业生涯规划书前言
2014/01/09 职场文书
优秀公益广告词大全
2014/03/19 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
影视后期实训报告
2014/11/05 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
大学班干部竞选稿
2015/11/20 职场文书