在我最近做的乙個專案中,我發明了乙個新的概念,關於在php中應用變數的變數。在我的程式中,我需要在乙個頁面同時更新多個記錄,在我經過相當長時間的苦楚思考之後,腦海中偶然地閃現出了變數的變數(variable variable)這一概念,所有的困惑就一掃而光了。
先容什麼叫作變數的變數?根據php手冊,變數的變數是指取得乙個變數的值並把它作為另乙個變數的變數名。這表述顯得相當的直接,輕易和那些在乙個句子中應用「變數」這個詞弄混雜。給乙個簡略的例子,你定義乙個變數 --- x 即是 this --- 然後定義乙個變數的變數,意味著你把 x 的值作為新變數的名,在這個例子中,這個新變數的值是 is cake。用php來表現如下:
<?php
$x = 'this';
$$x = 'is cake';
?>
這個符號$$是在php中對變數的變數的表現方法。現在我們可以用兩種不同的方法來引用這兩個變數 $x 和 $$x 了。
<?php
echo '$x $';
?>
<?php
echo '$x $this';
?>
上面兩段程式都將輸出 this is cake。留心,在echo語句中$$x被寫成$,這是讓php知道你要輸出的是變數的變數而不是乙個$字元與$x變數。
你是不是仍很困惑?哦,也許吧,你想要一些更深進更有用的例子?下一節,我將向你展現怎樣用變數的變數在乙個頁面編纂多條記錄的。
例子假設你已有乙個mysql資料庫,保留了對一些感愛好的站點的鏈結,庫中有乙個表submissions,字段如下:
submissionid
postedby
link
description
approved
現在你想顯示在表中所有的已創立但沒有被認可的鏈結,這個編纂的頁面應可以更正一些輸進時的錯誤,並用適當的單選按鈕來為每乙個記錄設定是否答應(approved),然後一次把更新後的記錄都提交到表中。
首先,當你從資料庫出提取所有的記錄並顯示出來時,你必需為每乙個記錄設定乙個唯一的名字,這將讓我們在提交時可以迴圈地辯別出各個記錄的值。**如下:
<?php
//初始化變數的記數器
$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';
/*********
假定我們已從資料庫中檢索出記錄到乙個陣列中
$myrow = mysql_fetch_array().
下面的 do...while 迴圈根據名字為每乙個$xstr變數分配了乙個值並且連線了$index 的值到結尾,以0為開端。
這樣,這個迴圈的第一次時,$submissionidstr 的值就是 submissionid0 ,第二次就是 submissionid1 ,以此類推。
PHP變數的變數
什麼叫作變數的變數?根據php手冊,變數的變數是指取得乙個變數的值並把它作為另乙個變數的變數名。這表述顯得相當的直接,容易和那些在乙個句子中使用 變數 這個詞弄混淆。給乙個簡單的例子,你定義乙個變數 x 等於 this 然後定義乙個變數的變數,意味著你把 x 的值作為新變數的名,在這個例子中,這個新...
php中自變數 PHP 變數
php 變數作用域 變數的作用域是指令碼中變數可被引用和使用的部分,php 中有四種不同的變數作用域 序號作用域 描述local 區域性作用域 global 全域性作用域 static 靜態作用域 parameter 函式引數作用域 1 local 本地的 區域性變數的作用域 在 php 函式內部宣...
PHP 的變數型別,變數檢測
變數的檢測 if isset b else isset 用於檢測變數是否設定,返回布林值,如果變數未被賦值或者賦值為 null 則返回false,反之則返回true 獲取變數型別 a 1 echo gettype a 判斷變數是否是想要型別 is int,is float,is array.a 23...