Εισαγωγή
Οι συναρτήσεις αυτές σας επιτρέπουν να ανακτήσετε πληροφορίες
για τις κλάσεις και τα στιγμιότυπα τους. Μπορείτε να ανακτήσετε
το όνομα της κλάσης στην οποία ανήκει ένα αντικείμενο, καθώς και
τις μεταβλητές και τις μεθόδους του. Χρησιμοποιώντας αυτές τις
συναρτήσεις, μπορείτε να μάθετε όχι μόνο την κλάση ενός αντικειμένου,
αλλά και τις υπερκλάσεις του (από ποιά κλάση κληρονομεί
το αντικείμενο).
Απαιτήσεις
Δεν χρειάζονται εξωτερικές βιβλιοθήκες για να γίνει 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 |
|