dams Thu May 10 11:01:04 2001 EDT
Modified files:
/phpdoc/en/language types.xml
Log:
Added jeroen's updates
Index: phpdoc/en/language/types.xml
diff -u phpdoc/en/language/types.xml:1.18 phpdoc/en/language/types.xml:1.19
--- phpdoc/en/language/types.xml:1.18 Tue May 8 16:34:05 2001
+++ phpdoc/en/language/types.xml Thu May 10 11:01:04 2001
@@ -11,6 +11,11 @@
</listitem>
<listitem>
<simpara>
+ <link linkend="language.types.boolean">booleans</link>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
<link linkend="language.types.double">floating-point numbers
</link>
</simpara>
@@ -49,8 +54,15 @@
information, see the section on <link
linkend="language.types.type-juggling">Type Juggling</link>.
</simpara>
+
+ <sect1 id="language.types.boolean">
+ <title>Booleans</title>
+ <para>
+ This is the simpelest. Either TRUE or FALSE. <!-- more to come -->
+ </para>
+ </sect1>
- <sect1 id="language.types.integer">
+ <sect1 id="language.types.integer">
<title>Integers</title>
<para>
Integers can be specified using any of the following syntaxes:
@@ -131,15 +143,15 @@
<tbody>
<row>
<entry><literal>\n</literal></entry>
- <entry>linefeed (LF or 0x0A in ASCII)</entry>
+ <entry>linefeed (LF or 0x0A (10) in ASCII)</entry>
</row>
<row>
<entry><literal>\r</literal></entry>
- <entry>carriage return (CR or 0x0D in ASCII)</entry>
+ <entry>carriage return (CR or 0x0D (13) in ASCII)</entry>
</row>
<row>
<entry><literal>\t</literal></entry>
- <entry>horizontal tab (HT or 0x09 in ASCII)</entry>
+ <entry>horizontal tab (HT or 0x09 (9) in ASCII)</entry>
</row>
<row>
<entry><literal>\\</literal></entry>
@@ -293,7 +305,126 @@
</programlisting>
</example>
</para>
-
+ <sect2 id="language.types.string.parsing">
+ <title>String parsing</title>
+ <!-- Section orig. by [EMAIL PROTECTED],
+ I used simpara all over, because I don't know when
+ to use para. There will also probably some typo's
+ and misspellings.
+ -->
+ <simpara>
+ When a string is specified in double quotes, variables are
+ parsed within it.
+ </simpara>
+ <simpara>
+ There are two types of syntax, a
+ <link linked="language.types.string.parsing.simple">simple</link>
+ one and a
+ <link linked="language.types.string.parsing.complex">complex</link>
+ one.
+ The simple syntax is the most common and convenient, it provides a way
+ to parse a variable, an array-value, or a object-property.
+ </simpara>
+ <simpara>
+ The complex syntax was introduced in PHP 4,
+ <!-- XXX was it? and starting with what version exactly? -->
+ and can by recognised
+ by the curly braces surrounding the expression.
+ </simpara>
+ <sect3 id="language.types.string.parsing.simple">
+ <title>Simple syntax</title>
+ <simpara>
+ If a $ is encoutered, the parser will
+ greedily take as much tokens as possible to form a valid
+ variable name. Enclose the the variable name in curly
+ braces if you want to explicitely specify the end of the
+ name.
+ </simpara>
+ <informalexample>
+ <programlisting role="php">
+ $beer = 'Heineken';
+ echo "$beer's taste is great"; // works, "'" is an invalid character for varnames
+ echo "He drunk some $beers"; // won't work, 's' is a valid character for varnames
+ echo "He drunk some ${beer}s"; // works
+ </programlisting>
+ </informalexample>
+ <simpara>
+ Similary, you can also have an array-index and an
+ object-property parsed. With array-indices, the
+ ']' marks the end of the index, for object-properties
+ the same rules apply as to simple variables, though
+ with object properties there doesn't exist a trick
+ like the one with variables.
+
+ <!-- XXX isn't true :(, this would be the trick
+ Also,
+ the same trick with curly-braces works if you
+ want to limit the greediness of parsers (aren't they
+ paying them enough or something?).
+ -->
+
+ </simpara>
+ <informalexample>
+ <programlisting role="php">
+ $fruits = array( 'strawberry' => 'red' , 'banana' => 'yellow' );
+ echo "A banana is $fruits[banana].";
+ echo "This square is $square->width meters broad.";
+ echo "This square is $square->width00 centimeters broad."; // won't work,
+ // for a solution, see the <link
+linked="language.types.string.parsing.complex">complex syntax</link>.
+
+ <!-- XXX this won't work:
+ echo "This square is $square->{width}00 centimeters broad.";
+ // XXX: php developers: it would be consequent to make this work.
+ // XXX: like the $obj->{expr} syntax outside a string works,
+ // XXX: analogously to the ${expr} syntax for variable var's.
+ -->
+
+ </programlisting>
+ </informalexample>
+ <simpara>
+ For anything more complex, you should use the complex syntax.
+ </simpara>
+ </sect3>
+ <sect3 id="language.types.string.parsing.complex">
+ <title>Complex (curly) syntax</title>
+ <simpara>
+ I didn't call this complex because the syntax is complex,
+ but because you can include complex expressions this way.
+ </simpara>
+ <simpara>
+ In fact, you can include any value that is in the namespace
+ in strings with this syntax. You simply write the expression
+ the same way as you would outside the string, and then include
+ it in { and }. Since you can't escape '{', this syntax will
+ only be recognised when the $ is immediately following the {.
+ (Use "{\$" to get a literal "{$").
+ Some examples to make it clear:
+ </simpara>
+ <informalexample>
+ <programlisting role="php">
+ $great = 'fantastic';
+ echo "This is { $great}"; // won't work, outputs: This is { fantastic}
+ echo "This is {$great}"; // works, outputs: This is fantastic
+ echo "This square is {$square->width}00 centimeters broad.";
+ echo "This works: {$arr[4][3]}";
+ echo "This is wrong: {$arr[foo][3]}"; // for the same reason
+ // as $foo[bar] is wrong outside a string.
+ <!-- XXX see the still-to-write explaination in the arrays-section. -->
+ echo "You should do it this way: {$arr['foo'][3]}";
+ echo "You can even write {$obj->values[3]->name}";
+ echo "This is the value of the var named $name: {${$name}}";
+
+ <!-- <xxx> maybe it's better to leave this out?? -->
+ // this works, but i disencourage its use, since this is NOT
+ // involving functions, rather than mere variables, arrays and objects.
+ $beer = 'Heineken';
+ echo "I'd like to have another {${ strrev('reeb') }}, hips";
+ <!-- </xxx> -->
+
+ </programlisting>
+ </informalexample>
+ </sect3>
+ </sect2>
<sect2 id="language.types.string.conversion">
<title>String conversion</title>
@@ -655,6 +786,9 @@
<simpara>(int), (integer) - cast to integer</simpara>
</listitem>
<listitem>
+ <simpara>(bool), (boolean) - cast to boolean</simpara>
+ </listitem>
+ <listitem>
<simpara>(real), (double), (float) - cast to double</simpara>
</listitem>
<listitem>
@@ -683,6 +817,37 @@
between certain types. For instance, the following should be
noted.
</para>
+ <para>
+ When converting to boolean, the following values are considered
+ FALSE:
+
+ <itemizedlist>
+ <listitem>
+ <simpara>the boolean FALSE<!-- duh... --></simpara>
+ </listitem>
+ <listitem>
+ <simpara>the integer 0 (zero) </simpara>
+ </listitem>
+ <listitem>
+ <simpara>the float 0.0 (zero) </simpara>
+ </listitem>
+ <listitem>
+ <simpara>the empty string, and the string "0"</simpara>
+ </listitem>
+ <listitem>
+ <simpara>an array with zero elements</simpara>
+ </listitem>
+ <listitem>
+ <simpara>an object with zero elements</simpara>
+ </listitem>
+ </itemizedlist>
+
+ Every other value is considered true.
+ <!-- <XXX> this should be such a cute warning thing... -->
+ (-1 is considered TRUE!).
+ <!-- and/or a few examples, for the people only looking at
+ the examples... </XXX> -->
+ </para>
<para>
When casting or forcing a conversion from array to string, the
result will be the word <literal>Array</literal>. When casting or