Forum und email

::

Caution

Το ακόλουθο ισχύει μόνο στην PHP 4.

Μερικές φορές είναι χρήσιμο να αναφερόμαστε σε συναρτήσεις και μεταβλητές των βασικών κλάσεων ή να αναφερόμαστε σε συναρτήσεις κλάσεων που δεν έχουν ακόμη στιγμιότυπο. Ο τελεστής :: χρησιμοποιείται γι'αυτό το σκοπό.

<?php
class A
{
    function 
example()
    {
        echo 
"I am the original function A::example().<br>\n";
    }
}

class 
extends A
{
    function 
example()
    {
        echo 
"I am the redefined function B::example().<br>\n";
        
A::example();
    }
}

// there is no object of class A.
// this will print
//   I am the original function A::example().<br>
A::example();

// create an object of class B.
$b = new B;

// this will print 
//   I am the redefined function B::example().<br>
//   I am the original function A::example().<br>
$b->example();
?>

Το παραπάνω παράδειγμα καλεί τη συνάρτηση example() στην κλάση A, αλλά δεν υπάρχει αντικείμενο της κλάσης A, συνεπώς δεν μπορούμε να γράψουμε $a->example() ή κάτι αντίστοιχο. Αντιθέτως καλούμε την example() ως 'συνάρτηση κλάσης', δηλαδή, σαν συνάρτηση της ίδιας της κλάσης, όχι ως αντικείμενο της κλάσης.

Υπάρχουν συναρτήσεις κλάσεων, αλλά δεν υπάρχουν μεταβλητές κλάσεων. Στην πραγματικότητα, δεν υπάρχει κανένα αντικείμενο τη στιγμή της κλήσης. Συνεπώς, μια συνάρτηση κλάσης μπορεί να μην χρησιμοποιεί καμία μεταβλητή αντικειμένου (αλλά μπορεί να χρησιμοποιεί τοπικές και global μεταβλητές), και μπορεί να μην χρησιμοποιεί το $this καθόλου.

Στο παραπάνω παράδειγμα, η κλάση B επαναπροσδιορίζει τη συνάρτηση example(). Ο αρχικός ορισμός της κλάσης Α επισκιάζεται και δεν είναι πλέον διαθέσιμος, εκτός και αν αναφέρεστε συγκεκριμένα στην υλοποίηση της example() στην κλάση Α χρησιμοποιώντας τον τελεστή ::. Γράψτε A::example() για να το κάνετε αυτό (στην πραγματικότητα, θα έπρεπε να γράψετε parent::example(), όπως θα δείτε στο επόμενο τμήμα).

Σ'αυτό υπάρχει ένα τρέχον αντικείμενο το οποίο μπορεί να έχει μεταβλητές αντικειμένων. Συνεπώς, όταν χρησιμοποιείται ΜΕΣΑ από μια συνάρτηση αντικειμένου, μπορείτε να χρησιμοποιείτε την $thisκαι τις μεταβλητές αντικειμένων.