diff --git a/language/oop.xml b/language/oop.xml index cc4784b54f..5d0da21d93 100644 --- a/language/oop.xml +++ b/language/oop.xml @@ -1,5 +1,5 @@ - + Classes and Objects @@ -8,7 +8,8 @@ A class is a collection of variables and functions working with these variables. A class is defined using the following syntax: - + + - + - The following cautionary notes are valid for PHP 4. + You can NOT break up a class definition into + multiple files, or multiple PHP blocks. The following will not work: + + + + + +]]> + + + + + + + The following cautionary notes are valid for PHP 4. + + The name stdClass is used interally by Zend and is reserved. You cannot have a class named stdClass in PHP. + + The function names __sleep and __wakeup are magical in PHP classes. You @@ -66,7 +93,9 @@ class Cart classes unless you want the magic functionality associated with them. See below for more information. + + PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with @@ -74,16 +103,15 @@ class Cart - - - In PHP 4, only constant initializers for var - variables are allowed. To initialize variables with non-constant - values, you need an initialization function which is called - automatically when an object is being constructed from the - class. Such a function is called a constructor (see below). - - - + + In PHP 4, only constant initializers for var + variables are allowed. To initialize variables with non-constant + values, you need an initialization function which is called + automatically when an object is being constructed from the + class. Such a function is called a constructor (see below). + + + ]]> - - - + + Classes are types, that is, they are blueprints for actual @@ -137,29 +164,29 @@ $another_cart->add_item("0815", 3); - This creates the objects $cart and $another_cart, both of - the class Cart. The function add_item() of the $cart object - is being called to add 1 item of article number 10 to the - $cart. 3 items of article number 0815 are being added to - $another_cart. + This creates the objects $cart and + $another_cart, both of the class Cart. The function + add_item() of the $cart object is being called to add 1 + item of article number 10 to the $cart. 3 items of + article number 0815 are being added to $another_cart. - Both, $cart and $another_cart, have functions add_item(), - remove_item() and a variable items. These are distinct - functions and variables. You can think of the objects as - something similar to directories in a filesystem. In a - filesystem you can have two different files README.TXT, as - long as they are in different directories. Just like with - directories where you'll have to type the full pathname in - order to reach each file from the toplevel directory, you - have to specify the complete name of the function you want - to call: In PHP terms, the toplevel directory would be the - global namespace, and the pathname separator would be ->. - Thus, the names $cart->items and $another_cart->items - name two different variables. Note that the variable is - named $cart->items, not $cart->$items, that is, a - variable name in PHP has only a single dollar sign. + Both, $cart and $another_cart, have + functions add_item(), remove_item() and a variable items. These are + distinct functions and variables. You can think of the objects as + something similar to directories in a filesystem. In a filesystem you can + have two different files README.TXT, as long as they are in different + directories. Just like with directories where you'll have to type the + full pathname in order to reach each file from the toplevel directory, you + have to specify the complete name of the function you want to call: In PHP + terms, the toplevel directory would be the global namespace, and the + pathname separator would be ->. Thus, the names + $cart->items and + $another_cart->items name two different variables. + Note that the variable is named $cart->items, not + $cart->$items, that is, a variable name in PHP has + only a single dollar sign. @@ -182,17 +209,19 @@ $cart->$myvar = array("10" => 1); - Within a class definition, you do not know under which name the object will - be accessible in your program: at the time the Cart class was - written, it was unknown that the object will be named $cart or - $another_cart later. Thus, you cannot write $cart->items within - the Cart class itself. Instead, in order to be able to access it's own - functions and variables from within a class, one can use the - pseudo-variable $this which can be read as 'my own' or - 'current object'. Thus, '$this->items[$artnr] += $num' can - be read as 'add $num to the $artnr counter of my own items - array' or 'add $num to the $artnr counter of the items array - within the current object'. + Within a class definition, you do not know under which name the object + will be accessible in your program: at the time the Cart class was + written, it was unknown that the object will be named + $cart or $another_cart later. Thus, + you cannot write $cart->items within the Cart class + itself. Instead, in order to be able to access it's own functions and + variables from within a class, one can use the pseudo-variable + $this which can be read as 'my own' or 'current + object'. Thus, '$this->items[$artnr] += + $num' can be read as 'add $num to + the $artnr counter of my own items array' or 'add + $num to the $artnr counter of the + items array within the current object'. @@ -242,11 +271,11 @@ class Named_Cart extends Cart - This defines a class Named_Cart that has all variables and - functions of Cart plus an additional variable $owner and an - additional function set_owner(). You create a named cart the usual - way and can now set and get the carts owner. You can still use - normal cart functions on named carts: + This defines a class Named_Cart that has all variables and functions of + Cart plus an additional variable $owner and an + additional function set_owner(). You create a named cart the usual way and + can now set and get the carts owner. You can still use normal cart + functions on named carts: @@ -552,7 +581,7 @@ $b->example(); In fact, there is no object at all at the time of the call. Thus, a class function may not use any object variables (but it can use local and global variables), and it may no use - $this at all. + $this at all. @@ -566,9 +595,9 @@ $b->example(); - In this context, there is a current object and it may - have object variables. Thus, when used from WITHIN an - object function, you may use $this and object variables. + In this context, there is a current object and it may have object + variables. Thus, when used from WITHIN an object function, you may use + $this and object variables. @@ -656,16 +685,15 @@ $b->example(); - In order to be able to unserialize an - object, the class of that object needs to be defined. That - is, if you have an object $a of class A on page1.php and - serialize this, you'll get a string that refers to class A - and contains all values of variabled contained in $a. If - you want to be able to unserialize this on page2.php, - recreating $a of class A, the definition of class A must - be present in page2.php. This can be done for example - by storing the class defintion of class A in an include - file and including this file in both page1.php and page2.php. + In order to be able to unserialize an object, the + class of that object needs to be defined. That is, if you have an object + $a of class A on page1.php and serialize this, you'll + get a string that refers to class A and contains all values of variabled + contained in $a. If you want to be able to unserialize + this on page2.php, recreating $a of class A, the + definition of class A must be present in page2.php. This can be done for + example by storing the class defintion of class A in an include file and + including this file in both page1.php and page2.php. @@ -731,10 +759,10 @@ $b->example(); - So if in the example above $a became part of a session by - running session_register("a"), you should - include the file classa.inc on all of your - pages, not only page1.php and page2.php. + So if in the example above $a became part of a session + by running session_register("a"), you should include the + file classa.inc on all of your pages, not only page1.php + and page2.php.