Ðñïóï÷Þ |
Στην PHP 3 και στην PHP 4 οι constructors συμπεριφέρονται διαφορετικά. Στην PHP 4 προτιμούνται τα semantics. |
Οι constructors είναι συναρτήσεις σε μια κλάση που καλούνται αυτόματα όταν δημιοργείτε ένα καινούριο στιγμιότυπο (instance) μιας κλάσης με την new. Στην PHP 3, μια συνάρτηση γίνεται constructor όταν έχει το ίδιο όνομα με την κλάση. Στην PHP 4, μια συνάρτηση γίνεται constructor, όταν έχει το ίδιο όνομα με την κλάση όπως αυτή ορίζεται - η διαφορά είναι μικρή, αλλά σημαντική (δείτε παρακάτω).
<?php |
Το παραπάνω ορίζει την κλάση Auto_Cart η οποία είναι η Cart με επιπλέον έναν constructor ο οποίος αρχικοποιεί το cart με ένα στοιχείο από το άρθρο με νούμερο "10" κάθε φορά που ένα νέο Auto_Cart δημιουργείται με την "new". Οι Constructors μπορούν να πάρουν παραμέτρους και αυτές οι παράμετροι μπορούν να είναι προαιρετικές, γεγονός το οποίο τις κάνει πιο χρήσιμες. Για να αποκτήσουμε τη δυνατότητα να χρησιμοποιούμε την κλάση χωρίς παραμέτρους, όλες οι παράμετροι στους constructors πρέπει να γίνουν προαιρετικές παρέχοντας τις προκαθορισμένες τιμές.
<?php |
Μπορείτε επίσης να χρησιμοποιήσετε τον τελεστή @ για να σταματήσετε (mute) την εμφάνιση λαθών που συμβαίνουν στους constructor, π.χ. @new.
Ðñïóï÷Þ |
Στην PHP 3, οι προκύπτουσες κλάσεις και οι constructors έχουν ένα πλήθος περιορισμών. Τα ακόλουθα παραδείγματα θα πρέπει να διαβαστούν προσεκτικά για να γίνουν κατανοητοί αυτοί οι περιορισμοί. |
<?php |
Στην PHP 3, δεν καλείται κανένας constructor στο παραπάνω παράδειγμα. Ο κανόνας στην PHP 3 είναι: 'Ένας constructor είναι μια συνάρτηση του ίδιου ονόματος με την κλάση.'. Το όνομα της κλάσης είναι B, και δεν υπάρχει συνάρτηση με το όνομα B() στην κλαση B. Τίποτα δεν συμβαίνει.
Αυτό έχει διορθωθεί στην PHP 4 εισάγοντας έναν άλλο κανόνα: Αν μια κλάση δεν έχει constructor, ο constructor της βασικής κλάσης καλείται, αν αυτός υπάρχει. Το παραπάνω παράδειγμα θα είχε εκτυπώσει 'I am the constructor of A.<br>' στην PHP 4.
<?php |
Στην PHP 3, η συνάρτηση B() στην κλαση A θα γίνει ξαφνικά constructor στην κλάση B, παρόλο που δεν υπήρξε ποτέ η πρόθεση να γίνει αυτό. Ο κανόνας στην PHP 3 είναι: 'Ένας constructor είναι μια συνάρτηση με το ίδιο όνομα με την κλάση.'. Η PHP 3 δεν ενδιαφέρεται αν η συνάρτηση ορίζεται στην κλάση B, ή αν έχει κληρονομηθεί.
Αυτό έχει διορθωθεί στην PHP 4 αλλάζοντας τον κανόνα σε: 'Ένας constructor είναι μια συνάρτηση του ίδιου ονόματος με την κλάση στην οποία ορίστηκε.'. Συνεπώς στην PHP 4, η κλάση B δε θα έχει συνάρτηση για δημιουργία constructor από μόνη της και ο constructor της βασικής κλάσης θα κληθεί, εκτυπώνοντας το 'I am the constructor of A.<br>'.
Ðñïóï÷Þ |
Ούτε η PHP 3 ούτε η PHP 4 καλούν constructors της βασικής κλάσης αυτόματα από ένα constructor κλάσης που έχει παραχθεί. Είναι δική σας ευθύνη να περάσετε την κλήση στους constructors όπου χρειάζεται. |
Óçìåßùóç: Δεν υπάρχουν destructors στην PHP 3 ή στην PHP 4. Μπορείτε να χρησιμοποιήσετε την register_shutdown_function() αντ'αυτού προκειμένου να προσομοιώσετε το αποτέλεσμα των destructors.
Οι Destructors είναι συναρτήσεις που καλούνται αυτόματα όταν ένα αντικείμενο καταστρέφεται, είτε με την unset() ή απλά βγάζοντας εκτός εμβέλειας. Δεν υπάρχουν destructors στην PHP.