goba Mon Nov 4 05:51:07 2002 EDT Modified files: /phpdoc/en/language types.xml Log: Adding "Converting to string" section, which hopefully closes my assigned bug #19575 Done some reorganization in the type juggling section, added more todo comments Also added a few examples, in place of some todo comments More to come on conversion to other types in the future...
Index: phpdoc/en/language/types.xml diff -u phpdoc/en/language/types.xml:1.90 phpdoc/en/language/types.xml:1.91 --- phpdoc/en/language/types.xml:1.90 Sat Oct 26 16:40:41 2002 +++ phpdoc/en/language/types.xml Mon Nov 4 05:51:07 2002 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="iso-8859-1"?> -<!-- $Revision: 1.90 $ --> +<!-- $Revision: 1.91 $ --> <chapter id="language.types"> <title>Types</title> @@ -242,7 +242,7 @@ </listitem> <listitem> <simpara>an <link linkend="language.types.object">object</link> - with zero elements</simpara> + with zero member variables</simpara> </listitem> <listitem> <simpara>the special type <link linkend="language.types.null" @@ -393,7 +393,9 @@ the <literal>(int)</literal> or the <literal>(integer)</literal> cast. However, in most cases you do not need to use the cast, since a value will be automatically converted if an operator, function or - control structure requires a <type>integer</type> argument. + control structure requires an <type>integer</type> argument. + You can also convert a value to integer with the function + <function>intval</function>. </simpara> <simpara> See also <link linkend="language.types.type-juggling">type-juggling</link>. @@ -974,8 +976,68 @@ see also the <link linkend="ref.ctype">character type functions</link>. </simpara> </sect2> + <sect2 id="language.types.string.casting"> + <title>Converting to string</title> + + <para> + You can convert a value to a string using the <literal>(string)</literal> + cast, or the <function>strval</function> function. String conversion + is automatically done in the scope of an expression for you where a + string is needed. This happens when you use the <function>echo</function> + or <function>print</function> functions, or when you compare a variable + value to a string. + </para> + + <para> + A boolean &true; value is converted to the string <literal>"1"</literal>, + the &false; value is represented as <literal>""/literal> (empty string). + This way you can convert back and forth between boolean and string values. + </para> + <para> + An integer or a floating point number is converted to a string + representing the number with its digits (includig the exponent part + for floating point numbers). + </para> + <para> + Arrays are always converted to the string <literal>"Array"</literal>, + so you cannot dump out the contents of an array with <function>echo</function> + or <function>print</function> to see what is inside them. See the information + below for more tips. + </para> + <para> + Objects are always converted to the string <literal>"Object"</literal>. + If you would like to print out the member variable values of an object + for debugging reasons, read the paragraphs below. If you would + like to find out the class name of which an object is an instance of, + use <function>get_class</function>. + </para> + <para> + Resources are always converted to strings with the structure + <literal>"Resource id #1"</literal> where <literal>1</literal> is + the unique number of the resource assigned by PHP during runtime. + </para> + <para> + &null; is always converted to an empty string. + </para> + + <para> + As you can see above, printing out the arrays, objects or resources does not + provide you any useful information about the values themselfs. Look at the + functions <function>print_r</function> and <function>var_dump</function> + for better ways to print out values for debugging. + </para> + + <para> + You can also convert PHP values to strings to store them permanently. This + method is called serialization, and can be done with the function + <function>serialize</function>. You can also serialize PHP values to + XML structures, if you have <link linkend="ref.wddx">WDDX</link> support + in your PHP setup. + </para> + </sect2> + <sect2 id="language.types.string.conversion"> - <title>String conversion</title> + <title>String conversion to numbers</title> <simpara> When a string is evaluated as a numeric value, the resulting @@ -1937,9 +1999,9 @@ PHP does not require (or support) explicit type definition in variable declaration; a variable's type is determined by the context in which that variable is used. That is to say, if you - assign a string value to variable <parameter>var</parameter>, - <parameter>var</parameter> becomes a string. If you then assign an - integer value to <parameter>var</parameter>, it becomes an + assign a string value to variable <parameter>$var</parameter>, + <parameter>$var</parameter> becomes a string. If you then assign an + integer value to <parameter>$var</parameter>, it becomes an integer. </simpara> <para> @@ -1984,7 +2046,7 @@ <simpara> If the last two examples above seem odd, see <link linkend="language.types.string.conversion">String - conversion</link>. + conversion to numbers</link>. </simpara> <simpara> If you wish to force a variable to be evaluated as a certain type, @@ -2010,15 +2072,27 @@ </informalexample> </para> <para> - Since PHP supports indexing into strings via offsets using the - same syntax as array indexing, the example above leads to a - problem: should $a become an array with its first element being - "f", or should "f" become the first character of the string $a? + Since PHP (for historical reasons) supports indexing into strings + via offsets using the same syntax as array indexing, the example + above leads to a problem: should $a become an array with its first + element being "f", or should "f" become the first character of the + string $a? </para> <para> - For this reason, as of PHP 3.0.12 and PHP 4.0b3-RC4, the result - of this automatic conversion is considered to be undefined. Fixes - are, however, being discussed. + The current versions of PHP interpret the second assignment as + a string offset identification, so $a becomes "f", the result + of this automatic conversion however should be considered + undefined. PHP 4 introduced the new curly bracket syntax to access + characters in string, use this syntax instead of the one presented + above: + <informalexample> + <programlisting role="php"> +$a = "abc"; // $a is a string +$a{1} = "f"; // $a is now "afc" + </programlisting> + </informalexample> + See the section titled <link linkend="language.types.string.substr">String + access by character</link> for more informaton. </para> </note> @@ -2032,7 +2106,7 @@ <informalexample> <programlisting role="php"> $foo = 10; // $foo is an integer -$bar = (float) $foo; // $bar is a float +$bar = (boolean) $foo; // $bar is a boolean </programlisting> </informalexample> </para> @@ -2059,14 +2133,6 @@ </listitem> </itemizedlist> </para> - <note> - <simpara> - Instead of casting a variable to string, you can also enclose - the variable in double quotes. - <!-- TODO: example --> - </simpara> - </note> - <para> Note that tabs and spaces are allowed inside the parentheses, so the following are functionally equivalent: @@ -2077,6 +2143,25 @@ </programlisting> </informalexample> </para> + <note> + <simpara> + Instead of casting a variable to string, you can also enclose + the variable in double quotes. + <informalexample> + <programlisting role="php"> +$foo = 10; // $foo is an integer +$str = "$foo"; // $str is a string +$fst = (string) $foo; // $fst is also a string + +// This prints out that "they are the same" +if ($fst === $str) { + echo "they are the same"; +} + </programlisting> + </informalexample> + </simpara> + </note> + <para> It may not be obvious exactly what will happen when casting between certain types. For more info, see these sections: @@ -2090,16 +2175,16 @@ <simpara><link linkend="language.types.integer.casting">Converting to integer</link></simpara> </listitem> + <listitem> + <simpara><link linkend="language.types.string.casting">Converting to + string</link></simpara> + </listitem> <!-- don't exist yet <listitem> <simpara><link linkend="language.types.float.casting">Converting to float</link></simpara> </listitem> <listitem> - <simpara><link linkend="language.types.string.casting">Converting to - string</link></simpara> - </listitem> - <listitem> <simpara><link linkend="language.types.array.casting">Converting to array</link></simpara> </listitem> @@ -2120,19 +2205,7 @@ </para> <para> - <!-- TODO: move to 'converting to string' --> - When casting or forcing a conversion from array to string, the - result will be the word <literal>Array</literal>. When casting or - forcing a conversion from object to string, the result will be - the word <literal>Object</literal>. - - <!-- not with my PHP, not even a notice... maybe in PHP3? - Does someone know? - - In both cases a warning will - be issued. --> - </para> - <para> + <!-- TODO: move to 'converting to array' --> When casting from a scalar or a string variable to an array, the variable will become the first element of the array: <informalexample> @@ -2144,6 +2217,7 @@ </informalexample> </para> <para> + <!-- TODO: move to 'converting to object' --> When casting from a scalar or a string variable to an object, the variable will become an attribute of the object; the attribute name will be 'scalar':
-- PHP Documentation Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php