Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 12023

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!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.types.html"><LINK
REL="PREVIOUS"
TITLE="本文档中使用的伪类型"
HREF="language.pseudo-types.html"><LINK
REL="NEXT"
TITLE="变量"
HREF="language.variables.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.pseudo-types.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>章 11. 类型</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="language.variables.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="language.types.type-juggling"
>类型戏法</A
></H1
><P
>&#13;   PHP 在变量定义中不需要(或不支持)明示的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个字符串值赋给变量
   <CODE
CLASS="parameter"
>var</CODE
>,<CODE
CLASS="parameter"
>var</CODE
>
   就成了一个字符串。如果又把一个整型值赋给
   <CODE
CLASS="parameter"
>var</CODE
>,那它就成了一个整数。
  </P
><P
>&#13;   PHP 的自动类型转换的一个例子是加号“+”。如果任何一个运算数是浮点数,则所有的运算数都被当成浮点数,结果也是浮点数。否则运算数会被解释为整数,结果也是整数。注意这并没有改变这些运算数本身的类型;改变的仅是这些运算数如何被求值。
   <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3477"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$foo </font><font color="#007700">= </font><font color="#DD0000">"0"</font><font color="#007700">;&nbsp;&nbsp;</font><font color="#FF8000">// $foo is string (ASCII 48)<br /></font><font color="#0000BB">$foo </font><font color="#007700">+= </font><font color="#0000BB">2</font><font color="#007700">;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $foo is now an integer (2)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">$foo </font><font color="#007700">+ </font><font color="#0000BB">1.3</font><font color="#007700">;&nbsp;&nbsp;</font><font color="#FF8000">// $foo is now a float (3.3)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">5 </font><font color="#007700">+ </font><font color="#DD0000">"10 Little Piggies"</font><font color="#007700">; </font><font color="#FF8000">// $foo is integer (15)<br /></font><font color="#0000BB">$foo </font><font color="#007700">= </font><font color="#0000BB">5 </font><font color="#007700">+ </font><font color="#DD0000">"10 Small Pigs"</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $foo is integer (15)<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
  </P
><P
>&#13;   如果上面两个例子看上去古怪的话,参见<A
HREF="language.types.string.html#language.types.string.conversion"
>字符串转换为数值</A
>。
  </P
><P
>&#13;   如果要强制将一个变量当作某种类型来求值,参见<A
HREF="language.types.type-juggling.html#language.types.typecasting"
>类型强制转换</A
>一节。如果要改变一个变量的类型,参见 <A
HREF="function.settype.html"
><B
CLASS="function"
>settype()</B
></A
>。
  </P
><P
>&#13;   如果想要测试本节中任何例子的话,可以用 <A
HREF="function.var-dump.html"
><B
CLASS="function"
>var_dump()</B
></A
> 函数。
  </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    数组的自动转换行为目前没有定义。
   </P
><P
>&#13;    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3489"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$a </font><font color="#007700">= </font><font color="#DD0000">"1"</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $a 是字符串<br /></font><font color="#0000BB">$a</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">] = </font><font color="#DD0000">"f"</font><font color="#007700">;&nbsp;&nbsp;</font><font color="#FF8000">// 是字符串偏移量吗?结果会是什么?<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
   </P
><P
>&#13;    由于一些历史原因,PHP 支持通过偏移量进行的字符串索引,这和数组索引的语法一样。以上的例子就产生了一个问题:$a
    应该变成一个第一个元素是“f”的数组呢,还是“f”成了字符串 $a 的第一个字符?
   </P
><P
>&#13;    目前版本的 PHP 将以上第二个赋值理解成字符串的偏移量标识,即 $a 变成了
    "f",尽管如此,这种自动转换的地结果应该被认为未定义。PHP 4
    引入了新的花括号语法来访问字符串的字符,请使用该语法来替代以上的操作:
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3493"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$a&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">= </font><font color="#DD0000">"abc"</font><font color="#007700">; </font><font color="#FF8000">// $a 为一个字符串<br /></font><font color="#0000BB">$a</font><font color="#007700">{</font><font color="#0000BB">1</font><font color="#007700">} = </font><font color="#DD0000">"f"</font><font color="#007700">;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $a 目前为 "afc"<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
    请参阅<A
HREF="language.types.string.html#language.types.string.substr"
>访问和修改字符串中的字符</A
>一节以获取更多信息。
   </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="language.types.typecasting"
>类型强制转换</A
></H2
><P
>&#13;    PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3499"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$foo </font><font color="#007700">= </font><font color="#0000BB">10</font><font color="#007700">;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $foo is an integer<br /></font><font color="#0000BB">$bar </font><font color="#007700">= (boolean) </font><font color="#0000BB">$foo</font><font color="#007700">;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $bar is a boolean<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
   </P
><P
>&#13;    允许的强制转换有:
    <P
></P
><UL
><LI
><P
>(int),(integer) - 转换成整型</P
></LI
><LI
><P
>(bool),(boolean) - 转换成布尔型</P
></LI
><LI
><P
>(float),(double),(real) - 转换成浮点型</P
></LI
><LI
><P
>(string) - 转换成字符串</P
></LI
><LI
><P
>(array) - 转换成数组</P
></LI
><LI
><P
>(object) - 转换成对象</P
></LI
></UL
>
   </P
><P
>&#13;    注意在括号内允许有空格和制表符,所以下面两个例子功能相同:
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3516"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$foo </font><font color="#007700">= (int) </font><font color="#0000BB">$bar</font><font color="#007700">;<br /></font><font color="#0000BB">$foo </font><font color="#007700">= ( int ) </font><font color="#0000BB">$bar</font><font color="#007700">;<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
   </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
     为了将一个变量还原为字符串,还可以将变量放置在双引号中。
    <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN3520"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$foo </font><font color="#007700">= </font><font color="#0000BB">10</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $foo is an integer<br /></font><font color="#0000BB">$str </font><font color="#007700">= </font><font color="#DD0000">"$foo"</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// $str is a string<br /></font><font color="#0000BB">$fst </font><font color="#007700">= (string) </font><font color="#0000BB">$foo</font><font color="#007700">; </font><font color="#FF8000">// $fst is also a string<br /><br />// This prints out that "they are the same"<br /></font><font color="#007700">if (</font><font color="#0000BB">$fst </font><font color="#007700">=== </font><font color="#0000BB">$str</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"they are the same"</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
    </P
></BLOCKQUOTE
></DIV
><P
>&#13;    当在某些类型之间强制转换时确切地会发生什么可能不是很明显。更多信息见如下小节:
    <P
></P
><UL
><LI
><P
><A
HREF="language.types.boolean.html#language.types.boolean.casting"
>转换为布尔值</A
></P
></LI
><LI
><P
><A
HREF="language.types.integer.html#language.types.integer.casting"
>转换为整型</A
></P
></LI
><LI
><P
><A
HREF="language.types.float.html#language.types.float.casting"
>转换为浮点型</A
></P
></LI
><LI
><P
><A
HREF="language.types.string.html#language.types.string.casting"
>转换为字符串</A
></P
></LI
><LI
><P
><A
HREF="language.types.array.html#language.types.array.casting"
>转换为数组</A
></P
></LI
><LI
><P
><A
HREF="language.types.object.html#language.types.object.casting"
>转换为对象</A
></P
></LI
><LI
><P
><A
HREF="language.types.resource.html#language.types.resource.casting"
>转换为资源</A
></P
></LI
><LI
><P
>&#13;       <A
HREF="types.comparisons.html"
>类型比较表</A
>
      </P
></LI
></UL
>
   </P
></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.pseudo-types.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.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.types.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>变量</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>