Προς το περιεχόμενο

Singleton (::) σε Php oop


antonisid

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα,

 

Προσπαθώ να καταλάβω πως χρησιμεύει και πότε χρησιμοποιείται στον αντικειμενοστραφή και συγκεκριμένα σε Php οι άνω κάτω τελείες ή με την αγγλική ορολογία Singleton.Απ'τα παραδείγματα που έχω δει κυρίως εμφανίζεται σε κλάσεις που συνδέουν την βάση δεδομένων.Επίσης,αν κατάλαβα καλά δημιουργούν το αντικείμενο μέσα στην class χωρίς να χρειάζεται να γράψεις πχ $const=new User; (έστω ότι η User είναι η class) ?

 

Θα μπορούσε να γράψει κάποιος ένα πολύ μικρό παράδειγμα για να καταλάβω τι γίνεται ακριβώς διότι σ'αυτά που βρίσκω δεν είναι και πολύ επεξηγηματικά. :eek:

Δημοσ.

Παιδιά μια ερώτηση

 

Στον παρακάτω κώδικα ποιός ο λόγος να τυπώσουμε στην οθόνη την μεταβλητή CONST_VALUE μ'αυτόν τον τρόπο και όχι δημιουργώντας ένα αντικείμενο με το keyword new και στην συνέχεια με this->CONST_VALUE να εμφανίσουμε το αποτέλεσμα στην οθόνη?

 

Πότε χρησιμοποιείται ο τρόπος αυτός?

 

><?php
class MyClass {
   const CONST_VALUE = 'A constant value';
}

$classname = 'MyClass';
echo $classname::CONST_VALUE; // As of PHP 5.3.0

echo MyClass::CONST_VALUE;
?>

Δημοσ.

Mπορεις και αλλιως δημιουργοντας αντικειμενο αλλα δεν εχει νοημα,το ιδιο θα παρεις! Ειναι σαν static δηλαδη ισχυει για όλα τα αντικειμενα.. Αρα αφου ισχυει για ολα δεν εχει νοημα να φτιαξεις αντικειμενο...

 

Singleton σε γλώσσες σαν την php ειναι λιγο πιο περιεργα γιατι ψοφανε με το τελος του script. ενω σε αλλα περιβαλοντα μπορει να μεινουν και 1 χρονο στη μνημη πχ.

Δημοσ.

Κυρίως χρησιμοποιείται σε βάσεις δεδομένων όπου οι μεταβλητές για την σύνδεση δεν αλλάζουν ποτέ?

(δεν εννοώ το signleton αλλα ο κώδικας που παρέθεσα,ο τρόπος δηλαδή)

Δημοσ.

Δε νομιζω μιας και δεν εχω δει κατι τετοιο.Η συνδεση δε νομιζω να ειναι σωστο να ειναι const.

Κυριως τα const ειναι για σταθερες μεταβλητες. Δηλαδη απλο παραδειγμα αν το μικρο μεγεθος εχει νουμερο 1 και το μεγαλο 2 ... δηλωνεις const MIKRO = 1 ; const MEGALO =2; ... και ετσι καταλαβαινεις τι συμβολιζει το 1 κ 2 και αν αλλαξει η τιμη το αλλαζεις απο ενα σημειο μονο..

 

Δηλαδη αυτο ειναι πιο ευαναγνωστο

>
if($noumer== iKlasiMou::MIKRO) {
}

Δημοσ.

Κυρίως χρησιμοποιείται σε βάσεις δεδομένων όπου οι μεταβλητές για την σύνδεση δεν αλλάζουν ποτέ?

(δεν εννοώ το signleton αλλα ο κώδικας που παρέθεσα,ο τρόπος δηλαδή)

 

Όχι ακριβώς. Οι μεταβλητές για τη σύνδεση "αλλάζουν". Ο αριθμός μητρώου, ο ΑΦΜ κλπ "αλλάζουν". Παραδείγματα πραγμάτων που δέν αλλάζουν:

 

>class ReallyReallyConstant {
   const SECONDS_PER_MINUTE = 60;
   const DAYS_PER_WEEK = 7;
   const PI = 3.14159265;
}

 

Επίσης, μπορείς να τα χρησιμοποιήσεις και αντί για define(), όπως π.χ. παρακάτω:

 

>class Gender {
   const MALE = 'm';
   const FEMALE = 'f';
   const UNKNOWN = 'u';
}

 

αντί για

 

>define('GENDER_MALE', 'm');

 

κλπ.

 

Γενικά αυτό που θέλεις να κάνεις είναι να αποφύγεις τα λεγόμενα "magic numbers" (ή magic strings).

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...