⊗ppOpTrInr 77 of 107 menu

Traits στην αντικειμενοστρεφή προγραμματισμό σε PHP

Όπως ήδη γνωρίζετε, στην PHP δεν μπορείτε να κληρονομήσετε από πολλαπλές κλάσεις ταυτόχρονα, μόνο από μία. Νωρίτερα είχαμε ήδη δει μια λύση σε αυτό το πρόβλημα: αντί για κληρονομικότητα, χρησιμοποιήστε αντικείμενα μερικών κλάσεων μέσα σε άλλες.

Στην PHP υπάρχει και ένας άλλος τρόπος. Αυτός συνίσταται στη χρήση traits. Ένα trait αντιπροσωπεύει ένα σύνολο ιδιοτήτων και μεθόδων που μπορούν να συμπεριληφθούν σε μια άλλη κλάση. Σε αυτή την περίπτωση, οι ιδιότητες και οι μέθοδοι του trait θα γίνουν αντιληπτές από την κλάση σαν δικές της.

Η σύνταξη ενός trait είναι η ίδια με αυτή μιας κλάσης, με την εξαίρεση ότι το όνομα του trait πρέπει να δηλωθεί χρησιμοποιώντας τη λέξη-κλειδί trait.

Δεν μπορείτε να δημιουργήσετε ένα στιγμιότυπο ενός trait - τα traits προορίζονται μόνο για σύνδεση σε άλλες κλάσεις. Η ίδια η σύνδεση πραγματοποιείται με την εντολή use, μετά από την οποία ακολουθεί, διαχωρισμένο με κενό, το όνομα του trait που συνδέεται. Αυτή η εντολή γράφεται στην αρχή της κλάσης.

Ας δούμε την εφαρμογή των traits με ένα πρακτικό παράδειγμα. Ας υποθέσουμε ότι μας δίνεται αυτό το trait Helper, που περιέχει τις ιδιωτικές ιδιότητες name και age, καθώς και τους getters τους:

<?php trait Helper { private $name; private $age; public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

Ας υποθέσουμε ότι έχουμε επίσης αυτή την κλάση User, στον κατασκευαστή της οποίας ορίζονται οι ιδιότητες name και age:

<?php class User { public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Ας προσθέσουμε τώρα getters για τις ιδιότητες της κλάσης μας User. Μόνο που δεν θα τις γράψουμε στην ίδια την κλάση, αλλά απλά θα συνδέσουμε το trait Helper, στο οποίο αυτές οι μέθοδοι έχουν ήδη υλοποιηθεί:

<?php class User { use Helper; // συνδέουμε το trait public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } ?>

Μετά τη σύνδεση του trait, στην κλάση μας θα εμφανιστούν οι μέθοδοι και οι ιδιότητες αυτού του trait. Σε αυτή την περίπτωση θα αναφερόμαστε σε αυτές σαν να ήταν μέθοδοι και ιδιότητες της ίδιας της κλάσης:

<?php $user = new User('john', 30); echo $user->getName(); // θα εμφανίσει 'john' echo $user->getAge(); // θα εμφανίσει 30 ?>

Υλοποιήστε την κλάση City με ιδιότητες name, age, population και getters για αυτές. Αφήστε την κλάση μας για συντομία του κώδικά της να χρησιμοποιεί το trait Helper που έχουμε ήδη δημιουργήσει.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη