<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >可变变量</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="变量" HREF="language.variables.html"><LINK REL="PREVIOUS" TITLE="变量范围" HREF="language.variables.scope.html"><LINK REL="NEXT" TITLE="来自 PHP 之外的变量" HREF="language.variables.external.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="language.variables.scope.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >章 12. 变量</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="language.variables.external.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="language.variables.variable" >可变变量</A ></H1 ><P > 有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如: </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3784" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$a </font><font color="#007700">= </font><font color="#DD0000">'hello'</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > 一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 <SPAN CLASS="emphasis" ><I CLASS="emphasis" >hello</I ></SPAN > 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如: </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3788" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">$</font><font color="#0000BB">$a </font><font color="#007700">= </font><font color="#DD0000">'world'</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > 这时,两个变量都被定义了:<CODE CLASS="varname" >$a</CODE > 的内容是“hello”并且 <CODE CLASS="varname" >$hello</CODE > 的内容是“world”。因此,可以表述为: </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3793" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">echo </font><font color="#DD0000">"$a </font><font color="#007700">${</font><font color="#DD0000">$a</font><font color="#007700">}</font><font color="#DD0000">"</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > 以下写法更准确并且会输出同样的结果: </P ><DIV CLASS="informalexample" ><P ></P ><A NAME="AEN3796" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#007700">echo </font><font color="#DD0000">"$a $hello"</font><font color="#007700">;<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV ><P > 它们都会输出:<SAMP CLASS="computeroutput" >hello world</SAMP >。 </P ><P > 要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 <CODE CLASS="varname" >$$a[1]</CODE > 时,解析器需要知道是想要 <CODE CLASS="varname" >$a[1]</CODE > 作为一个变量呢,还是想要 <CODE CLASS="varname" >$$a</CODE > 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 <CODE CLASS="varname" >${$a[1]}</CODE >,对第二种情况用 <CODE CLASS="varname" >${$a}[1]</CODE >。 </P ><DIV CLASS="warning" ><P ></P ><TABLE CLASS="warning" BORDER="1" WIDTH="100%" ><TR ><TD ALIGN="CENTER" ><B >警告</B ></TD ></TR ><TR ><TD ALIGN="LEFT" ><P > 注意,在 PHP 的函数和类的方法中,<A HREF="language.variables.predefined.html#language.variables.superglobals" >超全局变量</A >不能用作可变变量。 </P ></TD ></TR ></TABLE ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="language.variables.scope.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="language.variables.external.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >变量范围</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="language.variables.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >来自 PHP 之外的变量</TD ></TR ></TABLE ></DIV ></BODY ></HTML >