Array και $_SESSION

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Array και $_SESSION

Δημοσίευση από pimpogio » 17 Ιούλ 2011 15:20

απαντα..

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Array και $_SESSION

Δημοσίευση από korgr » 17 Ιούλ 2011 16:03

cpulse έγραψε:Δεν θέλεις να σου απαντήσω γραμμή γραμμή σε αυτά που έγραψες.
Θέλει, θέλει :P

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Array και $_SESSION

Δημοσίευση από jpk » 17 Ιούλ 2011 16:09

cpulse έγραψε:πρώτα να καλέσει τον κώδικα του object και μετά να κάνει unserialize ...
Πολύ παλιά, νομίζω στην PHP 4, υπήρχαν προβλήματα.
Έτσι είναι , απλά μια μικρή προσθήκη για κάποιο τυχόν καινούργιο, με σωστή χρήση του autoload δεν χρειάζεται να κάνεις εσύ unserialize ένα αντικείμενο από το session, αναλαμβάνει η PHP... (και καθαρότερος κώδικας , και ελαφρώς γρηγορότερος)

Για την PHP 4 :hammer: ... πίκρα...

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Array και $_SESSION

Δημοσίευση από pimpogio » 17 Ιούλ 2011 16:32

αν κανεις ας πουμε update την php η αλλαξεις την class της οποιας instances ειτανε τα serialized objects θα παιζει ?

κ τα 2 ειναι πραγματικα σεναρια..
κανεις πχ aptitude upgrade η αναβαζεις στο server μια νεα εκδοση της class


αυτο ειπα ποιο πριν και ειπα οτι ειναι "quick dirty πατεντα"

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Array και $_SESSION

Δημοσίευση από burnmind » 17 Ιούλ 2011 16:55

Για την ιστορία, μια κι εγώ αναφέρθηκα πρώτος στο serialization, να σημειώσω (για 2η φορά) πως αφορούσε το serialization ενός array, ώστε να αποθηκευτεί στη βάση. Δεν είχε να κάνει σε τίποτα με serialization ενός Object (κάποιας Χ class) κλπ.

[popcorn] Μπορείτε να συνεχίσετε :D [/popcorn]

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Array και $_SESSION

Δημοσίευση από pimpogio » 17 Ιούλ 2011 17:16

γιατι το array array εκτος απο primitives δεν μπορει να εχει objects μεσα ?
αλλα και primitives να εχει τι γινετε σε περιπτωση update php ?

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Array και $_SESSION

Δημοσίευση από burnmind » 17 Ιούλ 2011 17:37

Είπα εγώ πως δε μπορεί να έχει; Στην περίπτωσή μου είπα, ΔΕΝ έχει:
burnmind έγραψε:Δεν είχε να κάνει σε τίποτα με serialization ενός Object (κάποιας Χ class) κλπ.
pimpogio έγραψε:αλλα και primitives να εχει τι γινετε σε περιπτωση update php ?
Έχουμε για παράδειγμα ένα array που περιέχει μια σειρά από paths, που καταγράφουν την πορεία που ακουλούθησε ο χρήστης στο σύστημά μας:

Κώδικας: Επιλογή όλων

$array = array('selida1', 'selida2', 'selida3');
Δώσε μου ένα παράδειγμα στο πού θα μπορούσε να υπάρξει πρόβλημα για να το συζητήσουμε. :)

ΥΓ: Μην εξετάσεις το ότι θα ήταν καλύτερο να καταγράφονται οι πληροφορίες σε ξεχωριστό πίνακα στη βάση και ότι είναι ένας εντελώς απλοϊκός πίνακας, είναι έτσι ακριβώς γι' αυτό, επειδή αποτελεί ένα απλοϊκό παράδειγμα. Αν δε σε καλύπτει, feel free να δώσεις παράδειγμα χρησιμοποιώντας άλλα δεδομένα.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Array και $_SESSION

Δημοσίευση από pimpogio » 17 Ιούλ 2011 17:55

ναι σε αυτο το παραδειγμα αν κανεις upgrade την php
και γινει καποια αλλαγη στην εσωτερικη αναπαρασταση των arrays η των strings στην virtual machine της php δεν θα παιζει απλο.
Και γιατι το οτι δεν γινει αλλαγη δεν υπαρχει εγγυηση.

Το θεμα ειναι εδω οτι δεν εχεις καθαρο interface(μαλιστα δεν το χειριζεσαι ουτε ο ιδιος) και κανεις αχρειαστο "δεσιμο" με συγκεκριμενη virtual machine php

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Array και $_SESSION

Δημοσίευση από cpulse » 17 Ιούλ 2011 18:17

Αφου θέλει θέλει...

>> το serialization ειναι κυριως για αλλο πραγμα..
>> πχ απο την java αλλα και στις αλλες γλωσσες το ιδιο μαλλον ειναι..
>> χρησιμοποιειτε για να αποθηκευεις στο δισκο η σε αλλα μεσα αντικειμενα (instances απο classes) ως εχουν.
>> Δηαδη τα fields της class σε καποια ειδικη binary μορφη αναγνωσιμη πιθανων μονο το απο το συγκεκριμενο vm.

Άκυρο. Το serialization δεν έχει αλλάξει από την PHP4. Πολύ πιθανό και από την PHP3. Δεν έχει καμία σχέση το vm.

>> Πχ αυτο μπορεις να το χρησιμοποιησεις και για deep copy του object στη μνημη αμα θες ενα αντιγραφο
>> η να το σωσεις στο δισκο και να το ανακτησεις.

Άκυρο. Μάλλον δεν ξέρεις την έννοια της αναζήτησης deep first vs width first. Το serialization πάει και βαθεία και πλατιά.

>> Αν αλλαξεις την κλαση η αλλαξεις virtual machine (πχ νεα εκδοση php) κατα πασα πιθανοτητα δεν θα παιζει

Άκυρο. Εγκατέστησε την PHP3 και την νέα PHP6. Για να σε βοηθήσω κι όλας, κατέβασε την για windows που δεν χρειάζονται ούτε πακέτα ούτε compiles σαν στα unix. Τρέχτα σε CLI, κάνε serialize από το PHP3 και unserialize από το PHP6. ΑΝ βρεις πρόβλημα, τότε έλα να μας πεις.

>> και γι αυτο υπαρχει και το versioning.

Άκυρο. Δεν υπάρχει αριθμός version μέσα στα serialized strings.

>> Τα αντικειμενα πρεπει να ειναι τυπου Seriazable (implement Serializable interface) κ το array ας πουμε αλλα και τα στοιχεια του ολα αλλιως δεν θα παιζει.

Άκυρο. Οποιοδήποτε αντικείμενο κάνει serialize. Εξαίρεση είναι όσα επίτηδες τα κάνουμε να κάνουν implement Serializable για να μπορούμε να κάνουμε override τις default μεθόδους της PHP στο serialization.

>> Το serialization ειναι καπως ανορθόδοξη λυση εδω
>> ειναι quick dirty "πατεντα" ..

Τρία πουλάκια κάθονταν κι αρμέγαν μελιτζάνες.

---

Πιμπόγιε ή πιμπογίνα (δεν ξέρω τι είσαι), άμα δεν ξέρεις κάτι καλύτερα άσε τους άλλους τα μιλάνε και μάθαινε από αυτούς.

Το να πετάγεσαι σε κάθε thread και να λές άσχετα πράγματα ΔΕΝ σε κάνουν ποιο έξυπνο στα μάτια μας. Ίσα ίσα το αντίθετο. Αυτό το λέω γιατί είναι πλέον σίγουρο για μένα οτι σκοπός σου δεν είναι να βοηθάς τον κόσμο.

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

Array και $_SESSION

Δημοσίευση από Khronos » 17 Ιούλ 2011 18:19

pimpogio έγραψε:ναι σε αυτο το παραδειγμα αν κανεις upgrade την php
και γινει καποια αλλαγη στην εσωτερικη αναπαρασταση των arrays η των strings στην virtual machine της php δεν θα παιζει απλο.
Και γιατι το οτι δεν γινει αλλαγη δεν υπαρχει εγγυηση.

Το θεμα ειναι εδω οτι δεν εχεις καθαρο interface(μαλιστα δεν το χειριζεσαι ουτε ο ιδιος) και κανεις αχρειαστο "δεσιμο" με συγκεκριμενη virtual machine php
Εγώ δεν κατάλαβα χριστό πάντως...

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Array και $_SESSION

Δημοσίευση από burnmind » 17 Ιούλ 2011 18:33

pimpogio έγραψε:ναι σε αυτο το παραδειγμα αν κανεις upgrade την php
και γινει καποια αλλαγη στην εσωτερικη αναπαρασταση των arrays η των strings στην virtual machine της php δεν θα παιζει απλο.
Και γιατι το οτι δεν γινει αλλαγη δεν υπαρχει εγγυηση.
Να υποθέσω πως εννοείς πως αντί για

Κώδικας: Επιλογή όλων

a:3:{i:0;s:7:"selida1";i:1;s:7:"selida2";i:2;s:7:"selida3";}
(serialized array)

να το γυρίσουν πχ σε

Κώδικας: Επιλογή όλων

a:3:{z:0;s:7:"selida1";z:1;s:7:"selida2";z:2;s:7:"selida3";}
(και πάλι πολύ απλοϊκό παράδειγμα αλλαγής)

Η serialize υπάρχει ακριβώς γι'αυτόν το λόγο. Δε νομίζω πως υπάρχει περίπτωση να αλλάξουν κάτι χωρίς backward compatibility, οπότε δύσκολα θα υπάρξει αυτό το πρόβλημα που αναφέρεις (όπως αναφέρει ο cpulse, δεν έχει υπάρξει ποτέ στο παρελθόν).

Με την ίδια λογική το ίδιο μπορεί να συμβεί στο implementation μιας βάσης κλπ. Στη χειρότερη γράψε ένα recovery script, πόσο τραγικό μπορεί να είναι;
pimpogio έγραψε:Το θεμα ειναι εδω οτι δεν εχεις καθαρο interface(μαλιστα δεν το χειριζεσαι ουτε ο ιδιος) και κανεις αχρειαστο "δεσιμο" με συγκεκριμενη virtual machine php
Εδώ ξεφεύγουμε από το θέμα. Πάμε στα χωράφια του language agnostic design. Το serialization κάνει μία συγκεκριμένη δουλειά και την κάνει σωστά. Αν θες να σχεδιάσεις το php σύστημά σου έτσι ώστε να μπορείς αύριο να πάρεις τη βάση του και να την κολλήσεις σε μία Java υλοποίηση και να παίξει χωρίς καμία αλλαγή, τότε ναι, μη το χρησιμοποιήσεις.

Στην πραγματικότητα όμως, ελάχιστες φορές στη ζωή σου θα χρειαστεί να αλλάξεις πλατφόρμα και αν όντως χρειαστεί να το κάνεις, θα είναι τρομερά εύκολο να γράψεις ένα πολύ απλό script-άκι που θα κάνει σε ελάχιστα λεπτά τη μετατροπή σε ό,τι θέλεις (εννοείται φυσικά πως δεν έχουμε αποθηκεύσει τα πάντα σε serialized arrays, αλλά πολύ συγκεκριμένα πράγματα για λόγους ευκολίας και performance).

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Array και $_SESSION

Δημοσίευση από pimpogio » 17 Ιούλ 2011 20:07

μιλησα για java και το versioning απο την πλευρα του προγραματιστη που υπαρχει σε java
(serialversionUID που κανεις override στον κωδικα της class) η php δεν εχει versioning απο την πλευρα του προγραματιστη.
Επισης ειπα οτι μαλλον ειναι το ιδιο σε php -> δεν ειναι τωρα που το ειδα αλλα οι βασικες αρχες ειναι ιδιες.
BFS και το DFS ειναι ορολογια για αλλα πραγματα αυτοι ο οροι χρησιμοποιουντε κυριως για traversing σε data structures πχ trees graphs κτλπ ο χρησιμοποιουμενος ορος ειναι shalow k deep object copy πληροφοριακα.
Πχ μπορεις να κανεις deep object copy με serialization.
Δεν ειναι το οποιοδηποτε object Seriazable στη java επισης ουτε στην php ειναι ακριβως(υπαρχουνε εξαιρεσεις πχ resource objects).
Επισης τωρα που το δοκιμασα ειδα οτι η php δεν τα κανει serialize σε binary μορφη που τα κανουνε οι αλλες γλωσσες αλλα σε μια δικη της text format που ναι μεν μπορει να εχει διατηρηθει απο την php3 οπως λες
αλλα αυτο δεν ειναι και εγγυηση γιατι ειναι εσωτερικη υλοποιηση της php εκτος και δεν ειναι και εχει καποιο specification αυτο το format αποθηκευσης.Αν εχει τοτε οκ δεν αλλαζει και ειναι safe.

Σε καθε περιπτωση εγω ειπα για java και μαλλον ειναι το ιδιο σε php δεν ειναι το ιδιο τελικα αλλα οι βασικες
αρχες ειναι το ιδιο και δεν ειναι καλη πρακτικη αυτο το πραγμα γιατι κανεις αχρειαστο coupling.
Οχι ισως τοσο με το format αποθηκευσης γιατι αυτο φαινετε οτι δεν αλλαζει αλλα κανεις coupling με την ιδια σου την
εφαρμογη πχ να θες να αλλαξεις τις classes των οποιων τα objects εχεις κανει ηδη serialize
σε καθε περιπτωση ειναι "quick dirty πατεντα" οχι σε τετοιο βαθμο που ειναι στις αλλες γλωσσες αλλα ειναι
Τελευταία επεξεργασία από το μέλος pimpogio την 17 Ιούλ 2011 20:16, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Array και $_SESSION

Δημοσίευση από cpulse » 17 Ιούλ 2011 20:15

1) Εδώ είναι η περιοχή της PHP. Η Java είναι αλλού και ενδιαφέρει άλλους.

2) Τα serialized strings είναι binary safe. Δοκίμασε τα. Βάλε σε ένα string τον χαρακτήρα 0x00 και μετά μερικούς ακόμα για να το διαπιστώσεις και μόνος σου. Για μια ακόμα φορά, πρώτα δοκίμασε, μετά έλα να μας πείς αν ισχύει ή όχι.

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Array και $_SESSION

Δημοσίευση από pimpogio » 17 Ιούλ 2011 20:23

ναι για τα strings φαινετε να υπαρχει ενα standar format
αλλα αμα εχεις απλο string δεν εχει νοημα να το κανεις serialize αποθηκευεις απευθειας την τιμη του.

Για τα objects το κανουνε συνηθως που πρεπει να φτιαξεις δικο σου format αποθηκευσης και πολλοι βαριουντε και κανουνε την μοντα του serialization.
Παντως οπως και να εχει σου δινει αχρειαστο coupling
και στην php μπορει να μην ειναι μεγαλο οπως ειναι στις αλλες γλωσσες αλλα δεν εχει νοημα να το κανεις
αφου μπορεις να το αποφυγεις.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Array και $_SESSION

Δημοσίευση από jpk » 26 Ιούλ 2011 22:46

Είχα πει ότι δεν θα απαντήσω σε αυτό το thread αλλά τελικά δεν αντέχω τον πειρασμό ( :evil:)
.
Πολύ γρήγορα για να μην μείνει ως γεύση σε όποιον δεν ξέρει πολλά και το διαβάσει ότι το serialization είναι "quick and dirty πατέντα". Όταν έχεις ένα αρχείο σε κάποιο κατάλογο του server και σε αυτό είναι αποθηκευμένο το visit scope cashing ή το session του χρήστη με κάποιο τρόπο πρέπει γίνει καταγραφή των αντικειμένων. Το ίδιο ισχύει και για application scope cashing. Τα αρχεία αυτά που αποθηκεύουν αντικείμενα (και οι λίστες αντικείμενα είναι ) αν τα χρησιμοποιείς για αποθήκευση και όχι για cashing τότε έχεις μεγάλο πρόβλημα λογικής που δεν το προχωρώ περεταίρω (ανέφερε και ο burnmind σχετικά). Αν το προβλημά σου είναι ότι αλλάζοντας σύστημα , έκδοση ή ακόμα και γλώσσα αλλάζει ο τρόπος που ανακτούνται αυτά τα αρχεία πίσω σε αντικείμενα τότε απλά δεν χρησιμοποιείς το cashing για αυτό που είναι. Αυτός είναι dirty δρόμος.


Μέσα σε όλα αυτά ειπώθηκε ότι αλλάζοντας μια ιδιότητα αντικειμένου δεν γίνετε σωστά serialize. Εννοείτε… ακόμα και με τεχνίτη νοημοσύνη να γινόταν δεν θα μπορούσε να πιάσει τις εξυπνάδες κάθε βαρεμένου. Και επειδή πολύ Java (χωρίς λόγο) κουβέντα έγινε , το ίδιο είναι και στην Java (και μερικές φορές χειρότερα … δούλεψε με EJB και θυμήσου με).

Κλείνοντας υπήρξε μια αναφορά ότι δεν πρέπει να εξαρτόμαστε από το σύστημα για τον τρόπο που κάνει serialize και unserialize. Αυτό το θεωρώ πολύ επικίνδυνο , σπατάλη πόρων και βρώμικο. Και στην PHP υπάρχουν εφαρμογές σε C που κάνουν με τον δικό τους τρόπο serialization που σε κάποια κομμάτια υπερτερεί από αυτό που έχει πάνω της η γλώσσα. Αλλά αυτό σίγουρα δεν σημαίνει ότι ο καθείς πρέπει να φτιάχνει την δική του μέθοδο για να καταγράφει τα αντικείμενα και μετά να τα ανακτά. Μια εφαρμογή σε οποιαδήποτε γλώσσα που έχει δικό της τρόπο για να αποτυπώνει τα αντικείμενα σε αρχείο και δεν ακολουθεί τα πρότυπα της γλώσσας είναι προϊόν εφήμερου προγραμματισμού (όχι μόνο για όποιον άτυχο κληθεί να την συντηρήσει αλλά και για τον ίδιο τον δημιουργό της)

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες