php中大括號(hào)作用介紹
更新時(shí)間:2012年03月22日 22:42:11 作者:
{}大括號(hào)在php中的作用(PHP變量放在大括號(hào)里面的含義)
一、不管什么程序,function name(){}, for(){}, ….太多了,不說(shuō)也知道做什么用了。
二、$str{4}在字符串的變量的后面跟上{}剛大括號(hào)和中括號(hào)一樣都是把某個(gè)字符串變量當(dāng)成數(shù)組處理。
三、{$val}這時(shí)候大括號(hào)起的作用就是,告訴PHP,括起來(lái)的要當(dāng)成變量處理。
$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"; //加一個(gè)大括號(hào)只是將作為變量的標(biāo)志符
}
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"; //加兩個(gè)大括號(hào),外層的將作為普通的字符
}
//用大括號(hào)來(lái)區(qū)分變量
//echo "$arr['name']"; //用此句會(huì)報(bào)語(yǔ)法錯(cuò)誤
echo "{$arr['name']}"; //此句正常,大括號(hào)內(nèi)的字符將作為變量來(lái)處理
//$str{4} 在字符串的變量的后面跟上{} 大括號(hào)和中括號(hào)一樣都是把某個(gè)字符串變量當(dāng)成數(shù)組處理
$str = 'abcdefg';
echo $str{4};
{}大括號(hào)在php中的作用(PHP變量放在大括號(hào)里面的含義)
如:$sql = "insert into article (`channel_id`,`title`,`detail`,`pub_time`) values ('{$cid}','{$title}','{$detail}','{$time}');";
不加似乎也可以,加{}是什么意思呢?
還有字段名 為什么要以``包括呢?
==============================================
至少便于閱讀嘛~~~''是insert into語(yǔ)句要求的,因?yàn)樽址蓪?duì)出現(xiàn)嘛
加{}有時(shí)候是為了防止變量名和后面的字符串連在一起嘛
例如
{$cid}dd
如果cid=aa
那么{$cid}dd=aadd
不加的話你自己看看了$ciddd,豈不變成了ciddd變量了~~
PHP 變量后面加上一個(gè)大括號(hào){},里面填上數(shù)字,就是指 PHP 變量相應(yīng)序號(hào)的字符。
例如:
$str = 'hello';
echo $str{0}; // 輸出為 h
echo $str{1}; // 輸出為 e
如果要檢查某個(gè)字符串是否滿足多少長(zhǎng)度,可以考慮用這種大括號(hào)(花括號(hào))加 isset 的方式替代 strlen 函數(shù),因?yàn)?isset 是語(yǔ)言結(jié)構(gòu),strlen 是函數(shù),所以使用 isset 比使用 strlen 效率更高。
比如判斷一個(gè)字符串的長(zhǎng)度是否小于 5:
if ( !isset ( $str{5} ) ) 就比 if ( strlen ( $str ) < 5 ) 好。
下面幾個(gè)比較能說(shuō)明原因的解釋是:
表示{}里面的是一個(gè)變量 ,執(zhí)行時(shí)按照變量來(lái)處理 在字符串中引用變量使用的特殊包括方式,這樣就可以不使用.運(yùn)算符,從而減少代碼的輸入量了。
其實(shí)輸出那塊是等同于print "hello ".$arr['fruit'];
一、使用大括號(hào)的變量
前一篇日志提到了,PHP Notice警告的是下面一句:
switch (${action}.'_'.${child}) {
初看并沒(méi)有什么問(wèn)題。我也查詢了PHP手冊(cè)上關(guān)于變量的定義:這里。
1、可變變量的情況
可見(jiàn),與大部分資料一樣,變量使用大括號(hào)的情況,在于“可變變量”(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.
也就是說(shuō),為了在數(shù)組環(huán)境中也可以使用可變變量,因此,需要根據(jù)不同的情況,恰當(dāng)?shù)氖褂么罄ㄌ?hào){}限制變量的范圍。${$a[1]} 與${$a}[1] 是完全不同的:
引用
${$a[1]} 這里$a[1]是一個(gè)變量;
${$a}[1] 這里$a是一個(gè)變量;
2、定界、避免歧義
實(shí)際上,這情況與可變變量時(shí)類似。例如,若使用“.”連接符,連接一個(gè)字符串,可能是這樣:
echo $str.'_2010';
用大括號(hào)來(lái)寫,可能更簡(jiǎn)單:
echo "${str}_2010";
可見(jiàn),如果沒(méi)有大括號(hào),則可能把$str_2010整個(gè)作為一個(gè)變量來(lái)處理。當(dāng)然,這樣的寫法,只能用在雙引號(hào)中,單引號(hào)里面是不會(huì)執(zhí)行變量替換的。
3、字符串變量中的單個(gè)字符
例如:
<?php
$str='000';
$str{0}='1';
echo $str; //輸出為100
?>
這不難理解,與中括號(hào)[]的作用是一致的,有點(diǎn)類似Python中把字符串看成對(duì)象的情況。所以,下面的語(yǔ)句功能相同:
<?php
$str='000';
$str[0]='1';
echo $str; //也是輸出100
?>
不過(guò),這些都不是我想說(shuō)明的內(nèi)容,真正想描述的情況,請(qǐng)見(jiàn)下面。
二、變量使用大括號(hào)的異同
首先,把PHP的錯(cuò)誤信息輸出全部打開(kāi),即/etc/php.ini 為:
引用
error_reporting = E_ALL
display_errors = On
然后,打開(kāi)測(cè)試頁(yè)面,其中代碼為:
<?php
$test='123';
echo $test;
echo "${test}";
echo "{$test}";
echo ${test}.'_';
echo ${test};
?>
你會(huì)看到如下的結(jié)果:
引用
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
這說(shuō)明什么?
1、可接受的寫法
從輸出結(jié)果中“123123123”,表明前面三行的echo語(yǔ)句都是正常的:
echo $test;
echo "${test}";
echo "{$test}";
2、不建議的寫法
后面的兩行都有Notice警告,也就是曾把test變量看成常量,只是后來(lái)才假設(shè)為變量來(lái)處理的。因此,為了避免歧義和沖突,不建議這樣寫:
echo ${test}.'_';
echo ${test};
不過(guò),可以有一種變通的寫法
echo ${'test'}.'_';
echo ${'test'};
這樣寫的話就不會(huì)報(bào)錯(cuò)了
3、不正確的寫法
網(wǎng)上不少資料介紹,${var}與{$var}的作用是一樣的。但是,如果你再加入一句:
echo {$test};
那么,你將會(huì)得到以下錯(cuò)誤信息:
引用
Parse error: syntax error, unexpected '{' in /var/www/html/phpcrm/testpages/variables.php on line 8
這可不是Notice警告,是錯(cuò)誤,因解析問(wèn)題,程序?qū)⒉荒苷_\(yùn)行。
三、總結(jié)
結(jié)合前面兩部分的內(nèi)容,我相信,對(duì)于變量引用時(shí)使用大括號(hào),應(yīng)遵循以下原則:
引用
1、正確的寫法為:${var} 的形式;
2、與雙引號(hào)一同使用;
3、根據(jù)需表達(dá)的意思進(jìn)行定界。
所以,最后我把switch一行改為:
switch ("${action}_${child}") {
即不再出現(xiàn)Notice警告。
二、$str{4}在字符串的變量的后面跟上{}剛大括號(hào)和中括號(hào)一樣都是把某個(gè)字符串變量當(dāng)成數(shù)組處理。
三、{$val}這時(shí)候大括號(hào)起的作用就是,告訴PHP,括起來(lái)的要當(dāng)成變量處理。
復(fù)制代碼 代碼如下:
$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"; //加一個(gè)大括號(hào)只是將作為變量的標(biāo)志符
}
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"; //加兩個(gè)大括號(hào),外層的將作為普通的字符
}
//用大括號(hào)來(lái)區(qū)分變量
//echo "$arr['name']"; //用此句會(huì)報(bào)語(yǔ)法錯(cuò)誤
echo "{$arr['name']}"; //此句正常,大括號(hào)內(nèi)的字符將作為變量來(lái)處理
//$str{4} 在字符串的變量的后面跟上{} 大括號(hào)和中括號(hào)一樣都是把某個(gè)字符串變量當(dāng)成數(shù)組處理
$str = 'abcdefg';
echo $str{4};
{}大括號(hào)在php中的作用(PHP變量放在大括號(hào)里面的含義)
如:$sql = "insert into article (`channel_id`,`title`,`detail`,`pub_time`) values ('{$cid}','{$title}','{$detail}','{$time}');";
不加似乎也可以,加{}是什么意思呢?
還有字段名 為什么要以``包括呢?
==============================================
至少便于閱讀嘛~~~''是insert into語(yǔ)句要求的,因?yàn)樽址蓪?duì)出現(xiàn)嘛
加{}有時(shí)候是為了防止變量名和后面的字符串連在一起嘛
例如
{$cid}dd
如果cid=aa
那么{$cid}dd=aadd
不加的話你自己看看了$ciddd,豈不變成了ciddd變量了~~
PHP 變量后面加上一個(gè)大括號(hào){},里面填上數(shù)字,就是指 PHP 變量相應(yīng)序號(hào)的字符。
例如:
$str = 'hello';
echo $str{0}; // 輸出為 h
echo $str{1}; // 輸出為 e
如果要檢查某個(gè)字符串是否滿足多少長(zhǎng)度,可以考慮用這種大括號(hào)(花括號(hào))加 isset 的方式替代 strlen 函數(shù),因?yàn)?isset 是語(yǔ)言結(jié)構(gòu),strlen 是函數(shù),所以使用 isset 比使用 strlen 效率更高。
比如判斷一個(gè)字符串的長(zhǎng)度是否小于 5:
if ( !isset ( $str{5} ) ) 就比 if ( strlen ( $str ) < 5 ) 好。
下面幾個(gè)比較能說(shuō)明原因的解釋是:
表示{}里面的是一個(gè)變量 ,執(zhí)行時(shí)按照變量來(lái)處理 在字符串中引用變量使用的特殊包括方式,這樣就可以不使用.運(yùn)算符,從而減少代碼的輸入量了。
其實(shí)輸出那塊是等同于print "hello ".$arr['fruit'];
一、使用大括號(hào)的變量
前一篇日志提到了,PHP Notice警告的是下面一句:
switch (${action}.'_'.${child}) {
初看并沒(méi)有什么問(wèn)題。我也查詢了PHP手冊(cè)上關(guān)于變量的定義:這里。
1、可變變量的情況
可見(jiàn),與大部分資料一樣,變量使用大括號(hào)的情況,在于“可變變量”(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.
也就是說(shuō),為了在數(shù)組環(huán)境中也可以使用可變變量,因此,需要根據(jù)不同的情況,恰當(dāng)?shù)氖褂么罄ㄌ?hào){}限制變量的范圍。${$a[1]} 與${$a}[1] 是完全不同的:
引用
${$a[1]} 這里$a[1]是一個(gè)變量;
${$a}[1] 這里$a是一個(gè)變量;
2、定界、避免歧義
實(shí)際上,這情況與可變變量時(shí)類似。例如,若使用“.”連接符,連接一個(gè)字符串,可能是這樣:
echo $str.'_2010';
用大括號(hào)來(lái)寫,可能更簡(jiǎn)單:
echo "${str}_2010";
可見(jiàn),如果沒(méi)有大括號(hào),則可能把$str_2010整個(gè)作為一個(gè)變量來(lái)處理。當(dāng)然,這樣的寫法,只能用在雙引號(hào)中,單引號(hào)里面是不會(huì)執(zhí)行變量替換的。
3、字符串變量中的單個(gè)字符
例如:
復(fù)制代碼 代碼如下:
<?php
$str='000';
$str{0}='1';
echo $str; //輸出為100
?>
這不難理解,與中括號(hào)[]的作用是一致的,有點(diǎn)類似Python中把字符串看成對(duì)象的情況。所以,下面的語(yǔ)句功能相同:
復(fù)制代碼 代碼如下:
<?php
$str='000';
$str[0]='1';
echo $str; //也是輸出100
?>
不過(guò),這些都不是我想說(shuō)明的內(nèi)容,真正想描述的情況,請(qǐng)見(jiàn)下面。
二、變量使用大括號(hào)的異同
首先,把PHP的錯(cuò)誤信息輸出全部打開(kāi),即/etc/php.ini 為:
引用
error_reporting = E_ALL
display_errors = On
然后,打開(kāi)測(cè)試頁(yè)面,其中代碼為:
復(fù)制代碼 代碼如下:
<?php
$test='123';
echo $test;
echo "${test}";
echo "{$test}";
echo ${test}.'_';
echo ${test};
?>
你會(huì)看到如下的結(jié)果:
引用
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
這說(shuō)明什么?
1、可接受的寫法
從輸出結(jié)果中“123123123”,表明前面三行的echo語(yǔ)句都是正常的:
復(fù)制代碼 代碼如下:
echo $test;
echo "${test}";
echo "{$test}";
2、不建議的寫法
后面的兩行都有Notice警告,也就是曾把test變量看成常量,只是后來(lái)才假設(shè)為變量來(lái)處理的。因此,為了避免歧義和沖突,不建議這樣寫:
復(fù)制代碼 代碼如下:
echo ${test}.'_';
echo ${test};
不過(guò),可以有一種變通的寫法
復(fù)制代碼 代碼如下:
echo ${'test'}.'_';
echo ${'test'};
這樣寫的話就不會(huì)報(bào)錯(cuò)了
3、不正確的寫法
網(wǎng)上不少資料介紹,${var}與{$var}的作用是一樣的。但是,如果你再加入一句:
echo {$test};
那么,你將會(huì)得到以下錯(cuò)誤信息:
引用
Parse error: syntax error, unexpected '{' in /var/www/html/phpcrm/testpages/variables.php on line 8
這可不是Notice警告,是錯(cuò)誤,因解析問(wèn)題,程序?qū)⒉荒苷_\(yùn)行。
三、總結(jié)
結(jié)合前面兩部分的內(nèi)容,我相信,對(duì)于變量引用時(shí)使用大括號(hào),應(yīng)遵循以下原則:
引用
1、正確的寫法為:${var} 的形式;
2、與雙引號(hào)一同使用;
3、根據(jù)需表達(dá)的意思進(jìn)行定界。
所以,最后我把switch一行改為:
switch ("${action}_${child}") {
即不再出現(xiàn)Notice警告。
您可能感興趣的文章:
- php使用正則表達(dá)式提取字符串中尖括號(hào)、小括號(hào)、中括號(hào)、大括號(hào)中的字符串
- php中{}大括號(hào)是什么意思
- php json_encode值中大括號(hào)與花括號(hào)區(qū)別
- PHP判斷表達(dá)式中括號(hào)是否匹配的簡(jiǎn)單實(shí)例
- PHP7.1方括號(hào)數(shù)組符號(hào)多值復(fù)制及指定鍵值賦值用法分析
- PHP 基本語(yǔ)法格式
- PHP基本語(yǔ)法總結(jié)
- PHP語(yǔ)法速查表
- php正則表達(dá)式的基本語(yǔ)法總結(jié)
- PHP中大括號(hào)''{}''用法實(shí)例總結(jié)
相關(guān)文章
Yii框架實(shí)現(xiàn)樂(lè)觀鎖與悲觀鎖流程詳解
樂(lè)觀鎖(optimistic locking)表現(xiàn)出大膽、務(wù)實(shí)的態(tài)度。使用樂(lè)觀鎖的前提是, 實(shí)際應(yīng)用當(dāng)中,發(fā)生沖突的概率比較低。他的設(shè)計(jì)和實(shí)現(xiàn)直接而簡(jiǎn)潔。 目前Web應(yīng)用中,樂(lè)觀鎖的使用占有絕對(duì)優(yōu)勢(shì)。悲觀鎖正如其名字,悲觀鎖(pessimistic locking)體現(xiàn)了一種謹(jǐn)慎的處事態(tài)度2022-11-11Android ProgressBar進(jìn)度條和ProgressDialog進(jìn)度框的展示DEMO
本篇文章是對(duì)Android中ProgressBar進(jìn)度條和ProgressDialog進(jìn)度框的展示DEMO進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP中SESSION使用中的一點(diǎn)經(jīng)驗(yàn)總結(jié)
最近在網(wǎng)上的交流中發(fā)現(xiàn)大家對(duì)SESSION的使用上有很多誤區(qū),本質(zhì)上就是不了解SESSION的工作原理2012-03-03php中通過(guò)DirectoryIterator刪除整個(gè)目錄的方法
這篇文章主要介紹了php中通過(guò)DirectoryIterator刪除整個(gè)目錄的方法,實(shí)例分析了php通過(guò)DirectoryIterator類操作目錄的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03PHP隱形一句話后門,和ThinkPHP框架加密碼程序(base64_decode)
今天一個(gè)客戶的服務(wù)器頻繁被寫入一句話后門,刪除了還有,原來(lái)在程序中加入了如下代碼,大家可以注意下base64_decode函數(shù)的參數(shù)。2011-11-11php頁(yè)面消耗內(nèi)存過(guò)大的處理辦法
是因?yàn)閜hp頁(yè)面消耗的最大內(nèi)存默認(rèn)是為 8M (在PHP的ini件里可以看到) ,如果文件太大 或圖片太大 在讀取的時(shí)候 會(huì)發(fā)生錯(cuò)誤。2013-03-03php下利用curl判斷遠(yuǎn)程文件是否存在的實(shí)現(xiàn)代碼
php下利用curl判斷遠(yuǎn)程文件是否存在的實(shí)現(xiàn)代碼,我們有些程序因需要事先判斷文件是否存在然后再進(jìn)行后面的操作。2011-10-10