Οι συναρτήσεις αυτές σας επιτρέπουν να ανακτήσετε πληροφορίες
για τις κλάσεις και τα στιγμιότυπα τους. Μπορείτε να ανακτήσετε
το όνομα της κλάσης στην οποία ανήκει ένα αντικείμενο, καθώς και
τις μεταβλητές και τις μεθόδους του. Χρησιμοποιώντας αυτές τις
συναρτήσεις, μπορείτε να μάθετε όχι μόνο την κλάση ενός αντικειμένου,
αλλά και τις υπερκλάσεις του (από ποιά κλάση κληρονομεί
το αντικείμενο).
Δεν χρειάζονται εξωτερικές βιβλιοθήκες για να γίνει build αυτή η επέκταση.
Δεν χρειάζεται εγκατάσταση για αυτές τις συναρτήσεις, είναι μέρος του πυρήνα της PHP.
Αυτή η επέκταση δεν έχει directives ρύθμισης ορισμένα στο php.ini.
Αυτή η επέκταση δεν έχει resource τύπους ορισμένους.
Αυτή η επέκταση δεν έχει σταθερές ορισμένες.
Σε αυτό το παράδειγμα, πρώτα ορίζουμε μια κλάση-βάση και μετά
μια κλάση κληρονόμο. Η κλάση-βάση περιγράφει ένα γενικό λαχανικό,
αν είναι βρώσιμο ή όχι, και το χρώμα του. Η κλάση κληρονόμος
Spinach προσθέτει μια μέθοδο για το μαγείρεμα
και ακόμα μια που επιστρέφει αν είναι μαγειρεμένο.
ÐáñÜäåéãìá 1. classes.inc
<?php
// κλάση-βάση με μεταβλητές και μεθόδους class Vegetable {
var $edible; var $color;
function Vegetable($edible, $color="green") { $this->edible = $edible; $this->color = $color; }
function is_edible() { return $this->edible; }
function what_color() { return $this->color; } } // τέλος κλάσης Vegetable
// επέκταση κλάσης-βάσης class Spinach extends Vegetable {
var $cooked = false;
function Spinach() { $this->Vegetable(true, "green"); }
function cook_it() { $this->cooked = true; }
function is_cooked() { return $this->cooked; } } // τέλος κλάσης Spinach
?>
|
|
Ακολούθως δημιουργούμε δυο στιγμιότυπα από αυτές τις κλάσεις
και τυπώνουμε πληροφορίες για αυτά, συμπεριλαμβανομένης της
υπερκλάσης τους. Ορίζουμε επίσης μερικές βοηθητικές συναρτήσεις,
κυρίως για να είναι καλαισθητικό το τύπωμα των μεταβλητών.
ÐáñÜäåéãìá 2. test_script.php
<pre> <?php
include "classes.inc";
// βοηθητικές συναρτήσεις
function print_vars($obj) { $arr = get_object_vars($obj); while (list($prop, $val) = each($arr)) echo "\t$prop = $val\n"; }
function print_methods($obj) { $arr = get_class_methods(get_class($obj)); foreach ($arr as $method) echo "\tfunction $method()\n"; }
function class_parentage($obj, $class) { if (is_subclass_of($GLOBALS[$obj], $class)) { echo "Object $obj belongs to class " . get_class($$obj); echo " a subclass of $class\n"; } else { echo "Object $obj does not belong to a subclass of $class\n"; } }
// δημιουργούμε 2 στιγμιότυπα
$veggie = new Vegetable(true, "blue"); $leafy = new Spinach();
// τυπώνουμε πληροφορίες για αυτά τα στιγμιότυπα echo "veggie: CLASS " . get_class($veggie) . "\n"; echo "leafy: CLASS " . get_class($leafy); echo ", PARENT " . get_parent_class($leafy) . "\n";
// τυπώνουμε τις μεταβλητές της κλάσης-βάσης echo "\nveggie: Properties\n"; print_vars($veggie);
// και τις μεθόδους της κλάσης-κληρονόμου echo "\nleafy: Methods\n"; print_methods($leafy);
echo "\nParentage:\n"; class_parentage("leafy", "Spinach"); class_parentage("leafy", "Vegetable"); ?> </pre>
|
Μια σημαντική παρατήρηση σχετικά με το πιο πάνω παράδειγμα
είναι ότι το αντικείμενο $leafy είναι
ένα στιγμιότυπο της κλάσης Spinach, η
οποία είναι υποκλάση του Vegetable,
συνεπώς το τελευταίο μέρος του script θα τυπώσει:
[...]
Parentage:
Object leafy does not belong to a subclass of Spinach
Object leafy belongs to class spinach a subclass of Vegetable |
|