Forum und email

extends (Επεκτάσεις)

Συχνά χρειάζεστε κλάσεις με παρόμοιες μεταβλητές και συναρτήσεις με άλλες υπάρχουσες κλάσεις. Στην πραγματικότητα, είναι καλή τακτική να ορίζετε μια πρωταρχική κλάση που μπορεί να χρησιμοποιηθεί από όλα τα projects σας και να μπορείτε να προσαρμόζετε αυτή την κλάση στις ανάγκες του κάθε συγκεκριμένου project. Για να το κάνετε αυτό εύκολα, οι κλάσεις μπορούν να είναι επεκτάσεις από άλλες κλάσεις. Η κλάση που έχει επεκταθεί ή έχει προκύψει έχει όλες τις μεταβλητές και τις συναρτήσεις της πρωταρχικής κλάσης (αυτό καλείται 'κληρονομικότητα' παρά το γεγονός ότι κανένας δεν πεθαίνει) και ό,τι έχετε προσθέσει στην επεκταμένη κλάση. Δεν είναι δυνατό να αφαιρέσετε από μια κλάση, δηλαδή, να καταστεί απροσδιόριστη μια υπάρχουσα συνάρτηση ή μεταβλητή. Μια επεκτεταμένη κλάση είναι πάντα εξαρτώμενη από μια κλάση αρχική, συνεπώς, πολλαπλή κληρονομικότητα δεν υποστηρίζεται. Οι κλάσεις επεκτείνονται χρησιμοποιώντας τη λέξη 'extends'.

<?php
class Named_Cart extends Cart
{
    var 
$owner;
  
    function 
set_owner ($name)
    {
        
$this->owner $name;
    }
}
?>

Το παραπάνω ορίζει μια κλάση με το όνομα Named_Cart η οποία έχει όλες τις μεταβλητές και τις συναρτήσεις της Cart, μια επιπλέον μεταβλητή την$owner και μια επιπρόσθετη συνάρτηση την set_owner(). Δημιουργείτε ένα cart με τον συνηθισμένο τρόπο και μπορείτε τώρα να θέσετε και να πάρετε τον owner του cart. Μπορείτε ακόμη να χρησιμοποιήσετε τις κανονικές συναρτήσεις της cart σε προσδιορισμένα carts:

<?php
$ncart 
= new Named_Cart;    // Create a named cart
$ncart->set_owner("kris");  // Name that cart
print $ncart->owner;        // print the cart owners name
$ncart->add_item("10"1);  // (inherited functionality from cart)
?>

Αυτό καλείται επίσης σχέση "γονέα-παιδιού". Δημιουργείτε μια κλάση, τον γονιό, και χρησιμοποιείτε την extends για να δημιουργήσετε μια νέα κλάση βασισμένη στην αρχική κλάση: την κλάση παιδί. Μπορείτε ακόμη να χρησιμοποιήσετε αυτή τη νέα κλάση-παιδί και να δημιουργήσετε ακόμη μια κλάση βασισμένη σ'αυτή την κλάση-παιδί.

Note: Οι κλάσεις πρέπει να ορίζονται πριν χρησιμοποιηθούν! Αν θέλετε την κλάση Named_Cart να είναι επέκταση της Cart, θα πρέπει να ορίσετε την κλάση Cart πρώτα. Αν θέλετε να δημιουργήσετε άλλη μια κλάση, την Yellow_named_cart η οποία βασίζετε στην κλάση Named_Cart πρέπει να ορίσετε την Named_Cart πρώτα. Δηλαδή: η σειρά με την οποία ορίζονται οι κλάσεις είναι σημαντική.