數(shù)組與類使用PHP的可變變量名需要的注意的問(wèn)題
更新時(shí)間:2013年06月20日 09:24:45 作者:
本篇文章是對(duì)數(shù)組與類使用PHP的可變變量名需要的注意的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
有時(shí)候可變的變量名會(huì)給編程帶來(lái)很大的方便。也就是說(shuō)變量名可以被動(dòng)態(tài)的命名和使用。通常變量通過(guò)下面這樣的語(yǔ)句來(lái)命名 :
$a = 'hello';
可變變量名指的是使用一個(gè)變量的值作為這個(gè)變量的名稱。在上面的例子中,通過(guò)使用兩個(gè)$符號(hào),你可以把hello設(shè)置成一個(gè)變量的名稱,就像下面那樣。
$$a = 'world';
通過(guò)上面的兩個(gè)語(yǔ)句,有兩個(gè)變量被定義:變量$a,裝的內(nèi)容是”hello” 以及變量$hello,裝的內(nèi)容是 “world”。 于是,下面的語(yǔ)言:
echo "$a ${$a}";
跟下面的語(yǔ)句的輸出完全一致:
echo "$a $hello";
它們都輸出:hello world。
但是為了使用數(shù)組的可變變量名,你需要解決一個(gè)歧義問(wèn)題。就是,如果你寫(xiě)$$a[1],解析器需要明白究竟你的意思是要把$a[1]當(dāng)成一個(gè)變量,還是要 把$$a當(dāng)成變量、[1]指的是這個(gè)變量的索引。解決這個(gè)歧義問(wèn)題的語(yǔ)法是:第一種情況使用${$a[1]},第二種情況使用${$a}[1]。
類屬性也可以通過(guò)可變屬性名來(lái)訪問(wèn)。可變屬性名從產(chǎn)生調(diào)用所在的變量的訪問(wèn)范圍內(nèi)獲取。例如,如果你的表達(dá)式是這樣的:$foo->$bar,那么運(yùn) 行時(shí)將會(huì)在本地變量范圍內(nèi)尋找變量$bar,它的值將會(huì)做為$foo對(duì)象的一個(gè)屬性名。如果$bar是個(gè)數(shù)組也可以使用。
<?php
class foo {
var $bar = 'I am bar.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->$baz[1] . "\n";
?>
上面的例子將會(huì)輸出下面的結(jié)果:
I am bar.
I am bar.
請(qǐng)注意:可變變量名不能用于PHP函數(shù)和類里的超級(jí)全局?jǐn)?shù)組變量上。變量$this也是一個(gè)不能動(dòng)態(tài)取名的特殊變量。
$a = 'hello';
可變變量名指的是使用一個(gè)變量的值作為這個(gè)變量的名稱。在上面的例子中,通過(guò)使用兩個(gè)$符號(hào),你可以把hello設(shè)置成一個(gè)變量的名稱,就像下面那樣。
$$a = 'world';
通過(guò)上面的兩個(gè)語(yǔ)句,有兩個(gè)變量被定義:變量$a,裝的內(nèi)容是”hello” 以及變量$hello,裝的內(nèi)容是 “world”。 于是,下面的語(yǔ)言:
echo "$a ${$a}";
跟下面的語(yǔ)句的輸出完全一致:
echo "$a $hello";
它們都輸出:hello world。
但是為了使用數(shù)組的可變變量名,你需要解決一個(gè)歧義問(wèn)題。就是,如果你寫(xiě)$$a[1],解析器需要明白究竟你的意思是要把$a[1]當(dāng)成一個(gè)變量,還是要 把$$a當(dāng)成變量、[1]指的是這個(gè)變量的索引。解決這個(gè)歧義問(wèn)題的語(yǔ)法是:第一種情況使用${$a[1]},第二種情況使用${$a}[1]。
類屬性也可以通過(guò)可變屬性名來(lái)訪問(wèn)。可變屬性名從產(chǎn)生調(diào)用所在的變量的訪問(wèn)范圍內(nèi)獲取。例如,如果你的表達(dá)式是這樣的:$foo->$bar,那么運(yùn) 行時(shí)將會(huì)在本地變量范圍內(nèi)尋找變量$bar,它的值將會(huì)做為$foo對(duì)象的一個(gè)屬性名。如果$bar是個(gè)數(shù)組也可以使用。
復(fù)制代碼 代碼如下:
<?php
class foo {
var $bar = 'I am bar.';
}
$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->$baz[1] . "\n";
?>
上面的例子將會(huì)輸出下面的結(jié)果:
復(fù)制代碼 代碼如下:
I am bar.
I am bar.
請(qǐng)注意:可變變量名不能用于PHP函數(shù)和類里的超級(jí)全局?jǐn)?shù)組變量上。變量$this也是一個(gè)不能動(dòng)態(tài)取名的特殊變量。
相關(guān)文章
PHP擴(kuò)展程序?qū)崿F(xiàn)守護(hù)進(jìn)程
守護(hù)進(jìn)程就是在后臺(tái)一直運(yùn)行的進(jìn)程。比如我們啟動(dòng)的httpd,mysqld等進(jìn)程都是常駐內(nèi)存內(nèi)運(yùn)行的程序。,下面我們就來(lái)探討下,如何使用php來(lái)實(shí)現(xiàn)守護(hù)進(jìn)程2015-04-04PHP如何根據(jù)文件頭檢測(cè)文件類型實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于PHP如何根據(jù)文件頭檢測(cè)文件類型的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用php具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10PHP程序員最常犯的11個(gè)MySQL錯(cuò)誤小結(jié)
對(duì)于大多數(shù)web應(yīng)用來(lái)說(shuō),數(shù)據(jù)庫(kù)都是一個(gè)十分基礎(chǔ)性的部分。如果你在使用PHP,那么你很可能也在使用MySQL—LAMP系列中舉足輕重的一份子。2010-11-11php基于ob_start(ob_gzhandler)實(shí)現(xiàn)網(wǎng)頁(yè)壓縮功能的方法
這篇文章主要介紹了php基于ob_start('ob_gzhandler')實(shí)現(xiàn)網(wǎng)頁(yè)壓縮功能的方法,涉及php中ob_gzip、ob_start等函數(shù)操作緩沖區(qū)及內(nèi)容壓縮相關(guān)技巧,需要的朋友可以參考下2017-02-02php中file_get_content 和curl以及fopen 效率分析
關(guān)于file_get_content 和curl以及fopen 的效率問(wèn)題,小編比較傾向于使用curl來(lái)訪問(wèn)遠(yuǎn)程url。Php有curl模塊擴(kuò)展,功能很是強(qiáng)大。沒(méi)事可以研究一下。2014-09-09PHP讀取ACCESS數(shù)據(jù)到MYSQL的代碼
PHP讀取ACCESS數(shù)據(jù)到MYSQL數(shù)據(jù)庫(kù)的代碼,需要的朋友可以參考下。2011-05-05淺談ThinkPHP5.0版本和ThinkPHP3.2版本的區(qū)別
小編小編就為大家?guī)?lái)一篇淺談ThinkPHP5.0版本和ThinkPHP3.2版本的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06