Η δημιουργία references μέσα σε έναν constructor μπορεί να οδηγήσει σε μπερδεμένα αποτελέσματα. Αυτό το τμήμα του εγχειριδίου θα σας βοηθήσει να αποφύγετε τέτοια προβλήματα.
<?php |
Αν ελένξουμε αν υπάρχει διαφορά μεταξύ της $bar1 η οποία δημιουργήθηκε χρησιμοποιώντας ένα αντίγραφο του τελεστή = και της $bar2 που δημιουργήθηκε χρησιμοποιώντας μια αναφορά με τον τελεστή =&...
<?php |
Με την πρώτη ματιά δεν υπάρχει διαφορά, αλλά στην πραγματικότητα υπάρχει μια πολύ σημαντική: η $bar1 και η $globalref[0] ΔΕΝ_αλληλοαναφέρονται, ΔΕΝ είναι η ίδια μεταβλητή. Αυτό συμβαίνει γιατί η "new" δεν επιστρέψει μια αναφορά πάντα, αλλά αντίθετα επιστρέφει ένα αντίγραφο.
Óçìåßùóç: Δεν υπάρχει χάσιμο στην απόδοση (αφού η PHP 4 και μετά χρησιμοποιούν μετρητή αναφοράς) επιστρέφοντας αντίγραφα αντί για αναφορές. Αντιθέτως είναι συχνά καλύτερο να δουλεύουμε με αντίγραφα αντί για αναφορές, επειδή η δημιουργία αναφορών παίρνει κάποιο χρόνο ενώ η δημιουργία αντίγραφων ιδεατά δε θέλει καθόλου χρόνο (εκτός και αν ένα από αυτά είναι ένας μεγάλος πίνακας ή αντικείμενο και ένα από αυτά αλλάζει καθώς και τα άλλα στη συνέχεια, τότε θα ήταν σοφότερο να χρησιμοποιήσουμε αναφορές για να τα αλλάξουμε όλα συγχρόνως).
<?php |
Ακόμη ένα τελικό παράδειγμα, προσπαθήστε να το κατανοήσετε.
<?php |