变量的变量,PHP和你_PHP
变量的变量,PHP 和 你
在我最近做的一个项目中,我发现了一个新的概念,关于在PHP中使用变量的变量。在我的程序中,我需要在一个页面同时更新多个记录,在我经过相当长时间的痛苦思索之后,脑海中偶然地闪现出了变量的变量(variable variable)这一概念,所有的困惑就一扫而光了。
介绍
什么叫作变量的变量?根据PHP手册,变量的变量是指取得一个变量的值并把它作为另一个变量的变量名。这表述显得相当的直接,容易和那些在一个句子中使用“变量”这个词弄混淆。给一个简单的例子,你定义一个变量 --- x 等于 this --- 然后定义一个变量的变量,意味着你把 x 的值作为新变量的名,在这个例子中,这个新变量的值是 is cake。用PHP来表示如下:
$x = "this";
$$x = "is cake";
?>
这个符号$$是在PHP中对变量的变量的表示方法。现在我们可以用两种不同的方式来引用这两个变量 $x 和 $$x 了。
echo "$x ${$x}";
?>
echo "$x $this";
?>
上面两段程序都将输出 this is cake。注意,在echo语句中$$x被写成${$x},这是让PHP知道你要输出的是变量的变量而不是一个$字符与$x变量。
你是不是仍很迷惑?哦,也许吧,你想要一些更深入更有用的例子?下一节,我将向你展示怎样用变量的变量在一个页面编辑多条记录的。
例子
假设你已有一个MySQL数据库,保存了对一些感兴趣的站点的链接,库中有一个表submissions,字段如下:
SubmissionID
PostedBy
Link
Description
Approved
现在你想显示在表中所有的已创建但没有被认可的链接,这个编辑的页面应可以更正一些输入时的错误,并用适当的单选按钮来为每一个记录设置是否允许(Approved),然后一次把更新后的记录都提交到表中。
首先,当你从数据库出提取所有的记录并显示出来时,你必须为每一个记录设置一个唯一的名字,这将让我们在提交时可以循环地辩别出各个记录的值。代码如下:
//初始化变量的记数器
$index = 0;
$index_count = 0;
echo ";
echo "n";
echo "
n"; Posted By
Link ".
"Description
Approved
/*********
假定我们已从数据库中检索出记录到一个数组中
$myrow = mysql_fetch_array().
下面的 do...while 循环根据名字为每一个$xstr变量分配了一个值并且连接了$index 的值到结尾,以0为开始。
这样,这个循环的第一次时,$SubmissionIDStr 的值就是 SubmissionID0 ,第二次就是 SubmissionID1 ,以此类推。
***********/
do {
$SubmissionIDStr = SubmissionID.$index;
$PostedByStr = PostedBy.$index;
$LinkStr = Link.$index;
$DescriptionStr = Description.$index;
$ApprovedStr = Aprroved.$index;
//这一段将在屏幕上显示值,以每行一条记录。
printf("
n",
YesNo
$SubmissionIDStr, $myrow["SubmissionID"], $PostedByStr, $myrow["PostedBy"], $LinkStr, $myrow["Link"],
$DescriptionStr, $myrow["Description"], $ApprovedStr, $ApprovedStr);
//每个循环记数器加1
$index++;
$index_count++;
} while ($myrow = mysql_fetch_array($result));
// 创建一个索引记数器index_count来跟踪所有的记录数
echo "n";
echo "n";
?>
提交以后,我们利用$index_count变量再一次循环遍历页面上所有的变量,然后,分配这些变量给另一些变量,这就用到了变量的变量。
//这个循环遍历所有页面上显示的记录
for ($index = 0; $index = $counter; $index++) {
/*****
这部分用我们在前面创建的名字设置了新的变量
从0开始,直到$index_count
*****/
$varSubmissionID = 'SubmissionID'.$index;
$varPostedBy = 'PostedBy'.$index;
$varLink = 'Link'.$index;
$varDescription = 'Description'.$index;
$varApproved = 'Approved'.$index;
/******
这是变量的变量部分,把每个值分配给每个新变量的名。
例如,第一次循环时,分配给记录 SubmissionID0 是从前面得来的值,我们用变量的变量来了取到它。
*******/
$SubmissionIDvalue = $$varSubmissionID;
$PostedByvalue = $$varPostedBy;
$Linkvalue = $$varLink;
$Descriptionvalue = $$varDescription;
$Approvedvalue = $$varApproved;
//更新数据库
$sql = "UPDATE submissions SET PostedBy='$PostedByvalue',Link='$Linkvalue',".
"Description='$Descriptionvalue' WHERE SubmissionID=$SubmissionIDvalue'";
$result = mysql_query($sql);
//如果本记录被设置为approved,更新相应的字段 Approved。
if ($Approvedvalue == '-1') {
$sql = "UPDATE submissions SET Approved='-1' WHERE SubmissionID=$SubmissionIDvalue";
$result = mysql_query($sql);
}
}
?>
我希望这有助于你明白这个变量的变量的基本用法,并且在你将来的工作中使用它们提供一些思路。变量的变量这一概念,最初也是让我头痛的东西,但是一旦你知道了它们工作的基本原理时,它们就变成了一块美味的比萨饼。如果有什么问题请让我知道吧。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

index.html代表網頁的首頁文件,是網站的預設頁面。當使用者造訪一個網站時,通常會先載入index.html頁面。 HTML(HypertextMarkupLanguage)是一種用來建立網頁的標記語言,index.html也是一種HTML檔。它包含網頁的結構和內容,以及用於格式化和佈局的標籤和元素。下面是一個範例的index.html程式碼:<

拼多多軟體內提供的商品好物非常多,隨時隨地想買就買,而且每一件商品品質都是嚴格把關的,件件商品都是正品,不同還有非常多優惠的購物折扣,讓大家網購根本停不下來。輸入手機號碼在線登錄,在線添加多個收貨地址和聯繫方式,可以隨時查看最新的物流動態,不同品類的商品板塊都是開放的,搜索上下滑動選購下單,足不出戶輕鬆體驗便捷的網購服務,還能查看所有的購買記錄,包括自己買過的商品,數十個購物紅包、優惠券免費領取使用,現在小編在線詳細為拼多多用戶們帶來查看買過的商品記錄的方法。 1.打開手機,點選拼多多圖標,

環境變數是運行應用程式和程式的位置路徑(或環境)。它們可以由使用者建立、編輯、管理或刪除,並在管理某些進程的行為時派上用場。以下介紹如何建立設定檔以同時管理多個變量,而無需在Windows上單獨編輯它們。如何在環境變數中使用設定檔Windows11和10在Windows上,有兩組環境變數–使用者變數(應用於目前使用者)和系統變數(全域應用)。但是,使用像PowerToys這樣的工具,您可以建立一個單獨的設定檔來新增的和現有的變數並一次管理它們。方法如下:步驟1:安裝PowerToysPowerTo

如何在Linux中查看命令歷史記錄在Linux中,我們使用history命令來查看所有先前執行的命令的清單。它有一個非常簡單的語法:history與歷史記錄命令配對的一些選項包括:選項描述-c清除當前會話的命令歷史記錄-w將命令歷史記錄寫入檔案-r從歷史記錄檔案重新載入命令歷史記錄-n限制最近命令的輸出數量只需執行history命令即可在Linux終端機中查看所有先前執行的命令的清單:除了查看命令歷史記錄之外,您還可以管理命令歷史記錄並執行修改先前執行的命令、反向搜尋指令歷史記錄甚至完全刪除歷史記

PHP7中引入了嚴格模式,該模式可以幫助開發者減少潛在的錯誤。本文將介紹什麼是嚴格模式以及如何在PHP7中使用嚴格模式來減少錯誤。同時,將透過程式碼範例演示嚴格模式的應用。一、什麼是嚴格模式?嚴格模式是PHP7中的一個特性,它可以幫助開發者編寫更規範的程式碼,減少一些常見的錯誤。在嚴格模式下,會對變數的宣告、型別檢查、函數呼叫等進行嚴格的限制和偵測。通

iPhone中的通話記錄經常被低估,並且是iPhone最關鍵的功能之一。憑藉其簡單性,此功能具有至關重要的意義,可提供有關在裝置上撥打或接聽的通話的重要見解。無論是出於工作目的還是法律訴訟,存取通話記錄的能力都被證明是無價的。簡單來說,通話記錄是指每當撥打或接聽電話時在iPhone上建立的條目。這些日誌包含關鍵訊息,包括聯絡人的姓名(如果未另存為聯絡人,則為號碼)、時間戳記、持續時間和呼叫狀態(已撥打、未接聽或未接聽)。它們是您的通訊歷史記錄的簡明記錄。通話記錄包括儲存在iPhone上的通話記錄條

iPhone可讓您在「健康」App中添加藥物,以便追蹤和管理您每天服用的藥物、維生素和補充劑。然後,您可以在設備上收到通知時記錄已服用或跳過的藥物。記錄用藥後,您可以查看您服用或跳過用藥的頻率,以幫助您追蹤自己的健康狀況。在這篇文章中,我們將指導您在iPhone上的健康應用程式中查看所選藥物的日誌歷史記錄。如何在「健康」App中查看用藥日誌歷史記錄簡短指南:前往「健康」App>瀏覽「>用藥」>用藥「>選擇一種用藥>」選項「&a

在現今科技快速發展的時代,程式語言也如雨後春筍般湧現。其中一門備受矚目的語言就是Go語言,它以其簡潔、高效、並發安全等特性受到了許多開發者的喜愛。 Go語言以其強大的生態系統而著稱,其中有許多優秀的開源專案。本文將介紹五個精選的Go語言開源項目,帶領讀者一起探索Go語言開源專案的世界。 KubernetesKubernetes是一個開源的容器編排引擎,用於自
