Forum und email

Class/Object συναρτήσεις

Εισαγωγή

Οι συναρτήσεις αυτές σας επιτρέπουν να ανακτήσετε πληροφορίες για τις κλάσεις και τα στιγμιότυπα τους. Μπορείτε να ανακτήσετε το όνομα της κλάσης στην οποία ανήκει ένα αντικείμενο, καθώς και τις μεταβλητές και τις μεθόδους του. Χρησιμοποιώντας αυτές τις συναρτήσεις, μπορείτε να μάθετε όχι μόνο την κλάση ενός αντικειμένου, αλλά και τις υπερκλάσεις του (από ποιά κλάση κληρονομεί το αντικείμενο).

Απαιτήσεις

Δεν χρειάζονται εξωτερικές βιβλιοθήκες για να γίνει build αυτή η επέκταση.

Εγκατάσταση

Δεν χρειάζεται εγκατάσταση για αυτές τις συναρτήσεις, είναι μέρος του πυρήνα της PHP.

Ρυθμίσεις κατά την εκτέλεση

Αυτή η επέκταση δεν έχει directives ρύθμισης ορισμένα στο php.ini.

Τύποι Πόρων

Αυτή η επέκταση δεν έχει resource τύπους ορισμένους.

Προκαθορισμένες Σταθερές

Αυτή η επέκταση δεν έχει σταθερές ορισμένες.

Παραδείγματα

Σε αυτό το παράδειγμα, πρώτα ορίζουμε μια κλάση-βάση και μετά μια κλάση κληρονόμο. Η κλάση-βάση περιγράφει ένα γενικό λαχανικό, αν είναι βρώσιμο ή όχι, και το χρώμα του. Η κλάση κληρονόμος Spinach προσθέτει μια μέθοδο για το μαγείρεμα και ακόμα μια που επιστρέφει αν είναι μαγειρεμένο.

Example#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

?>

Ακολούθως δημιουργούμε δυο στιγμιότυπα από αυτές τις κλάσεις και τυπώνουμε πληροφορίες για αυτά, συμπεριλαμβανομένης της υπερκλάσης τους. Ορίζουμε επίσης μερικές βοηθητικές συναρτήσεις, κυρίως για να είναι καλαισθητικό το τύπωμα των μεταβλητών.

Example#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

Table of Contents

  • call_user_method_array — Καλεί μια μέθοδο με ένα array από παραμέτρους [deprecated]
  • call_user_method — Καλεί μια μέθοδο ενός αντικειμένου [deprecated]
  • class_exists — Ελέγχει εάν η κλάση έχει οριστεί
  • get_class_methods — Επιστρέφει ένα array με τα ονόματα των μεθόδων της κλάσης
  • get_class_vars — Επιστρέφει ένα array με τις προκαθορισμένες μεταβλητές της κλάσης
  • get_class — Επιστρέφει το όνομα της κλάσης ενός αντικειμένου
  • get_declared_classes — Επιστρέφει ένα array με τα ονόματα των κλάσεων που έχουν οριστεί
  • get_declared_interfaces — Returns an array of all declared interfaces
  • get_object_vars — Επιστρέφει ένα associative array με τις μεταβλητές του αντικειμένου
  • get_parent_class — Επιστρέφει το όνομα της υπερκλάσης για το αντικείμενο ή την κλάση
  • interface_exists — Checks if the interface has been defined
  • is_a — Επιστρέφει TRUE εάν το αντικείμενο είναι αυτής της κλάσης ή εάν αυτή η κλάση είναι υπερκλάση του αντικειμένου.
  • is_subclass_of — Επιστρέφει TRUE εάν αυτή η κλάση είναι υπερκλάση του αντικειμένου
  • method_exists — Ελέγχει εάν η μέθοδος έχει οριστεί στην κλάση
  • property_exists — Checks if the object or class has a property