在我最近做的一個(gè)項(xiàng)目中,我發(fā)現(xiàn)了一個(gè)新的概念,關(guān)于在PHP中使用變量的變量,在我的程序中,我需要在一個(gè)頁(yè)面同時(shí)更新多個(gè)記錄,在我經(jīng)過(guò)相當(dāng)長(zhǎng)時(shí)間的痛苦思考之后,腦海中偶然地閃現(xiàn)出了變量的變量(variable variable)這一概念,所有的困惑就一掃而光了。
介紹:什么叫作變量的變量?根據(jù)PHP手冊(cè),變量的變量是指取得一個(gè)變量的值并把它作為另一個(gè)變量的變量名。這表述顯得相當(dāng)?shù)闹苯樱p易和那些在一個(gè)句子中使用“變量”這個(gè)詞弄混淆。給一個(gè)簡(jiǎn)單的例子,你定義一個(gè)變量 --- x 等于 this --- 然后定義一個(gè)變量的變量,意味著你把 x 的值作為新變量的名,在這個(gè)例子中,這個(gè)新變量的值是 is cake。用PHP來(lái)表示如下:
- <?php
- $x = "this";
- $$x = "is cake";
- ?>
這個(gè)符號(hào)$$是在PHP中對(duì)變量的變量的表示方法,現(xiàn)在我們可以用兩種不同的方式來(lái)引用這兩個(gè)變量 $x 和 $$x 了。
- <?php
- echo "$x ${$x}";
- ?>
- <?php
- echo "$x $this";
- ?>
上面兩段程序都將輸出 this is cake,注意,在echo語(yǔ)句中$$x被寫(xiě)成${$x},這是讓PHP知道你要輸出的是變量的變量而不是一個(gè)$字符與$x變量。
你是不是仍很迷惑?哦,也許吧,你想要一些更深入更有用的例子?下一節(jié),我將向你展示怎樣用變量的變量在一個(gè)頁(yè)面編輯多條記錄的。
例子:假設(shè)你已有一個(gè)MySQL數(shù)據(jù)庫(kù),保存了對(duì)一些感愛(ài)好的站點(diǎn)的鏈接,庫(kù)中有一個(gè)表submissions,字段如下:
- SubmissionID
- PostedBy
- Link
- Description
- Approved
現(xiàn)在你想顯示在表中所有的已創(chuàng)建但沒(méi)有被認(rèn)可的鏈接,這個(gè)編輯的頁(yè)面應(yīng)可以更正一些輸入時(shí)的錯(cuò)誤,并用適當(dāng)?shù)膯芜x按鈕來(lái)為每一個(gè)記錄設(shè)置是否答應(yīng)(Approved),然后一次把更新后的記錄都提交到表中。
首先,當(dāng)你從數(shù)據(jù)庫(kù)出提取所有的記錄并顯示出來(lái)時(shí),你必須為每一個(gè)記錄設(shè)置一個(gè)唯一的名字,這將讓我們?cè)谔峤粫r(shí)可以循環(huán)地辯別出各個(gè)記錄的值,代碼如下:
- <?php
- //初始化變量的記數(shù)器
- $index = 0;
- $index_count = 0;
- echo "<form method=post action=$PHP_SELF>n";
- echo "<table>n";
- echo "<tr><td><b>Posted By</b></td><td><b>Link</b></td>".
- "<td><b>Description</b></td><td><b>Approved</b></td></tr>n";
- /*********
- 假定我們已從數(shù)據(jù)庫(kù)中檢索出記錄到一個(gè)數(shù)組中
- $myrow = mysql_fetch_array().
- 下面的 do...while 循環(huán)根據(jù)名字為每一個(gè)$xstr變量分配了一個(gè)值并且連接了$index 的值到結(jié)尾,以0為開(kāi)始。
- 這樣,這個(gè)循環(huán)的第一次時(shí),$SubmissionIDStr 的值就是 SubmissionID0 ,第二次就是 SubmissionID1 ,以此類推。
- ***********/
- do {
- $SubmissionIDStr = SubmissionID.$index;
- $PostedByStr = PostedBy.$index;
- $LinkStr = Link.$index;
- $DescriptionStr = Description.$index;
- $ApprovedStr = Aprroved.$index;
- //這一段將在屏幕上顯示值,以每行一條記錄。
新聞熱點(diǎn)
疑難解答