Είσαι αντιμέτωπος με την πρόκληση να μάθεις τα θεμέλια του αντικειμενοστραφούς προγραμματισμού σε PHP; Στο κέντρο αυτής της θεματικής βρίσκονται οι ειδικές αναφορές $this και self. Αυτές οι δύο λέξεις-κλειδιά είναι σημαντικές για την αλληλεπίδραση με αντικείμενα και κλάσεις στην PHP, καθώς ελέγχουν την επικοινωνία και την πρόσβαση σε μεταβλητές και σταθερές στιγμής. Ας εξερευνήσουμε μαζί τις διακρίσεις και τη χρήση αυτών των εννοιών.
Σημαντικότερα ευρήματα
- $this είναι μια αναφορά στο τρέχον αντικείμενο και χρησιμοποιείται σε μεθόδους στιγμής.
- self αναφέρεται στην τρέχουσα κλάση και χρησιμοποιείται για την πρόσβαση σε στατικές ιδιότητες και μεθόδους καθώς και σταθερές.
- Η διαφορά μεταξύ $this και self είναι θεμελιώδης για την κατανόηση του αντικειμενοστραφούς προγραμματισμού στην PHP.
Κατανοώντας την αναφορά $this
Ας αρχίσουμε με τη λέξη-κλειδί $this. $this είναι μια ειδική μεταβλητή που αναφέρεται στο τρέχον αντικείμενο. Όταν έχεις πρόσβαση σε $this μέσα σε μια μέθοδο στιγμής, μπορείς να έχεις πρόσβαση σε όλες τις μεταβλητές και μεθόδους αυτού του συγκεκριμένου αντικειμένου.

Να υποθέσουμε ότι έχεις μια κλάση Βάση Δεδομένων που την instantiate. Μέσα σε μια μέθοδο αυτής της κλάσης, μπορείς για παράδειγμα να έχεις πρόσβαση σε μεταβλητές στιγμής όπως Χρήστης ή Κωδικός. Αυτό γίνεται μέσω του $this->Χρήστης ή $this->Κωδικός. Αυτές οι μεταβλητές υπάρχουν μόνο στο πλαίσιο του συγκεκριμένου αντικειμένου, γι' αυτό και το $this είναι κρίσιμο.
Είναι σημαντικό να γνωρίζεις ότι το $this αποτελεί μια καθολική αναφορά που πάντα δείχνει στο τρέχον αντικείμενο. Αν υπάρχουν άλλα αντικείμενα, το $this αναφέρεται στο αντίστοιχο αντικείμενο με βάση το πλαίσιο στο οποίο βρίσκεται ο κώδικας.
Η λέξη-κλειδί self σε λεπτομέρειες
Η λέξη-κλειδί self, από την άλλη πλευρά, δεν περιορίζεται σε μια στιγμή. Αναφέρεται στην ίδια την κλάση, κάτι που σου επιτρέπει να έχεις πρόσβαση σε στατικές ιδιότητες και σταθερές της κλάσης. Για άλλη μια φορά, εξετάζουμε την κλάση Βάση Δεδομένων. Να υποθέσουμε ότι έχεις ορίσει μια σταθερά μέσα σε αυτή την κλάση. Μπορείς να έχεις πρόσβαση σε αυτή τη σταθερά χρησιμοποιώντας το self::Σταθερά.

Σημείωσε ότι το self είναι κυρίως χρήσιμο για στατικές μεθόδους και ιδιότητες. Τέτοιες μεταβλητές είναι διαθέσιμες μία φορά για την κλάση συνολικά, όχι για κάθε μεμονωμένο αντικείμενο. Αυτό αποτελεί μια κεντρική διαφορά από τις μεταβλητές στιγμής.
Φυσικά, υπάρχει και η περίπτωση όπου θέλεις να έχεις πρόσβαση σε στατικές μεθόδους ή σταθερές μέσα από μια μέθοδο της κλάσης. Σε αυτή την περίπτωση χρησιμοποιείς το self::Μέθοδος(), για να διασφαλίσεις ότι η πρόσβαση πραγματοποιείται μέσω της κλάσης και όχι μέσω μιας στιγμής.

Κάνοντας ένα πρακτικό παράδειγμα
Φαντάσου ότι θέλεις να δημιουργήσεις μια κλάση SIS. Εδώ είναι ένα απλό παράδειγμα για να δείξεις τη χρήση και των δύο αναφορών.

Μέσα σε αυτή την κλάση, θα μπορούσαμε να ορίσουμε στατικές ιδιότητες και μεθόδους. Πες ότι έχεις μια μέθοδο getName() που χρησιμοποιεί μια μεταβλητή στιγμής name. Για να έχεις πρόσβαση σε αυτή τη μεταβλητή στιγμής, θα χρησιμοποιήσεις το $this->name.

Ωστόσο, για να έχεις πρόσβαση σε μια σταθερά KEY_PATH που είναι ορισμένη στην κλάση, θα χρησιμοποιήσεις το self::KEY_PATH. Αυτό διασφαλίζει ότι όταν έχεις πρόσβαση σε σταθερές, δεν θα προκύψει σύγκρουση στιγμής.
Τέλος, με ένα echo, θα δείξεις ότι οι αναφορές λειτουργούν. Μπορείς να εκτυπώσεις τόσο τις μεταβλητές στιγμής όσο και τις σταθερές τιμές χωρίς κανένα πρόβλημα, για να αποδείξεις ότι αναφέρονται σωστά.

Σύνοψη – Κατανόηση του $this και self στην PHP
Στην σημερινή ανάρτηση έχεις μάθει τα θεμέλια της χρήσης και των διαφορών μεταξύ $this και self στον αντικειμενοστραφή προγραμματισμό με PHP. Ενώ το $this αναφέρεται ειδικά στο τρέχον αντικείμενο, το self στοχεύει στην ίδια την κλάση. Αυτές οι έννοιες είναι θεμελιώδεις για την αποτελεσματική ανάπτυξη στην PHP.
Συχνές Ερωτήσεις
Ποια είναι η διαφορά μεταξύ $this και self;$this αναφέρεται στο τρέχον αντικείμενο, ενώ self αναφέρεται στην ίδια την κλάση.
Πότε πρέπει να χρησιμοποιήσω το $this;Χρησιμοποίησε το $this όταν θέλεις να έχεις πρόσβαση σε μεταβλητές ή μεθόδους στιγμής.
Πότε είναι χρήσιμο το self;Το self είναι χρήσιμο όταν θέλεις να έχεις πρόσβαση σε στατικές ιδιότητες ή σταθερές της κλάσης.
Υπάρχει ειδική περίπτωση για το self;Ναι, το self είναι χρήσιμο για να έχεις πρόσβαση σε μέλη της κλάσης μέσα από στατικές μεθόδους.
Πώς μπορώ να βεβαιωθώ ότι έχω πρόσβαση σωστά σε μεταβλητές στιγμής;Χρησιμοποίησε $this->όνομαΜεταβλητής για να διασφαλίσεις ότι έχεις πρόσβαση στις συγκεκριμένες τιμές στιγμής.