diff --git a/language/types.xml b/language/types.xml
index be55f4a72d..5db9a34bd5 100644
--- a/language/types.xml
+++ b/language/types.xml
@@ -1,5 +1,5 @@
-
+
Types
@@ -171,2567 +171,18 @@ if (is_string($a_bool)) {
as they show examples of various type related comparisons.
-
-
- Booleans
-
-
- This is the easiest type. A boolean expresses a
- truth value. It can be either &true; or &false;.
-
-
-
-
- The boolean type was introduced in PHP 4.
-
-
-
-
- Syntax
-
- To specify a boolean literal, use either the keyword &true;
- or &false;. Both are case-insensitive.
-
-
-
-]]>
-
-
-
-
- Usually you
- use some kind of operator
- which returns a boolean value, and then pass it
- on to a control
- structure.
-
-
-\n";
-}
-
-// ...because you can simply type
-if ($show_separators) {
- echo "\n";
-}
-?>
-]]>
-
-
-
-
-
-
- Converting to boolean
-
- To explicitly convert a value to boolean, use either
- the (bool) or the (boolean) 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 boolean argument.
-
-
- See also Type Juggling.
-
-
-
- When converting to boolean, the following values
- are considered &false;:
-
-
-
- the boolean
- &false; itself
-
-
- the integer 0 (zero)
-
-
- the float
- 0.0 (zero)
-
-
- the empty string, and the string
- "0"
-
-
- an array
- with zero elements
-
-
- an object
- with zero member variables (PHP 4 only)
-
-
- the special type NULL (including unset variables)
-
-
-
- SimpleXML
- objects created from empty tags
-
-
-
-
- Every other value is considered &true; (including any
- resource).
-
-
- -1 is considered
- &true;, like any other non-zero (whether negative
- or positive) number!
-
-
-
-
-
-]]>
-
-
-
-
-
-
-
- Integers
-
-
- An integer is a number of the set
- Z = {..., -2, -1, 0, 1, 2, ...}.
-
-
-
- See also:
- Arbitrary length integer / GMP,
- Floating point numbers, and
- Arbitrary precision / BCMath
-
-
-
- Syntax
-
- Integers can be specified in decimal (10-based), hexadecimal (16-based)
- or octal (8-based) notation, optionally preceded by a sign (- or +).
-
-
- If you use the octal notation, you must precede the number with a
- 0 (zero), to use hexadecimal notation precede
- the number with 0x.
-
- Integer literals
-
-
-]]>
-
-
- Formally the possible structure for integer literals is:
-
-
-
-
-
- The size of an integer is platform-dependent, although a
- maximum value of about two billion is the usual value
- (that's 32 bits signed). PHP does not support unsigned
- integers.
- Integer size can be determined from PHP_INT_SIZE,
- maximum value from PHP_INT_MAX since PHP 4.4.0 and
- PHP 5.0.5.
-
-
-
- If an invalid digit is passed to octal integer (i.e. 8 or 9), the rest
- of the number is ignored.
-
- Octal weirdness
-
-
-]]>
-
-
-
-
-
-
-
- Integer overflow
-
- If you specify a number beyond the bounds of the integer
- type, it will be interpreted as a float instead. Also, if
- you perform an operation that results in a number beyond the bounds of
- the integer type, a float will be returned
- instead.
-
-
-
-
-]]>
-
-
-
-
- Unfortunately, there was a bug in PHP so that this
- does not always work correctly when there are negative numbers
- involved. For example: when you do -50000 *
- $million, the result will be
- -429496728. However, when both operands are
- positive there is no problem.
-
-
- This is solved in PHP 4.1.0.
-
-
-
-
- There is no integer division operator in PHP.
- 1/2 yields the float
- 0.5. You can cast the value to
- an integer to always round it downwards, or you can
- use the round function.
-
-
-
-]]>
-
-
-
-
-
-
-
- Converting to integer
-
- To explicitly convert a value to integer, use either
- the (int) or the (integer) 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 an integer argument.
- You can also convert a value to integer with the function
- intval.
-
-
- See also type-juggling.
-
-
-
- From booleans
-
- &false; will yield
- 0 (zero), and &true;
- will yield 1 (one).
-
-
-
-
- From floating point numbers
-
- When converting from float to integer, the number will
- be rounded towards zero.
-
-
-
- If the float is beyond the boundaries of integer
- (usually +/- 2.15e+9 = 2^31),
- the result is undefined, since the float hasn't
- got enough precision to give an exact integer result.
- No warning, not even a notice will be issued in this
- case!
-
-
-
- Never cast an unknown fraction to integer, as this can
- sometimes lead to unexpected results.
-
-
-
-]]>
-
-
-
- See for more information the warning
- about float-precision.
-
-
-
-
- From strings
-
- See String
- conversion to numbers
-
-
-
-
- From other types
-
-
-
- Behaviour of converting to integer is undefined for other
- types. Currently, the behaviour is the same as if the value
- was first converted to boolean. However, do
- not rely on this behaviour, as it can
- change without notice.
-
-
-
-
-
-
-
-
- Floating point numbers
-
- Floating point numbers (AKA "floats", "doubles" or "real numbers") can be
- specified using any of the following syntaxes:
-
-
-
-]]>
-
-
- Formally:
-
-
-
-
-
- The size of a float is platform-dependent,
- although a maximum of ~1.8e308 with a precision of roughly 14
- decimal digits is a common value (that's 64 bit IEEE format).
-
-
- Floating point precision
-
- It is quite usual that simple decimal fractions like
- 0.1 or 0.7 cannot be
- converted into their internal binary counterparts without a
- little loss of precision. This can lead to confusing results: for
- example, floor((0.1+0.7)*10) will usually
- return 7 instead of the expected
- 8 as the result of the internal representation
- really being something like 7.9999999999....
-
-
- This is related to the fact that it is impossible to exactly
- express some fractions in decimal notation with a finite number
- of digits. For instance, 1/3 in decimal form
- becomes 0.3333333. . ..
-
-
- So never trust floating number results to the last digit and
- never compare floating point numbers for equality. If you really
- need higher precision, you should use the arbitrary precision math functions
- or gmp functions instead.
-
-
-
-
- Converting to float
-
-
- For information on when and how strings are converted to floats,
- see the section titled String
- conversion to numbers. For values of other types, the conversion
- is the same as if the value would have been converted to integer
- and then to float. See the Converting
- to integer section for more information.
- As of PHP 5, notice is thrown if you try to convert object to float.
-
-
-
-
-
- Strings
-
- A string is series of characters. In PHP,
- a character is the same as a byte, that is, there are exactly
- 256 different characters possible. This also implies that PHP
- has no native support of Unicode. See utf8_encode
- and utf8_decode for some Unicode support.
-
-
-
- It is no problem for a string to become very large.
- There is no practical bound to the size
- of strings imposed by PHP, so there is no reason at all
- to worry about long strings.
-
-
-
- Syntax
-
- A string literal can be specified in three different
- ways.
-
-
-
-
- single quoted
-
-
-
-
- double quoted
-
-
-
-
- heredoc syntax
-
-
-
-
-
-
- Single quoted
-
- The easiest way to specify a simple string is to
- enclose it in single quotes (the character ').
-
-
- To specify a literal single
- quote, you will need to escape it with a backslash
- (\), like in many other languages.
- If a backslash needs to occur before a single quote or at
- the end of the string, you need to double it.
- Note that if you try to escape any
- other character, the backslash will also be printed! So
- usually there is no need to escape the backslash itself.
-
-
- In PHP 3, a warning will
- be issued at the E_NOTICE level when this
- happens.
-
-
-
-
- Unlike the two other syntaxes, variables and escape sequences
- for special characters will not be expanded
- when they occur in single quoted strings.
-
-
-
-
-
-]]>
-
-
-
-
-
- Double quoted
-
- If the string is enclosed in double-quotes ("),
- PHP understands more escape sequences for special
- characters:
-
-
- Escaped characters
-
-
-
- sequence
- meaning
-
-
-
-
- \n
- linefeed (LF or 0x0A (10) in ASCII)
-
-
- \r
- carriage return (CR or 0x0D (13) in ASCII)
-
-
- \t
- horizontal tab (HT or 0x09 (9) in ASCII)
-
-
- \v
- vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
-
-
- \f
- form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
-
-
- \\
- backslash
-
-
- \$
- dollar sign
-
-
- \"
- double-quote
-
-
- \[0-7]{1,3}
-
- the sequence of characters matching the regular
- expression is a character in octal notation
-
-
-
- \x[0-9A-Fa-f]{1,2}
-
- the sequence of characters matching the regular
- expression is a character in hexadecimal notation
-
-
-
-
-
-
- Again, if you try to escape any other character, the
- backslash will be printed too!
- Before PHP 5.1.1, backslash in \{$var} hasn't been
- printed.
-
-
- But the most important feature of double-quoted strings
- is the fact that variable names will be expanded.
- See string
- parsing for details.
-
-
-
-
- Heredoc
-
- Another way to delimit strings is by using heredoc syntax
- ("<<<"). One should provide an identifier (followed by new line) after
- <<<, then the string, and then the
- same identifier to close the quotation.
-
-
- The closing identifier must begin in the
- first column of the line. Also, the identifier used must follow
- the same naming rules as any other label in PHP: it must contain
- only alphanumeric characters and underscores, and must start with
- a non-digit character or underscore.
-
-
-
-
- It is very important to note that the line with the closing
- identifier contains no other characters, except
- possibly a semicolon (;).
- That means especially that the identifier
- may not be indented, and there
- may not be any spaces or tabs after or before the semicolon.
- It's also important to realize that the first character before
- the closing identifier must be a newline as defined by your
- operating system. This is \r on Macintosh
- for example. Closing delimiter (possibly followed by a semicolon) must
- be followed by a newline too.
-
-
- If this rule is broken and the closing identifier is not "clean"
- then it's not considered to be a closing identifier and PHP
- will continue looking for one. If in this case a proper closing
- identifier is not found then a parse error will result with the
- line number being at the end of the script.
-
-
- It is not allowed to use heredoc syntax in initializing class members.
- Use other string syntaxes instead.
-
- Invalid example
-
-
-]]>
-
-
-
-
-
-
- Heredoc text behaves just like a double-quoted string, without
- the double-quotes. This means that you do not need to escape quotes
- in your here docs, but you can still use the escape codes listed
- above. Variables are expanded, but the same care must be taken
- when expressing complex variables inside a heredoc as with
- strings.
-
- Heredoc string quoting example
-
-foo = 'Foo';
- $this->bar = array('Bar1', 'Bar2', 'Bar3');
- }
-}
-
-$foo = new foo();
-$name = 'MyName';
-
-echo <<foo.
-Now, I am printing some {$foo->bar[1]}.
-This should print a capital 'A': \x41
-EOT;
-?>
-]]>
-
-
-
-
-
-
- Heredoc support was added in PHP 4.
-
-
-
-
-
- Variable parsing
-
- When a string is specified in double quotes or with
- heredoc, variables are
- parsed within it.
-
-
- There are two types of syntax: a
- simple
- one and a
- complex
- one.
- The simple syntax is the most common and convenient. It provides a way
- to parse a variable, an array value, or an
- object property.
-
-
- The complex syntax was introduced in PHP 4, and can be recognised
- by the curly braces surrounding the expression.
-
-
-
- Simple syntax
-
- If a dollar sign ($) is encountered, the
- parser will greedily take as many tokens as possible to form a
- valid variable name. Enclose the variable name in curly
- braces if you want to explicitly specify the end of the name.
-
-
-
-
-]]>
-
-
-
- Similarly, you can also have an array index or an
- object property parsed. With array indices, the closing square
- bracket (]) 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.
-
-
-
-
-
-
- 'red', 'banana' => 'yellow');
-
-// Works but note that this works differently outside string-quotes
-echo "A banana is $fruits[banana].";
-
-// Works
-echo "A banana is {$fruits['banana']}.";
-
-// Works but PHP looks for a constant named banana first
-// as described below.
-echo "A banana is {$fruits[banana]}.";
-
-// Won't work, use braces. This results in a parse error.
-echo "A banana is $fruits['banana'].";
-
-// Works
-echo "A banana is " . $fruits['banana'] . ".";
-
-// Works
-echo "This square is $square->width meters broad.";
-
-// Won't work. For a solution, see the complex syntax.
-echo "This square is $square->width00 centimeters broad.";
-?>
-]]>
-
-
-
-
- For anything more complex, you should use the complex syntax.
-
-
-
-
- Complex (curly) syntax
-
- This isn't called complex because the syntax is complex,
- but because you can include complex expressions this way.
-
-
- 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:
-
-
-
-width}00 centimeters broad.";
-
-// Works
-echo "This works: {$arr[4][3]}";
-
-// This is wrong for the same reason as $foo[bar] is wrong
-// outside a string. In other words, it will still work but
-// because PHP first looks for a constant named foo, it will
-// throw an error of level E_NOTICE (undefined constant).
-echo "This is wrong: {$arr[foo][3]}";
-
-// Works. When using multi-dimensional arrays, always use
-// braces around arrays when inside of strings
-echo "This works: {$arr['foo'][3]}";
-
-// Works.
-echo "This works: " . $arr['foo'][3];
-
-echo "You can even write {$obj->values[3]->name}";
-
-echo "This is the value of the var named $name: {${$name}}";
-
-echo "This is the value of the var named by the return value of getName(): {${getName()}}";
-
-echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
-?>
-]]>
-
-
-
-
-
-
- Functions and method calls inside {$ } work since PHP 5.
-
-
-
-
- Parsing variables within strings uses more memory than string
- concatenation. When writing a PHP script in which memory usage is a
- concern, consider using the concatenation operator (.) rather than
- variable parsing.
-
-
-
-
-
-
- String access and modification by character
-
- Characters within strings may be accessed and modified by specifying the
- zero-based offset of the desired character after the string
- using square array-brackets like $str[42] so think of
- a string as an array of characters.
-
-
-
- They may also be accessed using braces like $str{42}
- for the same purpose. However, using square array-brackets is preferred
- because the {braces} style is deprecated as of PHP 6.
-
-
-
-
- Some string examples
-
-
-]]>
-
-
-
-
-
- Accessing by [] or {} to
- variables of other type silently returns &null;.
-
-
-
-
-
-
-
- Useful functions and operators
-
- Strings may be concatenated using the '.' (dot) operator. Note
- that the '+' (addition) operator will not work for this. Please
- see String
- operators for more information.
-
-
- There are a lot of useful functions for string modification.
-
-
- See the string functions section
- for general functions, the regular expression functions for
- advanced find&replacing (in two tastes:
- Perl and
- POSIX extended).
-
-
- There are also functions for URL-strings,
- and functions to encrypt/decrypt strings
- (mcrypt and
- mhash).
-
-
- Finally, if you still didn't find what you're looking for,
- see also the character type functions.
-
-
-
-
- Converting to string
-
-
- You can convert a value to a string using the (string)
- cast, or the strval 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 echo
- or print functions, or when you compare a variable
- value to a string. Reading the manual sections on Types and Type Juggling will make
- the following clearer. See also settype.
-
-
-
- A boolean &true; value is converted to the string "1",
- the &false; value is represented as "" (empty string).
- This way you can convert back and forth between boolean and string values.
-
-
- An integer or a floating point number (float)
- is converted to a string representing the number with its digits
- (including the exponent part for floating point numbers).
- Floating point numbers can be converted using the exponential notation
- (4.1E+6).
-
-
-
- The decimal point character is defined in the script's
- locale (category LC_NUMERIC).
- See setlocale.
-
-
-
- Arrays are always converted to the string "Array",
- so you cannot dump out the contents of an array with
- echo or print to see what is inside
- them. To view one element, you'd do something like
- echo $arr['foo']. See below for tips on dumping/viewing the
- entire contents.
-
-
- Objects in PHP 4 are always converted to the string "Object".
- 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 get_class.
- As of PHP 5, __toString() method is used if applicable.
-
-
- Resources are always converted to strings with the structure
- "Resource id #1" where 1 is
- the unique number of the resource assigned by PHP during runtime.
- If you would like to get the type of the resource, use
- get_resource_type.
-
-
- &null; is always converted to an empty string.
-
-
-
- As you can see above, printing out the arrays, objects or resources does not
- provide you any useful information about the values themselves. Look at the
- functions print_r and var_dump
- for better ways to print out values for debugging.
-
-
-
- You can also convert PHP values to strings to store them permanently. This
- method is called serialization, and can be done with the function
- serialize. You can also serialize PHP values to
- XML structures, if you have WDDX support
- in your PHP setup.
-
-
-
-
- String conversion to numbers
-
-
- When a string is evaluated as a numeric value, the resulting
- value and type are determined as follows.
-
-
- The string will evaluate as a float if it contains any of the
- characters '.', 'e', or 'E'. Otherwise, it will evaluate as an
- integer.
-
-
- The value is given by the initial portion of the string. If the
- string starts with valid numeric data, this will be the value
- used. Otherwise, the value will be 0 (zero). Valid numeric data
- is an optional sign, followed by one or more digits (optionally
- containing a decimal point), followed by an optional
- exponent. The exponent is an 'e' or 'E' followed by one or more
- digits.
-
-
-
-
-]]>
-
-
-
- For more information on this conversion, see the Unix manual page
- for strtod(3).
-
-
- If you would like to test any of the examples in this section,
- you can cut and paste the examples and insert the following line
- to see for yourself what's going on:
-
-
-\n";
-?>
-]]>
-
-
-
-
- Do not expect to get the code of one character by converting it
- to integer (as you would do in C for example). Use the functions
- ord and chr to convert
- between charcodes and characters.
-
-
-
-
-
-
- Arrays
-
-
- An array in PHP is actually an ordered map. A map is a type that
- maps values to keys.
- This type is optimized in several ways,
- so you can use it as a real array, or a list (vector),
- hashtable (which is an implementation of a map),
- dictionary, collection,
- stack, queue and probably more. Because you can have another
- PHP array as a value, you can also quite easily simulate
- trees.
-
-
- Explanation of those data structures is beyond the scope of this
- manual, but you'll find at least one example for each of them.
- For more information we refer you to external literature about
- this broad topic.
-
-
-
- Syntax
-
-
- Specifying with array
-
- An array can be created by the array
- language-construct. It takes a certain number of comma-separated
- key => value
- pairs.
-
-
-
-array( key => value
- , ...
- )
-// key may be an integer or string
-// value may be any value
-
-
-
-
-
- "bar", 12 => true);
-
-echo $arr["foo"]; // bar
-echo $arr[12]; // 1
-?>
-]]>
-
-
-
-
- A key may be either an
- integer or a string. If a key is
- the standard representation of an integer, it will
- be interpreted as such (i.e. "8" will be
- interpreted as 8, while
- "08" will be interpreted as
- "08").
- Floats in key are truncated to integer.
- There are no different indexed and
- associative array types in PHP; there is only one array type,
- which can both contain integer and string indices.
-
-
- A value can be of any PHP type.
-
-
- array(6 => 5, 13 => 9, "a" => 42));
-
-echo $arr["somearray"][6]; // 5
-echo $arr["somearray"][13]; // 9
-echo $arr["somearray"]["a"]; // 42
-?>
-]]>
-
-
-
-
- If you do not specify a key for a given value, then the maximum
- of the integer indices is taken, and the new key will be that
- maximum value + 1. If you specify a key that already has a value
- assigned to it, that value will be overwritten.
-
-
- 43, 32, 56, "b" => 12);
-
-// ...this array
-array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
-?>
-]]>
-
-
-
-
-
- As of PHP 4.3.0, the index generation behaviour described
- above has changed. Now, if you append to an array in which
- the current maximum key is negative, then the next key
- created will be zero (0). Before, the new
- index would have been set to the largest existing key + 1,
- the same as positive indices are.
-
-
-
- Using &true; as a key will evaluate to integer
- 1 as key. Using &false; as a key will evaluate
- to integer0 as key. Using
- NULL as a key will evaluate to the empty
- string. Using the empty string as key will create (or overwrite)
- a key with the empty string and its value; it is not the same as
- using empty brackets.
-
-
- You cannot use arrays or objects as keys. Doing so will result in a
- warning: Illegal offset type.
-
-
-
-
- Creating/modifying with square-bracket syntax
-
- You can also modify an existing array by explicitly setting
- values in it.
-
-
- This is done by assigning values to the array while specifying the
- key in brackets. You can also omit the key, add an empty pair
- of brackets ("[]") to the variable name in that case.
-
-$arr[key] = value;
-$arr[] = value;
-// key may be an integer or string
-// value may be any value
-
- If $arr doesn't exist yet, it will be created.
- So this is also an alternative way to specify an array.
- To change a certain value, just assign a new value
- to an element specified with its key. If you want to
- remove a key/value pair, you need to unset it.
-
-
- 1, 12 => 2);
-
-$arr[] = 56; // This is the same as $arr[13] = 56;
- // at this point of the script
-
-$arr["x"] = 42; // This adds a new element to
- // the array with key "x"
-
-unset($arr[5]); // This removes the element from the array
-
-unset($arr); // This deletes the whole array
-?>
-]]>
-
-
-
-
-
- As mentioned above, if you provide the brackets with no key
- specified, then the maximum of the existing integer indices is
- taken, and the new key will be that maximum value + 1 . If no
- integer indices exist yet, the key will be 0
- (zero). If you specify a key that already has a value assigned
- to it, that value will be overwritten.
-
-
-
-
- As of PHP 4.3.0, the index generation behaviour described
- above has changed. Now, if you append to an array in which
- the current maximum key is negative, then the next key
- created will be zero (0). Before, the new
- index would have been set to the largest existing key + 1,
- the same as positive indices are.
-
-
-
-
- Note that the maximum integer key used for this need
- not currently exist in the array. It simply must
- have existed in the array at some time since the last time the
- array was re-indexed. The following example illustrates:
-
-
-
-
- $value) {
- unset($array[$i]);
-}
-print_r($array);
-
-// Append an item (note that the new key is 5, instead of 0 as you
-// might expect).
-$array[] = 6;
-print_r($array);
-
-// Re-index:
-$array = array_values($array);
-$array[] = 7;
-print_r($array);
-?>
-]]>
-
- &example.outputs;
-
- 1
- [1] => 2
- [2] => 3
- [3] => 4
- [4] => 5
-)
-Array
-(
-)
-Array
-(
- [5] => 6
-)
-Array
-(
- [0] => 6
- [1] => 7
-)
-]]>
-
-
-
-
-
-
-
-
- Useful functions
-
- There are quite a few useful functions for working with arrays.
- See the array functions section.
-
-
-
- The unset function allows unsetting keys of an
- array. Be aware that the array will NOT be reindexed. If you only
- use "usual integer indices" (starting from zero, increasing by one),
- you can achieve the reindex effect by using array_values.
-
-
- 'one', 2 => 'two', 3 => 'three');
-unset($a[2]);
-/* will produce an array that would have been defined as
- $a = array(1 => 'one', 3 => 'three');
- and NOT
- $a = array(1 => 'one', 2 =>'three');
-*/
-
-$b = array_values($a);
-// Now $b is array(0 => 'one', 1 =>'three')
-?>
-]]>
-
-
-
-
-
-
- The foreach
- control structure exists specifically for arrays. It
- provides an easy way to traverse an array.
-
-
-
-
- Array do's and don'ts
-
-
- Why is $foo[bar] wrong?
-
- You should always use quotes around a string literal
- array index. For example, use $foo['bar'] and not
- $foo[bar]. But why is $foo[bar] wrong? You might have seen the
- following syntax in old scripts:
-
-
-
-]]>
-
-
- This is wrong, but it works. Then, why is it wrong? The reason
- is that this code has an undefined constant (bar) rather than a
- string ('bar' - notice the quotes), and PHP may in future define
- constants which, unfortunately for your code, have the same
- name. It works because PHP automatically converts a
- bare string (an unquoted string which does
- not correspond to any known symbol) into a string which contains
- the bare string. For instance, if there is no defined constant
- named bar, then PHP will substitute in the
- string 'bar' and use that.
-
-
-
- This does not mean to always quote the
- key. You do not want to quote keys which are constants or variables, as this will
- prevent PHP from interpreting them.
-
-
-
-
-]]>
-
-
- &example.outputs;
-
-
-
-
-
- More examples to demonstrate this fact:
-
-
- 'apple', 'veggie' => 'carrot');
-
-// Correct
-print $arr['fruit']; // apple
-print $arr['veggie']; // carrot
-
-// Incorrect. This works but also throws a PHP error of
-// level E_NOTICE because of an undefined constant named fruit
-//
-// Notice: Use of undefined constant fruit - assumed 'fruit' in...
-print $arr[fruit]; // apple
-
-// Let's define a constant to demonstrate what's going on. We
-// will assign value 'veggie' to a constant named fruit.
-define('fruit', 'veggie');
-
-// Notice the difference now
-print $arr['fruit']; // apple
-print $arr[fruit]; // carrot
-
-// The following is okay as it's inside a string. Constants are not
-// looked for within strings so no E_NOTICE error here
-print "Hello $arr[fruit]"; // Hello apple
-
-// With one exception, braces surrounding arrays within strings
-// allows constants to be looked for
-print "Hello {$arr[fruit]}"; // Hello carrot
-print "Hello {$arr['fruit']}"; // Hello apple
-
-// This will not work, results in a parse error such as:
-// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
-// This of course applies to using superglobals in strings as well
-print "Hello $arr['fruit']";
-print "Hello $_GET['foo']";
-
-// Concatenation is another option
-print "Hello " . $arr['fruit']; // Hello apple
-?>
-]]>
-
-
-
-
- When you turn error_reporting up to show
- E_NOTICE level errors (such as setting
- it to E_ALL) then you will see these
- errors. By default,
- error_reporting is turned down to not show them.
-
-
- As stated in the syntax section,
- there must be an expression between the square brackets
- ('[' and ']'). That means
- that you can write things like this:
-
-
-
-]]>
-
-
- This is an example of using a function return value
- as the array index. PHP also knows about constants,
- as you may have seen the E_* ones
- before.
-
-
-
-
-]]>
-
-
- Note that E_ERROR is also a valid identifier,
- just like bar in the first example. But the last
- example is in fact the same as writing:
-
-
-
-]]>
-
-
- because E_ERROR equals 1, etc.
-
-
- As we already explained in the above examples,
- $foo[bar] still works but is wrong.
- It works, because bar is due to its syntax
- expected to be a constant expression. However, in this case no
- constant with the name bar exists. PHP now
- assumes that you meant bar literally,
- as the string "bar", but that you forgot
- to write the quotes.
-
-
- So why is it bad then?
-
- At some point in the future, the PHP team might want to add another
- constant or keyword, or you may introduce another constant into your
- application, and then you get in trouble. For example,
- you already cannot use the words empty and
- default this way, since they are special
- reserved keywords.
-
-
-
- To reiterate, inside a double-quoted string, it's
- valid to not surround array indexes with quotes so
- "$foo[bar]" is valid. See the above
- examples for details on why as well as the section on
- variable parsing
- in strings.
-
-
-
-
-
-
-
- Converting to array
-
-
- For any of the types: integer, float,
- string, boolean and resource,
- if you convert a value to an array, you get an array
- with one element (with index 0), which is the scalar value you
- started with.
-
-
-
- If you convert an object to an array, you get the
- properties (member variables) of that object as the array's elements.
- The keys are the member variable names with a few notable exceptions:
- private variables have the class name prepended to the variable name;
- protected variables have a '*' prepended to the variable name.
- These prepended values have null bytes on either side. This can result
- in some unexpected behaviour.
-
-
-
-]]>
-
-
-
- The above will appear to have two keys named 'AA', although one
- of them is actually named '\0A\0A'.
-
-
-
- If you convert a &null; value to an array, you get an empty array.
-
-
-
-
- Comparing
-
- It is possible to compare arrays by array_diff and
- by Array operators.
-
-
-
-
- Examples
-
- The array type in PHP is very versatile, so here will be some
- examples to show you the full power of arrays.
-
-
-
-
- 'red',
- 'taste' => 'sweet',
- 'shape' => 'round',
- 'name' => 'apple',
- 4 // key will be 0
- );
-
-// is completely equivalent with
-$a['color'] = 'red';
-$a['taste'] = 'sweet';
-$a['shape'] = 'round';
-$a['name'] = 'apple';
-$a[] = 4; // key will be 0
-
-$b[] = 'a';
-$b[] = 'b';
-$b[] = 'c';
-// will result in the array array(0 => 'a' , 1 => 'b' , 2 => 'c'),
-// or simply array('a', 'b', 'c')
-?>
-]]>
-
-
-
-
-
- Using array()
-
- 4,
- 'OS' => 'Linux',
- 'lang' => 'english',
- 'short_tags' => true
- );
-
-// strictly numerical keys
-$array = array( 7,
- 8,
- 0,
- 156,
- -10
- );
-// this is the same as array(0 => 7, 1 => 8, ...)
-
-$switching = array( 10, // key = 0
- 5 => 6,
- 3 => 7,
- 'a' => 4,
- 11, // key = 6 (maximum of integer-indices was 5)
- '8' => 2, // key = 8 (integer!)
- '02' => 77, // key = '02'
- 0 => 12 // the value 10 will be overwritten by 12
- );
-
-// empty array
-$empty = array();
-?>
-]]>
-
-
-
-
-
- Collection
-
-
-]]>
-
- &example.outputs;
-
-
-
-
-
-
- Changing values of the array directly is possible since PHP 5 by passing
- them as reference. Prior versions need workaround:
-
- Collection
-
- $color) {
- $colors[$key] = strtoupper($color);
-}
-
-print_r($colors);
-?>
-]]>
-
- &example.outputs;
-
- RED
- [1] => BLUE
- [2] => GREEN
- [3] => YELLOW
-)
-]]>
-
-
-
-
- This example creates a one-based array.
-
- One-based index
-
- 'January', 'February', 'March');
-print_r($firstquarter);
-?>
-]]>
-
- &example.outputs;
-
- 'January'
- [2] => 'February'
- [3] => 'March'
-)
-]]>
-
-
-
-
- Filling an array
-
-
-]]>
-
-
-
- Arrays are ordered. You can also change the order using various
- sorting functions. See the array
- functions section for more information. You can count
- the number of items in an array using the
- count function.
-
-
- Sorting an array
-
-
-]]>
-
-
-
- Because the value of an array can be anything, it can also be
- another array. This way you can make recursive and
- multi-dimensional arrays.
-
-
- Recursive and multi-dimensional arrays
-
- array ( "a" => "orange",
- "b" => "banana",
- "c" => "apple"
- ),
- "numbers" => array ( 1,
- 2,
- 3,
- 4,
- 5,
- 6
- ),
- "holes" => array ( "first",
- 5 => "second",
- "third"
- )
- );
-
-// Some examples to address values in the array above
-echo $fruits["holes"][5]; // prints "second"
-echo $fruits["fruits"]["a"]; // prints "orange"
-unset($fruits["holes"][0]); // remove "first"
-
-// Create a new multi-dimensional array
-$juices["apple"]["green"] = "good";
-?>
-]]>
-
-
-
- You should be aware that array assignment always involves
- value copying. It also means that the internal array pointer used by
- current and similar functions is reset.
- You need to use the reference operator to copy
- an array by reference.
-
-
-
-]]>
-
-
-
-
-
-
-
- Objects
-
-
- Object Initialization
-
-
- To initialize an object, you use the new
- statement to instantiate the object to a variable.
-
-
-
-do_foo();
-?>
-]]>
-
-
-
-
- For a full discussion, please read the section Classes and Objects.
-
-
-
-
- Converting to object
-
-
- If an object is converted to an object, it is not modified. If a value
- of any other type is converted to an object, a new instance of the
- stdClass built in class is created. If the value
- was &null;, the new instance will be empty. Array converts to an object
- with properties named by array keys and with corresponding values. For
- any other value, a member variable named scalar will
- contain the value.
-
-
-scalar; // outputs 'ciao'
-?>
-]]>
-
-
-
-
-
-
-
-
- Resource
-
-
- A resource is a special variable, holding
- a reference to an external resource. Resources
- are created and used by special functions.
- See the appendix
- for a listing of all these
- functions and the corresponding resource types.
-
-
-
-
- The resource type was introduced in PHP 4
-
-
-
-
- See also get_resource_type.
-
-
-
- Converting to resource
-
-
- As resource types hold special handlers to opened
- files, database connections, image canvas areas and
- the like, you cannot convert any value to a resource.
-
-
-
-
- Freeing resources
-
-
- Due to the reference-counting system introduced
- with PHP 4's Zend Engine, it is automatically detected
- when a resource is no longer referred to (just
- like Java). When this is
- the case, all resources that were in use for this
- resource are made free by the garbage collector.
- For this reason, it is rarely ever necessary to
- free the memory manually by using some free_result
- function.
-
-
- Persistent database links are special, they
- are not destroyed by the
- garbage collector. See also the section about persistent
- connections.
-
-
-
-
-
-
-
-
- NULL
-
-
- The special &null; value represents
- that a variable has no value. &null; is the only possible value of type
- NULL.
-
-
-
- The null type was introduced in PHP 4.
-
-
-
- A variable is considered to be &null; if
-
-
-
- it has been assigned the constant &null;.
-
-
-
-
- it has not been set to any value yet.
-
-
-
-
- it has been unset.
-
-
-
-
-
-
- Syntax
-
- There is only one value of type &null;, and that is
- the case-insensitive keyword &null;.
-
-
-
-]]>
-
-
-
-
- See also is_null and unset.
-
-
-
+ &language.types.boolean;
+ &language.types.integer;
+ &language.types.float;
+ &language.types.string;
+ &language.types.array;
+ &language.types.object;
+ &language.types.resource;
+ &language.types.null;
+ &language.types.psuedo-types;
+ &language.types.type-juggling;
-
- Pseudo-types and variables used in this documentation
-
-
- mixed
-
- mixed indicates that a parameter may accept multiple (but not
- necessarily all) types.
-
-
- gettype for example will accept all PHP types,
- while str_replace will accept strings and arrays.
-
-
-
-
- number
-
- number indicates that a parameter can be either
- integer or float.
-
-
-
-
- callback
-
- Some functions like call_user_func
- or usort accept user defined
- callback functions as a parameter. Callback functions can not only
- be simple functions but also object methods including static class
- methods.
-
-
- A PHP function is simply passed by its name as a string. You can
- pass any built-in or user defined function. Note that language
- constructs like
- array,
- echo,
- empty,
- eval,
- exit,
- isset,
- list,
- print or
- unset cannot be called using a callback.
-
-
- A method of an instantiated object is passed as an array containing
- an object as the element with index 0 and a method name as the
- element with index 1.
-
-
- Static class methods can also be passed without instantiating an
- object of that class by passing the class name instead of an
- object as the element with index 0.
-
-
- Apart from common user-defined function,
- create_function can be used to create an anonymous
- callback function.
-
-
-
-
-
- Callback function examples
-
-
-
-]]>
-
-
-
-
-
- In PHP4, you will have to use a reference to create a callback that
- points to the actual object, and not a copy of it. For more details,
- see References Explained.
-
-
-
-
-
-
- void
-
- void in return type means that the return value is
- useless. void in parameters list means that the
- function doesn't accept any parameters.
-
-
-
-
- ...
-
- $... in function prototypes means
- and so on.
- This variable name is used when a function can take an endless number of
- arguments.
-
-
-
-
-
- Type Juggling
-
-
- 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 $var,
- $var becomes a string. If you then assign an
- integer value to $var, it becomes an
- integer.
-
-
- An example of PHP's automatic type conversion is the addition
- operator '+'. If any of the operands is a float, then all
- operands are evaluated as floats, and the result will be a
- float. Otherwise, the operands will be interpreted as integers,
- and the result will also be an integer. Note that this does NOT
- change the types of the operands themselves; the only change is in
- how the operands are evaluated.
-
-
-
-]]>
-
-
-
-
-
- If the last two examples above seem odd, see String
- conversion to numbers.
-
-
- If you wish to force a variable to be evaluated as a certain type,
- see the section on Type
- casting. If you wish to change the type of a variable, see
- settype.
-
-
- If you would like to test any of the examples in this section, you
- can use the var_dump function.
-
-
-
- The behaviour of an automatic conversion to array is currently
- undefined.
-
-
- Also, because PHP supports indexing into strings via offsets using
- the same syntax as array indexing, the following example holds true
- for all PHP versions:
-
-
-
-]]>
-
-
-
-
- See the section titled String
- access by character for more information.
-
-
-
-
- Type Casting
-
-
- Type casting in PHP works much as it does in C: the name of the
- desired type is written in parentheses before the variable which
- is to be cast.
-
-
-
-]]>
-
-
-
-
- The casts allowed are:
-
-
- (int), (integer) - cast to integer
-
-
- (bool), (boolean) - cast to boolean
-
-
- (float), (double), (real) - cast to float
-
-
- (string) - cast to string
-
-
- (binary) - cast to binary string (PHP 6)
-
-
- (array) - cast to array
-
-
- (object) - cast to object
-
-
-
-
- (binary) casting and b prefix forward support was added in PHP 5.2.1
-
-
- Note that tabs and spaces are allowed inside the parentheses, so
- the following are functionally equivalent:
-
-
-
-]]>
-
-
- Casting a literal strings and variables to binary strings:
-
-
-
-]]>
-
-
-
-
-
- Instead of casting a variable to string, you can also enclose
- the variable in double quotes.
-
-
-
-]]>
-
-
-
-
-
-
- It may not be obvious exactly what will happen when casting
- between certain types. For more info, see these sections:
-
-
-
- Converting to
- boolean
-
-
- Converting to
- integer
-
-
- Converting to
- float
-
-
- Converting to
- string
-
-
- Converting to
- array
-
-
- Converting to
- object
-
-
- Converting to
- resource
-
-
-
-
- The type comparison tables
-
-
-
-
-
-
-
+
+ Arrays
+
+
+ An array in PHP is actually an ordered map. A map is a type that
+ maps values to keys.
+ This type is optimized in several ways,
+ so you can use it as a real array, or a list (vector),
+ hashtable (which is an implementation of a map),
+ dictionary, collection,
+ stack, queue and probably more. Because you can have another
+ PHP array as a value, you can also quite easily simulate
+ trees.
+
+
+ Explanation of those data structures is beyond the scope of this
+ manual, but you'll find at least one example for each of them.
+ For more information we refer you to external literature about
+ this broad topic.
+
+
+
+ Syntax
+
+
+ Specifying with array
+
+ An array can be created by the array
+ language-construct. It takes a certain number of comma-separated
+ key => value
+ pairs.
+
+
+
+array( key => value
+ , ...
+ )
+// key may be an integer or string
+// value may be any value
+
+
+
+
+
+ "bar", 12 => true);
+
+echo $arr["foo"]; // bar
+echo $arr[12]; // 1
+?>
+]]>
+
+
+
+
+ A key may be either an
+ integer or a string. If a key is
+ the standard representation of an integer, it will
+ be interpreted as such (i.e. "8" will be
+ interpreted as 8, while
+ "08" will be interpreted as
+ "08").
+ Floats in key are truncated to integer.
+ There are no different indexed and
+ associative array types in PHP; there is only one array type,
+ which can both contain integer and string indices.
+
+
+ A value can be of any PHP type.
+
+
+ array(6 => 5, 13 => 9, "a" => 42));
+
+echo $arr["somearray"][6]; // 5
+echo $arr["somearray"][13]; // 9
+echo $arr["somearray"]["a"]; // 42
+?>
+]]>
+
+
+
+
+ If you do not specify a key for a given value, then the maximum
+ of the integer indices is taken, and the new key will be that
+ maximum value + 1. If you specify a key that already has a value
+ assigned to it, that value will be overwritten.
+
+
+ 43, 32, 56, "b" => 12);
+
+// ...this array
+array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
+?>
+]]>
+
+
+
+
+
+ As of PHP 4.3.0, the index generation behaviour described
+ above has changed. Now, if you append to an array in which
+ the current maximum key is negative, then the next key
+ created will be zero (0). Before, the new
+ index would have been set to the largest existing key + 1,
+ the same as positive indices are.
+
+
+
+ Using &true; as a key will evaluate to integer
+ 1 as key. Using &false; as a key will evaluate
+ to integer0 as key. Using
+ NULL as a key will evaluate to the empty
+ string. Using the empty string as key will create (or overwrite)
+ a key with the empty string and its value; it is not the same as
+ using empty brackets.
+
+
+ You cannot use arrays or objects as keys. Doing so will result in a
+ warning: Illegal offset type.
+
+
+
+
+ Creating/modifying with square-bracket syntax
+
+ You can also modify an existing array by explicitly setting
+ values in it.
+
+
+ This is done by assigning values to the array while specifying the
+ key in brackets. You can also omit the key, add an empty pair
+ of brackets ("[]") to the variable name in that case.
+
+$arr[key] = value;
+$arr[] = value;
+// key may be an integer or string
+// value may be any value
+
+ If $arr doesn't exist yet, it will be created.
+ So this is also an alternative way to specify an array.
+ To change a certain value, just assign a new value
+ to an element specified with its key. If you want to
+ remove a key/value pair, you need to unset it.
+
+
+ 1, 12 => 2);
+
+$arr[] = 56; // This is the same as $arr[13] = 56;
+ // at this point of the script
+
+$arr["x"] = 42; // This adds a new element to
+ // the array with key "x"
+
+unset($arr[5]); // This removes the element from the array
+
+unset($arr); // This deletes the whole array
+?>
+]]>
+
+
+
+
+
+ As mentioned above, if you provide the brackets with no key
+ specified, then the maximum of the existing integer indices is
+ taken, and the new key will be that maximum value + 1 . If no
+ integer indices exist yet, the key will be 0
+ (zero). If you specify a key that already has a value assigned
+ to it, that value will be overwritten.
+
+
+
+
+ As of PHP 4.3.0, the index generation behaviour described
+ above has changed. Now, if you append to an array in which
+ the current maximum key is negative, then the next key
+ created will be zero (0). Before, the new
+ index would have been set to the largest existing key + 1,
+ the same as positive indices are.
+
+
+
+
+ Note that the maximum integer key used for this need
+ not currently exist in the array. It simply must
+ have existed in the array at some time since the last time the
+ array was re-indexed. The following example illustrates:
+
+
+
+
+ $value) {
+ unset($array[$i]);
+}
+print_r($array);
+
+// Append an item (note that the new key is 5, instead of 0 as you
+// might expect).
+$array[] = 6;
+print_r($array);
+
+// Re-index:
+$array = array_values($array);
+$array[] = 7;
+print_r($array);
+?>
+]]>
+
+ &example.outputs;
+
+ 1
+ [1] => 2
+ [2] => 3
+ [3] => 4
+ [4] => 5
+)
+Array
+(
+)
+Array
+(
+ [5] => 6
+)
+Array
+(
+ [0] => 6
+ [1] => 7
+)
+]]>
+
+
+
+
+
+
+
+
+ Useful functions
+
+ There are quite a few useful functions for working with arrays.
+ See the array functions section.
+
+
+
+ The unset function allows unsetting keys of an
+ array. Be aware that the array will NOT be reindexed. If you only
+ use "usual integer indices" (starting from zero, increasing by one),
+ you can achieve the reindex effect by using array_values.
+
+
+ 'one', 2 => 'two', 3 => 'three');
+unset($a[2]);
+/* will produce an array that would have been defined as
+ $a = array(1 => 'one', 3 => 'three');
+ and NOT
+ $a = array(1 => 'one', 2 =>'three');
+*/
+
+$b = array_values($a);
+// Now $b is array(0 => 'one', 1 =>'three')
+?>
+]]>
+
+
+
+
+
+
+ The foreach
+ control structure exists specifically for arrays. It
+ provides an easy way to traverse an array.
+
+
+
+
+ Array do's and don'ts
+
+
+ Why is $foo[bar] wrong?
+
+ You should always use quotes around a string literal
+ array index. For example, use $foo['bar'] and not
+ $foo[bar]. But why is $foo[bar] wrong? You might have seen the
+ following syntax in old scripts:
+
+
+
+]]>
+
+
+ This is wrong, but it works. Then, why is it wrong? The reason
+ is that this code has an undefined constant (bar) rather than a
+ string ('bar' - notice the quotes), and PHP may in future define
+ constants which, unfortunately for your code, have the same
+ name. It works because PHP automatically converts a
+ bare string (an unquoted string which does
+ not correspond to any known symbol) into a string which contains
+ the bare string. For instance, if there is no defined constant
+ named bar, then PHP will substitute in the
+ string 'bar' and use that.
+
+
+
+ This does not mean to always quote the
+ key. You do not want to quote keys which are constants or variables, as this will
+ prevent PHP from interpreting them.
+
+
+
+
+]]>
+
+
+ &example.outputs;
+
+
+
+
+
+ More examples to demonstrate this fact:
+
+
+ 'apple', 'veggie' => 'carrot');
+
+// Correct
+print $arr['fruit']; // apple
+print $arr['veggie']; // carrot
+
+// Incorrect. This works but also throws a PHP error of
+// level E_NOTICE because of an undefined constant named fruit
+//
+// Notice: Use of undefined constant fruit - assumed 'fruit' in...
+print $arr[fruit]; // apple
+
+// Let's define a constant to demonstrate what's going on. We
+// will assign value 'veggie' to a constant named fruit.
+define('fruit', 'veggie');
+
+// Notice the difference now
+print $arr['fruit']; // apple
+print $arr[fruit]; // carrot
+
+// The following is okay as it's inside a string. Constants are not
+// looked for within strings so no E_NOTICE error here
+print "Hello $arr[fruit]"; // Hello apple
+
+// With one exception, braces surrounding arrays within strings
+// allows constants to be looked for
+print "Hello {$arr[fruit]}"; // Hello carrot
+print "Hello {$arr['fruit']}"; // Hello apple
+
+// This will not work, results in a parse error such as:
+// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
+// This of course applies to using superglobals in strings as well
+print "Hello $arr['fruit']";
+print "Hello $_GET['foo']";
+
+// Concatenation is another option
+print "Hello " . $arr['fruit']; // Hello apple
+?>
+]]>
+
+
+
+
+ When you turn error_reporting up to show
+ E_NOTICE level errors (such as setting
+ it to E_ALL) then you will see these
+ errors. By default,
+ error_reporting is turned down to not show them.
+
+
+ As stated in the syntax section,
+ there must be an expression between the square brackets
+ ('[' and ']'). That means
+ that you can write things like this:
+
+
+
+]]>
+
+
+ This is an example of using a function return value
+ as the array index. PHP also knows about constants,
+ as you may have seen the E_* ones
+ before.
+
+
+
+
+]]>
+
+
+ Note that E_ERROR is also a valid identifier,
+ just like bar in the first example. But the last
+ example is in fact the same as writing:
+
+
+
+]]>
+
+
+ because E_ERROR equals 1, etc.
+
+
+ As we already explained in the above examples,
+ $foo[bar] still works but is wrong.
+ It works, because bar is due to its syntax
+ expected to be a constant expression. However, in this case no
+ constant with the name bar exists. PHP now
+ assumes that you meant bar literally,
+ as the string "bar", but that you forgot
+ to write the quotes.
+
+
+ So why is it bad then?
+
+ At some point in the future, the PHP team might want to add another
+ constant or keyword, or you may introduce another constant into your
+ application, and then you get in trouble. For example,
+ you already cannot use the words empty and
+ default this way, since they are special
+ reserved keywords.
+
+
+
+ To reiterate, inside a double-quoted string, it's
+ valid to not surround array indexes with quotes so
+ "$foo[bar]" is valid. See the above
+ examples for details on why as well as the section on
+ variable parsing
+ in strings.
+
+
+
+
+
+
+
+ Converting to array
+
+
+ For any of the types: integer, float,
+ string, boolean and resource,
+ if you convert a value to an array, you get an array
+ with one element (with index 0), which is the scalar value you
+ started with.
+
+
+
+ If you convert an object to an array, you get the
+ properties (member variables) of that object as the array's elements.
+ The keys are the member variable names with a few notable exceptions:
+ private variables have the class name prepended to the variable name;
+ protected variables have a '*' prepended to the variable name.
+ These prepended values have null bytes on either side. This can result
+ in some unexpected behaviour.
+
+
+
+]]>
+
+
+
+ The above will appear to have two keys named 'AA', although one
+ of them is actually named '\0A\0A'.
+
+
+
+ If you convert a &null; value to an array, you get an empty array.
+
+
+
+
+ Comparing
+
+ It is possible to compare arrays by array_diff and
+ by Array operators.
+
+
+
+
+ Examples
+
+ The array type in PHP is very versatile, so here will be some
+ examples to show you the full power of arrays.
+
+
+
+
+ 'red',
+ 'taste' => 'sweet',
+ 'shape' => 'round',
+ 'name' => 'apple',
+ 4 // key will be 0
+ );
+
+// is completely equivalent with
+$a['color'] = 'red';
+$a['taste'] = 'sweet';
+$a['shape'] = 'round';
+$a['name'] = 'apple';
+$a[] = 4; // key will be 0
+
+$b[] = 'a';
+$b[] = 'b';
+$b[] = 'c';
+// will result in the array array(0 => 'a' , 1 => 'b' , 2 => 'c'),
+// or simply array('a', 'b', 'c')
+?>
+]]>
+
+
+
+
+
+ Using array()
+
+ 4,
+ 'OS' => 'Linux',
+ 'lang' => 'english',
+ 'short_tags' => true
+ );
+
+// strictly numerical keys
+$array = array( 7,
+ 8,
+ 0,
+ 156,
+ -10
+ );
+// this is the same as array(0 => 7, 1 => 8, ...)
+
+$switching = array( 10, // key = 0
+ 5 => 6,
+ 3 => 7,
+ 'a' => 4,
+ 11, // key = 6 (maximum of integer-indices was 5)
+ '8' => 2, // key = 8 (integer!)
+ '02' => 77, // key = '02'
+ 0 => 12 // the value 10 will be overwritten by 12
+ );
+
+// empty array
+$empty = array();
+?>
+]]>
+
+
+
+
+
+ Collection
+
+
+]]>
+
+ &example.outputs;
+
+
+
+
+
+
+ Changing values of the array directly is possible since PHP 5 by passing
+ them as reference. Prior versions need workaround:
+
+ Collection
+
+ $color) {
+ $colors[$key] = strtoupper($color);
+}
+
+print_r($colors);
+?>
+]]>
+
+ &example.outputs;
+
+ RED
+ [1] => BLUE
+ [2] => GREEN
+ [3] => YELLOW
+)
+]]>
+
+
+
+
+ This example creates a one-based array.
+
+ One-based index
+
+ 'January', 'February', 'March');
+print_r($firstquarter);
+?>
+]]>
+
+ &example.outputs;
+
+ 'January'
+ [2] => 'February'
+ [3] => 'March'
+)
+]]>
+
+
+
+
+ Filling an array
+
+
+]]>
+
+
+
+ Arrays are ordered. You can also change the order using various
+ sorting functions. See the array
+ functions section for more information. You can count
+ the number of items in an array using the
+ count function.
+
+
+ Sorting an array
+
+
+]]>
+
+
+
+ Because the value of an array can be anything, it can also be
+ another array. This way you can make recursive and
+ multi-dimensional arrays.
+
+
+ Recursive and multi-dimensional arrays
+
+ array ( "a" => "orange",
+ "b" => "banana",
+ "c" => "apple"
+ ),
+ "numbers" => array ( 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6
+ ),
+ "holes" => array ( "first",
+ 5 => "second",
+ "third"
+ )
+ );
+
+// Some examples to address values in the array above
+echo $fruits["holes"][5]; // prints "second"
+echo $fruits["fruits"]["a"]; // prints "orange"
+unset($fruits["holes"][0]); // remove "first"
+
+// Create a new multi-dimensional array
+$juices["apple"]["green"] = "good";
+?>
+]]>
+
+
+
+ You should be aware that array assignment always involves
+ value copying. It also means that the internal array pointer used by
+ current and similar functions is reset.
+ You need to use the reference operator to copy
+ an array by reference.
+
+
+
+]]>
+
+
+
+
+
+
+
diff --git a/language/types/boolean.xml b/language/types/boolean.xml
new file mode 100644
index 0000000000..fc9e251b85
--- /dev/null
+++ b/language/types/boolean.xml
@@ -0,0 +1,168 @@
+
+
+
+ Booleans
+
+
+ This is the easiest type. A boolean expresses a
+ truth value. It can be either &true; or &false;.
+
+
+
+
+ The boolean type was introduced in PHP 4.
+
+
+
+
+ Syntax
+
+ To specify a boolean literal, use either the keyword &true;
+ or &false;. Both are case-insensitive.
+
+
+
+]]>
+
+
+
+
+ Usually you
+ use some kind of operator
+ which returns a boolean value, and then pass it
+ on to a control
+ structure.
+
+
+\n";
+}
+
+// ...because you can simply type
+if ($show_separators) {
+ echo "\n";
+}
+?>
+]]>
+
+
+
+
+
+
+ Converting to boolean
+
+ To explicitly convert a value to boolean, use either
+ the (bool) or the (boolean) 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 boolean argument.
+
+
+ See also Type Juggling.
+
+
+
+ When converting to boolean, the following values
+ are considered &false;:
+
+
+
+ the boolean
+ &false; itself
+
+
+ the integer 0 (zero)
+
+
+ the float
+ 0.0 (zero)
+
+
+ the empty string, and the string
+ "0"
+
+
+ an array
+ with zero elements
+
+
+ an object
+ with zero member variables (PHP 4 only)
+
+
+ the special type NULL (including unset variables)
+
+
+
+ SimpleXML
+ objects created from empty tags
+
+
+
+
+ Every other value is considered &true; (including any
+ resource).
+
+
+ -1 is considered
+ &true;, like any other non-zero (whether negative
+ or positive) number!
+
+
+
+
+
+]]>
+
+
+
+
+
+
+
diff --git a/language/types/float.xml b/language/types/float.xml
new file mode 100644
index 0000000000..c958071fb5
--- /dev/null
+++ b/language/types/float.xml
@@ -0,0 +1,95 @@
+
+
+
+ Floating point numbers
+
+ Floating point numbers (AKA "floats", "doubles" or "real numbers") can be
+ specified using any of the following syntaxes:
+
+
+
+]]>
+
+
+ Formally:
+
+
+
+
+
+ The size of a float is platform-dependent,
+ although a maximum of ~1.8e308 with a precision of roughly 14
+ decimal digits is a common value (that's 64 bit IEEE format).
+
+
+
+ Floating point precision
+
+ It is quite usual that simple decimal fractions like
+ 0.1 or 0.7 cannot be
+ converted into their internal binary counterparts without a
+ little loss of precision. This can lead to confusing results: for
+ example, floor((0.1+0.7)*10) will usually
+ return 7 instead of the expected
+ 8 as the result of the internal representation
+ really being something like 7.9999999999....
+
+
+ This is related to the fact that it is impossible to exactly
+ express some fractions in decimal notation with a finite number
+ of digits. For instance, 1/3 in decimal form
+ becomes 0.3333333. . ..
+
+
+ So never trust floating number results to the last digit and
+ never compare floating point numbers for equality. If you really
+ need higher precision, you should use the arbitrary precision math functions
+ or gmp functions instead.
+
+
+
+
+ Converting to float
+
+
+ For information on when and how strings are converted to floats,
+ see the section titled String
+ conversion to numbers. For values of other types, the conversion
+ is the same as if the value would have been converted to integer
+ and then to float. See the Converting
+ to integer section for more information.
+ As of PHP 5, notice is thrown if you try to convert object to float.
+
+
+
+
+
diff --git a/language/types/integer.xml b/language/types/integer.xml
new file mode 100644
index 0000000000..6c2f78d89b
--- /dev/null
+++ b/language/types/integer.xml
@@ -0,0 +1,261 @@
+
+
+
+ Integers
+
+
+ An integer is a number of the set
+ Z = {..., -2, -1, 0, 1, 2, ...}.
+
+
+
+ See also:
+ Arbitrary length integer / GMP,
+ Floating point numbers, and
+ Arbitrary precision / BCMath
+
+
+
+ Syntax
+
+ Integers can be specified in decimal (10-based), hexadecimal (16-based)
+ or octal (8-based) notation, optionally preceded by a sign (- or +).
+
+
+ If you use the octal notation, you must precede the number with a
+ 0 (zero), to use hexadecimal notation precede
+ the number with 0x.
+
+ Integer literals
+
+
+]]>
+
+
+ Formally the possible structure for integer literals is:
+
+
+
+
+
+ The size of an integer is platform-dependent, although a
+ maximum value of about two billion is the usual value
+ (that's 32 bits signed). PHP does not support unsigned
+ integers.
+ Integer size can be determined from PHP_INT_SIZE,
+ maximum value from PHP_INT_MAX since PHP 4.4.0 and
+ PHP 5.0.5.
+
+
+
+ If an invalid digit is passed to octal integer (i.e. 8 or 9), the rest
+ of the number is ignored.
+
+ Octal weirdness
+
+
+]]>
+
+
+
+
+
+
+
+ Integer overflow
+
+ If you specify a number beyond the bounds of the integer
+ type, it will be interpreted as a float instead. Also, if
+ you perform an operation that results in a number beyond the bounds of
+ the integer type, a float will be returned
+ instead.
+
+
+
+
+]]>
+
+
+
+
+ Unfortunately, there was a bug in PHP so that this
+ does not always work correctly when there are negative numbers
+ involved. For example: when you do -50000 *
+ $million, the result will be
+ -429496728. However, when both operands are
+ positive there is no problem.
+
+
+ This is solved in PHP 4.1.0.
+
+
+
+
+ There is no integer division operator in PHP.
+ 1/2 yields the float
+ 0.5. You can cast the value to
+ an integer to always round it downwards, or you can
+ use the round function.
+
+
+
+]]>
+
+
+
+
+
+
+
+ Converting to integer
+
+ To explicitly convert a value to integer, use either
+ the (int) or the (integer) 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 an integer argument.
+ You can also convert a value to integer with the function
+ intval.
+
+
+ See also type-juggling.
+
+
+
+ From booleans
+
+ &false; will yield
+ 0 (zero), and &true;
+ will yield 1 (one).
+
+
+
+
+ From floating point numbers
+
+ When converting from float to integer, the number will
+ be rounded towards zero.
+
+
+
+ If the float is beyond the boundaries of integer
+ (usually +/- 2.15e+9 = 2^31),
+ the result is undefined, since the float hasn't
+ got enough precision to give an exact integer result.
+ No warning, not even a notice will be issued in this
+ case!
+
+
+
+ Never cast an unknown fraction to integer, as this can
+ sometimes lead to unexpected results.
+
+
+
+]]>
+
+
+
+ See for more information the warning
+ about float-precision.
+
+
+
+
+ From strings
+
+ See String
+ conversion to numbers
+
+
+
+
+ From other types
+
+
+
+ Behaviour of converting to integer is undefined for other
+ types. Currently, the behaviour is the same as if the value
+ was first converted to boolean. However, do
+ not rely on this behaviour, as it can
+ change without notice.
+
+
+
+
+
+
+
+
diff --git a/language/types/null.xml b/language/types/null.xml
new file mode 100644
index 0000000000..64f98dc65f
--- /dev/null
+++ b/language/types/null.xml
@@ -0,0 +1,77 @@
+
+
+
+ NULL
+
+
+ The special &null; value represents
+ that a variable has no value. &null; is the only possible value of type
+ NULL.
+
+
+
+ The null type was introduced in PHP 4.
+
+
+
+ A variable is considered to be &null; if
+
+
+
+ it has been assigned the constant &null;.
+
+
+
+
+ it has not been set to any value yet.
+
+
+
+
+ it has been unset.
+
+
+
+
+
+
+ Syntax
+
+ There is only one value of type &null;, and that is
+ the case-insensitive keyword &null;.
+
+
+
+]]>
+
+
+
+
+ See also is_null and unset.
+
+
+
+
+
diff --git a/language/types/object.xml b/language/types/object.xml
new file mode 100644
index 0000000000..bb1256388b
--- /dev/null
+++ b/language/types/object.xml
@@ -0,0 +1,83 @@
+
+
+
+ Objects
+
+
+ Object Initialization
+
+
+ To initialize an object, you use the new
+ statement to instantiate the object to a variable.
+
+
+
+do_foo();
+?>
+]]>
+
+
+
+
+ For a full discussion, please read the section Classes and Objects.
+
+
+
+
+ Converting to object
+
+
+ If an object is converted to an object, it is not modified. If a value
+ of any other type is converted to an object, a new instance of the
+ stdClass built in class is created. If the value
+ was &null;, the new instance will be empty. Array converts to an object
+ with properties named by array keys and with corresponding values. For
+ any other value, a member variable named scalar will
+ contain the value.
+
+
+scalar; // outputs 'ciao'
+?>
+]]>
+
+
+
+
+
+
+
+
diff --git a/language/types/psuedo-types.xml b/language/types/psuedo-types.xml
new file mode 100644
index 0000000000..9ffa9f09cc
--- /dev/null
+++ b/language/types/psuedo-types.xml
@@ -0,0 +1,167 @@
+
+
+
+ Pseudo-types and variables used in this documentation
+
+
+ mixed
+
+ mixed indicates that a parameter may accept multiple (but not
+ necessarily all) types.
+
+
+ gettype for example will accept all PHP types,
+ while str_replace will accept strings and arrays.
+
+
+
+
+ number
+
+ number indicates that a parameter can be either
+ integer or float.
+
+
+
+
+ callback
+
+ Some functions like call_user_func
+ or usort accept user defined
+ callback functions as a parameter. Callback functions can not only
+ be simple functions but also object methods including static class
+ methods.
+
+
+ A PHP function is simply passed by its name as a string. You can
+ pass any built-in or user defined function. Note that language
+ constructs like
+ array,
+ echo,
+ empty,
+ eval,
+ exit,
+ isset,
+ list,
+ print or
+ unset cannot be called using a callback.
+
+
+ A method of an instantiated object is passed as an array containing
+ an object as the element with index 0 and a method name as the
+ element with index 1.
+
+
+ Static class methods can also be passed without instantiating an
+ object of that class by passing the class name instead of an
+ object as the element with index 0.
+
+
+ Apart from common user-defined function,
+ create_function can be used to create an anonymous
+ callback function.
+
+
+
+
+
+ Callback function examples
+
+
+
+]]>
+
+
+
+
+
+ In PHP4, you will have to use a reference to create a callback that
+ points to the actual object, and not a copy of it. For more details,
+ see References Explained.
+
+
+
+
+
+
+ void
+
+ void in return type means that the return value is
+ useless. void in parameters list means that the
+ function doesn't accept any parameters.
+
+
+
+
+ ...
+
+ $... in function prototypes means
+ and so on.
+ This variable name is used when a function can take an endless number of
+ arguments.
+
+
+
+
+
diff --git a/language/types/resource.xml b/language/types/resource.xml
new file mode 100644
index 0000000000..3a00896315
--- /dev/null
+++ b/language/types/resource.xml
@@ -0,0 +1,81 @@
+
+
+
+ Resource
+
+
+ A resource is a special variable, holding
+ a reference to an external resource. Resources
+ are created and used by special functions.
+ See the appendix
+ for a listing of all these
+ functions and the corresponding resource types.
+
+
+
+
+ The resource type was introduced in PHP 4
+
+
+
+
+ See also get_resource_type.
+
+
+
+ Converting to resource
+
+
+ As resource types hold special handlers to opened
+ files, database connections, image canvas areas and
+ the like, you cannot convert any value to a resource.
+
+
+
+
+ Freeing resources
+
+
+ Due to the reference-counting system introduced
+ with PHP 4's Zend Engine, it is automatically detected
+ when a resource is no longer referred to (just
+ like Java). When this is
+ the case, all resources that were in use for this
+ resource are made free by the garbage collector.
+ For this reason, it is rarely ever necessary to
+ free the memory manually by using some free_result
+ function.
+
+
+ Persistent database links are special, they
+ are not destroyed by the
+ garbage collector. See also the section about persistent
+ connections.
+
+
+
+
+
+
+
+
diff --git a/language/types/string.xml b/language/types/string.xml
new file mode 100644
index 0000000000..6d90ad06e5
--- /dev/null
+++ b/language/types/string.xml
@@ -0,0 +1,729 @@
+
+
+
+ Strings
+
+ A string is series of characters. In PHP,
+ a character is the same as a byte, that is, there are exactly
+ 256 different characters possible. This also implies that PHP
+ has no native support of Unicode. See utf8_encode
+ and utf8_decode for some Unicode support.
+
+
+
+ It is no problem for a string to become very large.
+ There is no practical bound to the size
+ of strings imposed by PHP, so there is no reason at all
+ to worry about long strings.
+
+
+
+ Syntax
+
+ A string literal can be specified in three different
+ ways.
+
+
+
+
+ single quoted
+
+
+
+
+ double quoted
+
+
+
+
+ heredoc syntax
+
+
+
+
+
+
+ Single quoted
+
+ The easiest way to specify a simple string is to
+ enclose it in single quotes (the character ').
+
+
+ To specify a literal single
+ quote, you will need to escape it with a backslash
+ (\), like in many other languages.
+ If a backslash needs to occur before a single quote or at
+ the end of the string, you need to double it.
+ Note that if you try to escape any
+ other character, the backslash will also be printed! So
+ usually there is no need to escape the backslash itself.
+
+
+ In PHP 3, a warning will
+ be issued at the E_NOTICE level when this
+ happens.
+
+
+
+
+ Unlike the two other syntaxes, variables and escape sequences
+ for special characters will not be expanded
+ when they occur in single quoted strings.
+
+
+
+
+
+]]>
+
+
+
+
+
+ Double quoted
+
+ If the string is enclosed in double-quotes ("),
+ PHP understands more escape sequences for special
+ characters:
+
+
+ Escaped characters
+
+
+
+ sequence
+ meaning
+
+
+
+
+ \n
+ linefeed (LF or 0x0A (10) in ASCII)
+
+
+ \r
+ carriage return (CR or 0x0D (13) in ASCII)
+
+
+ \t
+ horizontal tab (HT or 0x09 (9) in ASCII)
+
+
+ \v
+ vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
+
+
+ \f
+ form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
+
+
+ \\
+ backslash
+
+
+ \$
+ dollar sign
+
+
+ \"
+ double-quote
+
+
+ \[0-7]{1,3}
+
+ the sequence of characters matching the regular
+ expression is a character in octal notation
+
+
+
+ \x[0-9A-Fa-f]{1,2}
+
+ the sequence of characters matching the regular
+ expression is a character in hexadecimal notation
+
+
+
+
+
+
+ Again, if you try to escape any other character, the
+ backslash will be printed too!
+ Before PHP 5.1.1, backslash in \{$var} hasn't been
+ printed.
+
+
+ But the most important feature of double-quoted strings
+ is the fact that variable names will be expanded.
+ See string
+ parsing for details.
+
+
+
+
+ Heredoc
+
+ Another way to delimit strings is by using heredoc syntax
+ ("<<<"). One should provide an identifier (followed by new line) after
+ <<<, then the string, and then the
+ same identifier to close the quotation.
+
+
+ The closing identifier must begin in the
+ first column of the line. Also, the identifier used must follow
+ the same naming rules as any other label in PHP: it must contain
+ only alphanumeric characters and underscores, and must start with
+ a non-digit character or underscore.
+
+
+
+
+ It is very important to note that the line with the closing
+ identifier contains no other characters, except
+ possibly a semicolon (;).
+ That means especially that the identifier
+ may not be indented, and there
+ may not be any spaces or tabs after or before the semicolon.
+ It's also important to realize that the first character before
+ the closing identifier must be a newline as defined by your
+ operating system. This is \r on Macintosh
+ for example. Closing delimiter (possibly followed by a semicolon) must
+ be followed by a newline too.
+
+
+ If this rule is broken and the closing identifier is not "clean"
+ then it's not considered to be a closing identifier and PHP
+ will continue looking for one. If in this case a proper closing
+ identifier is not found then a parse error will result with the
+ line number being at the end of the script.
+
+
+ It is not allowed to use heredoc syntax in initializing class members.
+ Use other string syntaxes instead.
+
+ Invalid example
+
+
+]]>
+
+
+
+
+
+
+ Heredoc text behaves just like a double-quoted string, without
+ the double-quotes. This means that you do not need to escape quotes
+ in your here docs, but you can still use the escape codes listed
+ above. Variables are expanded, but the same care must be taken
+ when expressing complex variables inside a heredoc as with
+ strings.
+
+ Heredoc string quoting example
+
+foo = 'Foo';
+ $this->bar = array('Bar1', 'Bar2', 'Bar3');
+ }
+}
+
+$foo = new foo();
+$name = 'MyName';
+
+echo <<foo.
+Now, I am printing some {$foo->bar[1]}.
+This should print a capital 'A': \x41
+EOT;
+?>
+]]>
+
+
+
+
+
+
+ Heredoc support was added in PHP 4.
+
+
+
+
+
+ Variable parsing
+
+ When a string is specified in double quotes or with
+ heredoc, variables are
+ parsed within it.
+
+
+ There are two types of syntax: a
+ simple
+ one and a
+ complex
+ one.
+ The simple syntax is the most common and convenient. It provides a way
+ to parse a variable, an array value, or an
+ object property.
+
+
+ The complex syntax was introduced in PHP 4, and can be recognised
+ by the curly braces surrounding the expression.
+
+
+
+ Simple syntax
+
+ If a dollar sign ($) is encountered, the
+ parser will greedily take as many tokens as possible to form a
+ valid variable name. Enclose the variable name in curly
+ braces if you want to explicitly specify the end of the name.
+
+
+
+
+]]>
+
+
+
+ Similarly, you can also have an array index or an
+ object property parsed. With array indices, the closing square
+ bracket (]) 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.
+
+
+
+
+
+
+ 'red', 'banana' => 'yellow');
+
+// Works but note that this works differently outside string-quotes
+echo "A banana is $fruits[banana].";
+
+// Works
+echo "A banana is {$fruits['banana']}.";
+
+// Works but PHP looks for a constant named banana first
+// as described below.
+echo "A banana is {$fruits[banana]}.";
+
+// Won't work, use braces. This results in a parse error.
+echo "A banana is $fruits['banana'].";
+
+// Works
+echo "A banana is " . $fruits['banana'] . ".";
+
+// Works
+echo "This square is $square->width meters broad.";
+
+// Won't work. For a solution, see the complex syntax.
+echo "This square is $square->width00 centimeters broad.";
+?>
+]]>
+
+
+
+
+ For anything more complex, you should use the complex syntax.
+
+
+
+
+ Complex (curly) syntax
+
+ This isn't called complex because the syntax is complex,
+ but because you can include complex expressions this way.
+
+
+ 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:
+
+
+
+width}00 centimeters broad.";
+
+// Works
+echo "This works: {$arr[4][3]}";
+
+// This is wrong for the same reason as $foo[bar] is wrong
+// outside a string. In other words, it will still work but
+// because PHP first looks for a constant named foo, it will
+// throw an error of level E_NOTICE (undefined constant).
+echo "This is wrong: {$arr[foo][3]}";
+
+// Works. When using multi-dimensional arrays, always use
+// braces around arrays when inside of strings
+echo "This works: {$arr['foo'][3]}";
+
+// Works.
+echo "This works: " . $arr['foo'][3];
+
+echo "You can even write {$obj->values[3]->name}";
+
+echo "This is the value of the var named $name: {${$name}}";
+
+echo "This is the value of the var named by the return value of getName(): {${getName()}}";
+
+echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
+?>
+]]>
+
+
+
+
+
+
+ Functions and method calls inside {$ } work since PHP 5.
+
+
+
+
+ Parsing variables within strings uses more memory than string
+ concatenation. When writing a PHP script in which memory usage is a
+ concern, consider using the concatenation operator (.) rather than
+ variable parsing.
+
+
+
+
+
+
+ String access and modification by character
+
+ Characters within strings may be accessed and modified by specifying the
+ zero-based offset of the desired character after the string
+ using square array-brackets like $str[42] so think of
+ a string as an array of characters.
+
+
+
+ They may also be accessed using braces like $str{42}
+ for the same purpose. However, using square array-brackets is preferred
+ because the {braces} style is deprecated as of PHP 6.
+
+
+
+
+ Some string examples
+
+
+]]>
+
+
+
+
+
+ Accessing by [] or {} to
+ variables of other type silently returns &null;.
+
+
+
+
+
+
+
+ Useful functions and operators
+
+ Strings may be concatenated using the '.' (dot) operator. Note
+ that the '+' (addition) operator will not work for this. Please
+ see String
+ operators for more information.
+
+
+ There are a lot of useful functions for string modification.
+
+
+ See the string functions section
+ for general functions, the regular expression functions for
+ advanced find&replacing (in two tastes:
+ Perl and
+ POSIX extended).
+
+
+ There are also functions for URL-strings,
+ and functions to encrypt/decrypt strings
+ (mcrypt and
+ mhash).
+
+
+ Finally, if you still didn't find what you're looking for,
+ see also the character type functions.
+
+
+
+
+ Converting to string
+
+
+ You can convert a value to a string using the (string)
+ cast, or the strval 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 echo
+ or print functions, or when you compare a variable
+ value to a string. Reading the manual sections on Types and Type Juggling will make
+ the following clearer. See also settype.
+
+
+
+ A boolean &true; value is converted to the string "1",
+ the &false; value is represented as "" (empty string).
+ This way you can convert back and forth between boolean and string values.
+
+
+ An integer or a floating point number (float)
+ is converted to a string representing the number with its digits
+ (including the exponent part for floating point numbers).
+ Floating point numbers can be converted using the exponential notation
+ (4.1E+6).
+
+
+
+ The decimal point character is defined in the script's
+ locale (category LC_NUMERIC).
+ See setlocale.
+
+
+
+ Arrays are always converted to the string "Array",
+ so you cannot dump out the contents of an array with
+ echo or print to see what is inside
+ them. To view one element, you'd do something like
+ echo $arr['foo']. See below for tips on dumping/viewing the
+ entire contents.
+
+
+ Objects in PHP 4 are always converted to the string "Object".
+ 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 get_class.
+ As of PHP 5, __toString() method is used if applicable.
+
+
+ Resources are always converted to strings with the structure
+ "Resource id #1" where 1 is
+ the unique number of the resource assigned by PHP during runtime.
+ If you would like to get the type of the resource, use
+ get_resource_type.
+
+
+ &null; is always converted to an empty string.
+
+
+
+ As you can see above, printing out the arrays, objects or resources does not
+ provide you any useful information about the values themselves. Look at the
+ functions print_r and var_dump
+ for better ways to print out values for debugging.
+
+
+
+ You can also convert PHP values to strings to store them permanently. This
+ method is called serialization, and can be done with the function
+ serialize. You can also serialize PHP values to
+ XML structures, if you have WDDX support
+ in your PHP setup.
+
+
+
+
+ String conversion to numbers
+
+
+ When a string is evaluated as a numeric value, the resulting
+ value and type are determined as follows.
+
+
+ The string will evaluate as a float if it contains any of the
+ characters '.', 'e', or 'E'. Otherwise, it will evaluate as an
+ integer.
+
+
+ The value is given by the initial portion of the string. If the
+ string starts with valid numeric data, this will be the value
+ used. Otherwise, the value will be 0 (zero). Valid numeric data
+ is an optional sign, followed by one or more digits (optionally
+ containing a decimal point), followed by an optional
+ exponent. The exponent is an 'e' or 'E' followed by one or more
+ digits.
+
+
+
+
+]]>
+
+
+
+ For more information on this conversion, see the Unix manual page
+ for strtod(3).
+
+
+ If you would like to test any of the examples in this section,
+ you can cut and paste the examples and insert the following line
+ to see for yourself what's going on:
+
+
+\n";
+?>
+]]>
+
+
+
+
+ Do not expect to get the code of one character by converting it
+ to integer (as you would do in C for example). Use the functions
+ ord and chr to convert
+ between charcodes and characters.
+
+
+
+
+
+
diff --git a/language/types/type-juggling.xml b/language/types/type-juggling.xml
new file mode 100644
index 0000000000..f388253dbe
--- /dev/null
+++ b/language/types/type-juggling.xml
@@ -0,0 +1,261 @@
+
+
+
+ Type Juggling
+
+
+ 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 $var,
+ $var becomes a string. If you then assign an
+ integer value to $var, it becomes an
+ integer.
+
+
+ An example of PHP's automatic type conversion is the addition
+ operator '+'. If any of the operands is a float, then all
+ operands are evaluated as floats, and the result will be a
+ float. Otherwise, the operands will be interpreted as integers,
+ and the result will also be an integer. Note that this does NOT
+ change the types of the operands themselves; the only change is in
+ how the operands are evaluated.
+
+
+
+]]>
+
+
+
+
+
+ If the last two examples above seem odd, see String
+ conversion to numbers.
+
+
+ If you wish to force a variable to be evaluated as a certain type,
+ see the section on Type
+ casting. If you wish to change the type of a variable, see
+ settype.
+
+
+ If you would like to test any of the examples in this section, you
+ can use the var_dump function.
+
+
+
+ The behaviour of an automatic conversion to array is currently
+ undefined.
+
+
+ Also, because PHP supports indexing into strings via offsets using
+ the same syntax as array indexing, the following example holds true
+ for all PHP versions:
+
+
+
+]]>
+
+
+
+
+ See the section titled String
+ access by character for more information.
+
+
+
+
+ Type Casting
+
+
+ Type casting in PHP works much as it does in C: the name of the
+ desired type is written in parentheses before the variable which
+ is to be cast.
+
+
+
+]]>
+
+
+
+
+ The casts allowed are:
+
+
+ (int), (integer) - cast to integer
+
+
+ (bool), (boolean) - cast to boolean
+
+
+ (float), (double), (real) - cast to float
+
+
+ (string) - cast to string
+
+
+ (binary) - cast to binary string (PHP 6)
+
+
+ (array) - cast to array
+
+
+ (object) - cast to object
+
+
+
+
+ (binary) casting and b prefix forward support was added in PHP 5.2.1
+
+
+ Note that tabs and spaces are allowed inside the parentheses, so
+ the following are functionally equivalent:
+
+
+
+]]>
+
+
+ Casting a literal strings and variables to binary strings:
+
+
+
+]]>
+
+
+
+
+
+ Instead of casting a variable to string, you can also enclose
+ the variable in double quotes.
+
+
+
+]]>
+
+
+
+
+
+
+ It may not be obvious exactly what will happen when casting
+ between certain types. For more info, see these sections:
+
+
+
+ Converting to
+ boolean
+
+
+ Converting to
+ integer
+
+
+ Converting to
+ float
+
+
+ Converting to
+ string
+
+
+ Converting to
+ array
+
+
+ Converting to
+ object
+
+
+ Converting to
+ resource
+
+
+
+
+ The type comparison tables
+
+
+
+
+
+
+
+