DAVID MALAN: Εντάξει. Αυτό είναι CS50, και αυτό είναι το τέλος της εβδομάδας εννέα. Είναι μια λαίλαπα πάνω τις τελευταίες ημέρες. Και το πρόβλημα που επτά, αν είστε στο γόνατο βαθιά σε αυτό, συνειδητοποιούν ότι υπάρχει μια αρκετά bit νέο που υπάρχει εκεί. Αλλά ας δούμε αν δεν μπορούμε να συναρμολογήσουν όλα μαζί εδώ εν συντομία πριν από τότε προσανατολίζονταν μακριά ακόμα Μια άλλη κατεύθυνση και βλέποντας πού αλλού μπορούμε να πάμε. Έτσι λοιπόν και σήμερα, έχουμε μιλήσει για HTML. Έχουμε μιλήσει για CSS. Έχουμε μιλήσει για την PHP. Έχετε αρχίσει να βιώσουν SQL. Σήμερα, θα μιλήσουμε λίγο περίπου JavaScript. Αλλά πώς όλα αυτά τα ανόμοια γλώσσες ταιριάζουν μεταξύ τους; Έτσι μιλήσαμε την περασμένη εβδομάδα σχετικά με το έννοια της ύπαρξης ενός διακομιστή. Έτσι, ας συντάξει ακριβώς αυτό το ορθογώνιο ως web server εδώ. Και ενός web server εξυπηρετεί σίγουρα αρχεία. Και μερικά από αυτά τα αρχεία μπορεί να είναι HTML αρχεία. Έτσι, ένα από τα πράγματα που ένας διακομιστής web μπορεί να φτύσει μπορεί να είναι ένα αρχείο που εμείς απλώς θα αντλήσει όπως αυτό περιέχει HTML. Έτσι, σε απλή γλώσσα, αυτό HTML δεν σας επιτρέπει να κάνετε; ΚΟΙΝΟ: Page φαίνονται ωραία. DAVID MALAN: OK, κάνει μια σελίδα να φαίνονται ωραία, αν και νομίζω ότι έχω αποδείξει ότι διαφορετικά. Έτσι HTML σας αφήνει να τοποθετήσετε σελίδες δομικά, και σας επιτρέπει να είδος αισθητικά σηματοδοτήσει μια σελίδα, επισημάνετε στατικό περιεχόμενο, έτσι ώστε να μπορείτε να δείτε στη συνέχεια με ένα web browser. Αλλά αυτό είναι το κλειδί. Είναι στατικό περιεχόμενο. Μπορείτε να γράψετε, μπορείτε να αποθηκεύσετε, και στη συνέχεια να το στείλει. Και ο web server εξυπηρετεί συνέχεια επάνω τους επισκέπτες σας. Αλλά εμείς στυλιζαρίσματος τα πράγματα με ένα διαφορετικό γλώσσα εντελώς. Αρχίσαμε να χρησιμοποιήσετε ένα χαρακτηριστικό στυλ σε ορισμένες ετικέτες. Και το χαρακτηριστικό στυλ ας που πράγματα όπως το μέγεθος της γραμματοσειράς και το χρώμα. Και πιθανώς έχετε αρχίσει να ανακαλύψουν, ή σύντομα θα είναι για την τελική έργα ενδεχομένως, ακόμη άλλες ιδιότητες που μπορείτε να χρησιμοποιήσετε στο CSS. Και έτσι σε απλή γλώσσα, αυτό τότε πραγματικά δεν CSS κάνουμε; Αυτά είναι μόνο παραδείγματα αυτής. Τι αφήσω να το κάνεις HTML δεν φαίνεται να από ό, τι έχουμε δει μέχρι τώρα; ΚΟΙΝΟ: Ορισμός στυλ από τον εαυτό σας. DAVID MALAN: Ορισμός στυλ από τον εαυτό σας. Έτσι καθορίζουν τα πράγματα όπως τα μαθήματα, όπως σας μπορεί να έχουν συναντήσει, ή αποκλειστικά εντοπίσει τους κόμβους σε ένα έγγραφο, ώστε ότι μπορείτε να τα στυλιζάρω. Όμως, πιο συγκεκριμένα, θα έλεγα ότι CSS πραγματικά σας επιτρέπει να πάρετε τα πράγματα η τελευταίο μίλι και σας επιτρέπει να καθορίσετε πολύ ακριβέστερα την αισθητική, λαμβάνοντας υπόψη ότι η HTML ως επί το πλείστον επιτρέπει Σας δομή σελίδες σας. Και ακόμα κι αν υπάρχουν κάποιες προκαθορισμένες ρυθμίσεις, όπως είδαμε την ετικέτα για μια επικεφαλίδα ετικέτα, η οποία σε γενικές γραμμές κάνει τα πράγματα μεγάλο και τολμηρό. Αυτό είναι ένα πολύ γενικός ορισμός της ετικέτας - μεγάλες και τολμηρές. Ποιο είναι το μέγεθος της γραμματοσειράς είναι αυτό; Τι χρώμα είναι αυτό; Πόσο τολμηρό είναι αυτό; Και CSS σας επιτρέπει πιο λεπτή μελωδία πράγματα όπως αυτό. Καθώς και τη διάταξη, όπως μερικοί από εσάς έχετε δει. Και ειλικρινά, CSS είναι λίγο του ένα βρώμικο γλώσσας. Είναι πολύ ισχυρή, δεδομένου ότι μπορείτε να κάνετε κυριολεκτικά κάθε ιστοσελίδα που έχετε δει στο διαδίκτυο σήμερα με αυτό, αλλά είναι το είδος του πόνου στο λαιμό. Και κάποιοι από εσάς έχετε χτυπούσαν το κεφάλι σας ενάντια στους τοίχους ήδη απλά για να κάνουμε κάτι ηλίθιο, όπως το κέντρο ένα μενού το πρόβλημα που επτά, αν έχετε πάρει την αυτό το σημείο ήδη. Αλλά συνειδητοποιούν, αυτά τα πράγματα πάρει ευκολότερη την πάροδο του χρόνου. Θα αρχίσετε να παρατηρείτε τα πρότυπα. Και πάλι, η Google θα είναι ο φίλος σας για τους διάφορους τρόπους με τους οποίους μπορείτε να επιλύσει τέτοιου είδους προβλήματα. Και τολμώ να πω με CSS, HTML και περισσότερα Σε γενικές γραμμές, μπορείτε να λύσετε τα προβλήματα στο πολλοί περισσότεροι τρόποι, το σύνολο των οποίων θα μπορούσε πολύ καλά να είναι σωστό, από ό, τι θα μπορούσατε σε κάτι σαν C, ακόμα και τώρα PHP ή JavaScript. Υπάρχουν απλά πολλές διαφορετικές τρόπους για να θέσει τα πράγματα. Αλλά αυτό άρχισε να βρώμικο, είπαμε. Ακριβώς το είδος της συνεύρεση HTML σας και CSS σας με το χαρακτηριστικό ύφος ήταν λίγο ατημέλητη. Και έτσι αντί να πει, το είδος της αφηρημένα μιλώντας, ότι θα πρέπει να τουλάχιστον να αρχίσουν να παράγοντα out CSS σας πιθανώς. Δεν είναι χαρακτηριστικά το στυλ σας, αλλά τουλάχιστον χρησιμοποιήσετε την ετικέτα στυλ μέσα σε ό, τι μέρος της ιστοσελίδας; Κοινό: Head. DAVID MALAN: Στο κεφάλι. Μέχρι τώρα, είχαμε μόνο τον τίτλο μέχρι εκεί, αλλά μπορείτε επίσης να προσθέσετε ένα στυλ tag, και μπορείτε να βάλετε CSS σας περίπου μιλώντας προς το επάνω μέρος της σελίδας. Στη συνέχεια, όμως πήραμε τα πράγματα ένα βήμα πιο πέρα και εμείς υπολογιστεί ότι περισσότερες σε ένα ξεχωριστό αρχείο. Και έτσι αυτά τα δύο αρχεία ήταν κάπως τώρα που συνδέονται. Και πράγματι, ήταν η ετικέτα που το έκανε αυτό. Και αυτό ήταν ένας από τους πρωταρχικούς κίνητρα για factoring out CSS μας ακόμη περισσότερο; Κοινό: Επαναχρησιμοποίηση. DAVID MALAN: Επαναχρησιμοποίηση. Σωστά; Μπορεί να έχετε δει σε p-set επτά ήδη ότι πολλές από τις σελίδες, η αγορά της σελίδας, η πώληση της σελίδας, η σελίδα του χαρτοφυλακίου, είναι κατά πάσα πιθανότητα δομημένη κάπως παρόμοια. Υπάρχει μια CS50 logo χρηματοδότηση στην κορυφή εκτός και αν έχετε αποφασίσει να το αλλάξετε. Υπάρχει ένα υποσέλιδο, στο κάτω μέρος των σελίδων. Και CSS σας επιτρέπει στη συνέχεια να το συνυπολογίσει αυτό σε ένα ξεχωριστό αρχείο, έτσι ώστε αν θέλετε να αλλάξετε κάτι σε παγκόσμιο επίπεδο σε όλο το site σας, μπορείτε πραγματικά απλά να το αλλάξετε σε ένα μέρος. Αλλά υπάρχει μια τιμή που πληρώνετε δυνητικά με έχουν υπολογιστεί από το CSS από το HTML αρχείο μου σε ένα ξεχωριστό υποβάλλουν αναφορά με την tag, που είδαμε τη Δευτέρα. Τι θα μπορούσε να είναι το μειονέκτημα αυτό; Η σκέψη πίσω πριν από μία εβδομάδα για το πότε είμαστε μιλάμε για HTTP και TCP / IP και πώς το διαδίκτυο λειτουργεί. Κάτι εδώ; ΚΟΙΝΟ: Παίρνει περισσότερο χρόνο. DAVID MALAN: Παίρνει περισσότερο χρόνο. Γιατί; ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: Ναι. Γι 'αυτό χρειάζεται αναμφισβήτητα λίγο περισσότερο χρόνο. Επειδή ένα, το CSS είναι προφανώς όχι στο ίδιο αρχείο. Έτσι τώρα θα πρέπει να μην κάνει μία, αλλά δύο αιτήματα. Και κάθε μία από τις αιτήσεις αυτές, όπως είδαμε στο Chrome στο λεγόμενο Επιθεωρητή, και κοιτάξαμε την καρτέλα του δικτύου, κάθε αυτών των αρχείων απαιτεί ένα HTTP αίτημα, το οποίο είδαμε παίρνει κάποια ποσότητα του χρόνου. Τώρα, ίσως δεν είναι πολλά. Ίσως είναι μόνο 20 χιλιοστά του δευτερολέπτου. Ίσως είναι 200 ​​χιλιοστά του δευτερολέπτου. Αλλά σκεφτείτε για μια σελίδα, όπως το Facebook, ή CNN, ή το Google, το οποίο είναι πολύ μεγαλύτερα από τα παραδείγματα που έχουμε κοίταξε μέχρι στιγμής. Οι σελίδες αυτές μπορεί να έχουν δεκάδες αρχεία, καθένα από τα οποία μπορεί να απαιτήσει λήψη ενός αρχείου. Έτσι, τα πράγματα μπορεί ενδεχομένως να αρχίσει να επιβραδύνει. Και ειδικά αυτές τις μέρες, όταν όλοι έχουν τα κινητά τηλέφωνα στις τσέπες μας και Στις πιο αργές συνδέσεις, χρειάζεται να περιμένετε μερικά χιλιοστά του δευτερολέπτου, λίγα περισσότερα χιλιοστά του δευτερολέπτου για πρόσθετες αρχεία μπορεί πραγματικά να είναι αργή. Latency είναι η λέξη που περιγράφει την το είδος της αναμονής ότι έχετε ότι αντιμετωπίσετε κατά την αναμονή για κάποιο κομμάτι των πληροφοριών. Αλλά υπάρχει και η άλλη πλευρά. Γι 'αυτό δεν είναι όλο το είδος των α - στην πραγματικότητα είναι ένα κομμάτι από μια τραμπάλα εδώ. Απαισιόδοξη τώρα, αλλά τι μπορούν να κάνουν browsers αν είσαι έξυπνος, προκειμένου να αποφευχθεί να χρειάζεται να ζητήσει από την ίδια styles.css το αρχείο και πάλι μπορεί να είναι να κάνει τι; Cache αυτό. Έτσι, προσωρινή αποθήκευση - Ο-Α-Ο-Η-Ε - γενικά σημαίνει εδώ μόνο για να σώσει την αρχείο που ζήτησε την πρώτη φορά, και Στη συνέχεια ελέγξτε cache σας για αυτό. Βεβαιωθείτε ότι είστε το είδος του περιέκτη αποθήκευσης, και αν έχετε ήδη ένα αντίγραφο της styles.css, ακόμη και αν κάποιο άλλο σελίδα στην p-set, ή οποιοδήποτε δικτυακό τόπο, ζητεί και πάλι, ακριβώς για να δώσει το χρήστη το ίδιο αποθηκευμένο αντίγραφο. Μην ενοχλείστε ζητά. Απαισιόδοξη εκεί, όμως, όπως κάποιοι από εσάς έχουν σκοντάψει πάνω στο p-set. Αν κάνετε μια αλλαγή στον server και μπορείτε να επιστρέψετε στο πρόγραμμα περιήγησης και reload, μερικές φορές το πρόγραμμα περιήγησης κάνει Είστε υπέρ και δεν ενοχλεί εκ νέου λήψη του αρχείου styles.css σας διότι, έλα, τι είναι οι πιθανότητες ότι αυτά τα στυλ που χρησιμοποιεί το Facebook πρόκειται να αλλάξει από ώρα σε ώρα ή μέρα με τη μέρα; Είναι αρκετά χαμηλή. Μπορεί να αλλάξει με την πάροδο του χρόνου, αλλά δεν από το λεπτό ή από την ώρα. Έτσι, ένα τέχνασμα, απλά FYI όταν κάνει web ανάπτυξης, συχνά κρατήστε πατημένο το πλήκτρο το πλήκτρο shift, για παράδειγμα, και στη συνέχεια κάντε κλικ στο κουμπί φορτώσετε στον browser σας, και που θα συνήθως λένε την επαναφόρτωση του προγράμματος περιήγησης τα πάντα, ακόμα και αν έχετε ήδη στην κρυφή μνήμη. Έτσι και πάλι, upsides και μειονεκτήματα, αλλά όλοι τους τελικά αποφάσεις σχεδιασμού. Μέχρι τώρα, δεν είχαμε μόνο τερματίσετε την ιστορία εδώ. Αν εγώ τώρα πάω πίσω και πίσω και πίσω και πίσω, αρχίσαμε να εισαγάγει όχι μόνο HTML, αλλά η PHP. Έτσι, σε απλή γλώσσα, αυτό δεν PHP ας κάνουμε; ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: Τι είναι αυτό; ΚΟΙΝΟ: Καθιέρωση λογική στον κώδικα. DAVID MALAN: Ναι, να εισαγάγει λογική στον κώδικά σας. Έτσι, αυτό είναι μια αληθινή γλώσσα προγραμματισμού με βρόχους, και τις μεταβλητές, και λειτουργίες και τις συνθήκες, και όλα τα πράγματα που έχουμε χρησιμοποιήσει δρόμο της επιστροφής όταν από το μηδέν. Και PHP, έχουμε δει, μπορεί να χρησιμοποιηθεί είτε στη γραμμή εντολών - το δεν πρέπει να έχει τίποτα να κάνει με το διαδίκτυο, ακόμη και αν αυτό είναι πραγματικά τις ρίζες της και ό, τι τείνει να είναι καλό και ευνοϊκό για - αλλά μπορείτε να χρησιμοποιήσετε το PHP απλώς από τη φύση το γεγονός ότι έχει μια εκτύπωση () λειτουργία, και μια printf (λειτουργία), ή μια ηχώ (λειτουργία). Υπάρχει τσαμπιά τρόποι που μπορείτε να εκτυπώσετε κείμενο με την PHP. Ως εκ τούτου, μπορείτε να χρησιμοποιήσετε αυτόν τον προγραμματισμό γλώσσα στην έξοδο ακριβώς τι λέγαμε πριν. Μπορείτε να δημιουργήσετε δυναμικά HTML σας. Ίσως όχι όλα. Ίσως σκληρά πράγματα κώδικα, όπως το κεφαλίδα και το υποσέλιδο, και το λογότυπο, και τα φύλλα στυλ σας, και όλα αυτά. Αλλά για κάτι σαν p-έθεσε επτά, όπου είστε το χειρισμό των αποθεμάτων και δείχνει το χαρτοφυλάκιο του χρήστη, η οποία είναι πρόκειται να αλλάξει δυναμικά, θα μπορούσε να σίγουρα χρησιμοποιούν PHP και τη λογική που δίνει σας ως γλώσσα προγραμματισμού για να εξόδου υποσύνολα δυναμικά της σελίδας. Έτσι, όταν μιλάμε για δυναμικές ιστοσελίδες, ή web προγραμματισμό, που είναι τι είστε πραγματικά μιλάμε. Χρησιμοποιώντας μια γλώσσα όπως η PHP, ή τα πράγματα ονομάζεται Python, Ruby ή, ή Java, ή ακόμη άλλες γλώσσες, για την αναζήτηση μιας βάσης δεδομένων συχνά, ή άλλο διακομιστή, και στη συνέχεια να φτύσει έξω δυναμικά HTML. Τώρα το τελικό αποτέλεσμα, ως ένα μέρος, είναι ότι η HTML από τις περισσότερες ιστοσελίδες, συμπεριλαμβανομένης της p-έθεσε επτά σας, είναι πιθανώς πρόκειται να είναι ένα τεράστιο χάος, αν Αν κοιτάξει κανείς την πηγή κώδικα σε ένα πρόγραμμα περιήγησης. Αυτό δεν είναι μια μεγάλη υπόθεση. Σε αυτό το σημείο, όταν νοιαζόμαστε για στυλ, νοιαζόμαστε για το πράγματα που γράφετε. Εμείς δεν θα νοιάζονται για την ουσία ότι αυτό εξόδους κωδικό σας. Γι 'αυτό μην ανησυχείτε για εσοχή εδώ αν είναι PHP που είναι στην πραγματικότητα έξοδο πράγματα. Μετά από όλα, το πρόγραμμα περιήγησης δεν θα με νοιάζει, και ένα ανθρώπινο δεν θα πρέπει να ψάχνει στην πηγή έτσι κι αλλιώς. Εμείς το προσωπικό, για παράδειγμα, θα να ψάχνει σε PHP σας. Έτσι, επιτρέψτε μου να σας δώσω ένα γρήγορο παράδειγμα τώρα γιατί αλλιώς αυτό μπορεί να είναι χρήσιμο. Έτσι, ειλικρινά, δεν μπορώ να θυμηθώ την τελευταία φορά που χρησιμοποίησα C για να λύσει ένα πρόβλημα στην ο πραγματικός κόσμος. Ήταν πιθανότατα απόφοιτος του σχολείου, όταν Έπρεπε να χρησιμοποιήσει μια γλώσσα που ήταν αρκετά χαμηλό επίπεδο και μου έδωσε το ευκαιρία να κάνουμε κάτι πολύ υψηλή εκτελεί πραγματικά να σώσει όσες CPU κύκλους, όπως θα μπορούσα, σε μεγάλο βαθμό γιατί ήμουν με τεράστια σύνολα δεδομένων, και σε κάθε κύκλο CPU υπολογίζονται. Και ειλικρινά, ακόμα και σε πράγματα όπως τα κινητά τηλέφωνα αυτές τις μέρες και άλλες συσκευές όπου δεν έχετε αρκετά ως πολύ μνήμη και δεν έχετε αρκετά ως πολύ CPU, με ταχύτερες γλώσσες εξακολουθεί να είναι ελκυστική. Όμως στον πραγματικό κόσμο, όταν απλά θέλετε να ρίξει κάποιο πρόγραμμα, μαζί με αναλύσει κάποια δεδομένα, ή έχετε συλλέξει ένα σωρό εγγραφές για κάποια ομάδα φοιτητών και θέλετε να είναι πολύ γρήγορα να αυτοματοποιήσει την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου μία προς μία σε κάθε ένα από αυτά καταχωρίζοντες, θα πάμε για να φθάσει για μια γλώσσα υψηλού επιπέδου από το C να το πω έτσι. Κάτι σαν PHP ή Python ή Ruby, ή μισή ντουζίνα άλλοι που υπάρχουν αυτές τις μέρες. Αλλά αυτοί οι τρεις είναι πιθανώς το πιο trendy τώρα. Και τι σημαίνει αυτό είναι ότι μπορείτε να ανοίξετε μέχρι ένα πρόγραμμα επεξεργασίας κειμένου όπως το gedit ή πιο οτιδήποτε άλλο και στη συνέχεια, μόλις αρχίσει γράφοντας κώδικα χωρίς να χρειάζεται να ανησυχείτε σχετικά με την κατάρτιση, χωρίς να χρειάζεται να πραγματικά ανησυχούν για τη διαχείριση της μνήμης, έχοντας κατά νου όμως ότι ένα μικρό προχειρότητα τελικά θα επανέλθει να σας δαγκώσει αν το σύνολο δεδομένων γίνεται μεγαλύτερες ή το πρόβλημα παίρνει μεγάλες. Αλλά τι σημαίνει αυτό για μας είναι η ακόλουθη. Επιτρέψτε μου να πάμε μπροστά και να τρέξει ορθογράφος από το πρόβλημα που έχει έξι. Έτσι, αυτό είναι trie-based εφαρμογή μου που θα χρησιμοποιηθούν για το μεγάλο διοικητικού συμβουλίου, όπου δεν πάει τόσο καλά. Θα έρθει πίσω στο χρόνο μιας εβδομάδας και επανεξετάσουμε όσους δεν καταλήγουν στην κορυφή του μεγάλο πλοίο σε τελευταία διάλεξη μας. Αλλά για τώρα, επιτρέψτε μου να πάει μπροστά και απλά τρέχει λύση μου στο κείμενο, και εμείς θα κάνουμε το King James Bible, και εδώ είμαστε. Έτσι, αυτά είναι όλα τα δήθεν ανορθόγραφες λέξεις από το King James Bible. Και την εφαρμογή μου πήρε μισό δευτερόλεπτο στο σύνολο. Έτσι, δεν είναι πολύ κακό για το θέμα αυτό συγκεκριμένο υπολογιστή. Αλλά σκεφτείτε πόσο κώδικα που είχα να γράψω. Σκεφτείτε πόσο κωδικό που έπρεπε να γράψω. Σκεφτείτε πόσες ώρες αφιερώσατε στο D-αίθουσα ή dorm σας ή οπουδήποτε στην πραγματικότητα κωδικοποίησαν αυτή τη λύση. Λοιπόν, αν έχω πραγματικά ένα υψηλότερο επίπεδο γλώσσα όπως PHP, να λαμβάνει γνώση των τι μπορώ να κάνω εδώ. Πρώτον, ας υποθέσουμε ότι αυτό είναι αντί κώδικα της διανομής σας. Αυτό είναι ένα αρχείο που ονομάζεται ορθογράφος. Είναι διαθέσιμο ως μέρος της σημερινής Κώδικα Διαχείρισης του Δικτύου. Και Πάω να κύμα το χέρι μου στο πιο από τις λεπτομέρειες, αλλά αυτή είναι η πραγματικότητα ένα ενδιαφέρον παράδειγμα για το πώς μπορείτε να λιμάνι μια γλώσσα όπως η C πάνω σε PHP. Άνοιξα κυριολεκτικά δύο παράθυρα κειμένου, ένα με C δική μου εκδοχή της speller.c, και εγώ μόλις άρχισε να μεταφράζει το σε μου κατευθυνθείτε προς PHP και πληκτρολογώντας τη χρήση Το πλησιέστερο ισοδύναμο λειτουργίες. Έτσι, κάποια από αυτά τα πράγματα είναι διαφορετικά. Είδαμε τελευταία φορά ότι η PHP δεν χρησιμοποιεί περιλαμβάνουν αρκετά τον ίδιο τρόπο. Χρησιμοποιεί απαιτούν συνήθως, αν περιλαμβάνουν υπάρχει. Ορίστε είναι λίγο διαφορετικό από το # Define σε C, αλλά αυτό είναι πώς μπορούμε να κάνουμε μια σταθερή. $ Argc αποδεικνύεται υπάρχει στην PHP, έτσι έχουμε ξαναδεί. Αυτά είναι μόνο μεταβλητές, όλα που αρχίζουν με το σύμβολο του δολαρίου. Θυμηθείτε αυτά είναι απλώς ένα μάτσο των πλωτών σημεία. Έτσι, τα πολυλογώ, είστε ευπρόσδεκτοι να ξεφυλλίσετε αυτό αν και περίεργη, αυτό είναι σχεδόν μια γραμμή-προς-γραμμή μετατροπής της C έκδοση του speller.c σε PHP. Και θα μπορούσατε να το κάνετε αυτό και πάλι για μισή ντουζίνα άλλες γλώσσες. Αλλά αυτό που είναι ενδιαφέρον είναι αυτό. Ή τι είναι ειλικρινά απογοητευτικό είναι αυτό. Επιτρέψτε μου να πάω μπροστά και να πληκτρολογήσετε για dictionary.php, και ισχυρίζονται ότι είμαι πρόκειται να πάει μπροστά και εκ νέου εφαρμογή πρόβλημα που έθεσε έξι εδώ. Οπότε ας προτείνει, πρώτον, ότι σε αυτό το αρχείο, το οποίο θα υλοποιηθεί σε PHP, οπότε επιτρέψτε μου να ανοίξει ετικέτες μου έτσι. Επιτρέψτε μου να δώσω στον εαυτό μου μια παγκόσμια μεταβλητή, $ μέγεθος παίρνει μηδέν. Και Πάω να δώσει τον εαυτό μου ένα hash table. Θα χρησιμοποιήσετε ένα πίνακα κατακερματισμού για αυτό το πράγμα. Πώς μπορώ να δηλώσει ένα hash πίνακα στην PHP; Έγινε. OK. Έτσι άνοιγμα παρένθεσης κλείσιμο παρένθεσης αντιπροσωπεύει ό, τι σε PHP, όπως έχουμε δει; Μια σειρά, αλλά μια σειρά που θα μπορούσε είναι ένας associative array. Ένας associative array είναι μια δομή δεδομένων που συνεργάτες κλειδιά με τιμές. Τώρα, με τον απλούστερο αριθμητικά ευρετήριο array, αυτά τα κλειδιά είναι αυτό; Μηδέν, ένα, δύο, τρία, έτσι δεν είναι; Παλιά τα πράγματα πίσω από το σχολείο C. Αλλά μπορεί επίσης να είναι χορδές, όπως foo και bar, ή Maxwell, ή οποιαδήποτε τέτοια string. Έτσι μπορώ να μόχλευσης που ακριβώς σε μια στιγμή. Επιτρέψτε μου να πάμε μπροστά και να κηρύξει μια λειτουργία, όπως - ας κάνουμε φορτίο () πρώτα. Έτσι, το φορτίο λειτουργίας (). Και PHP είναι λίγο διαφορετικό σε ότι πληκτρολογείτε κυριολεκτικά τη λειτουργία, αλλά δεν πληκτρολογήσετε ένα είδος επιστροφής. Πάω να πάει μπροστά και να πω ότι η φορτίο () λειτουργία θα πρέπει να λάβει επιχείρημα $ λεξικό, απλά όπως η έκδοση C έκανε. Κάνω ότι από τη μνήμη. Και εγώ προτείνω ότι είμαι πρόκειται να το κάνουμε αυτό. Είμαι απλώς πρόκειται να κάνει foreach. Πάω να καλέσετε μια λειτουργία που ονομάζεται αρχείου (), περνώντας στο όνομα του ότι αρχείο, το οποίο είναι η μεταβλητή $ $ Λεξικό ως λέξη. Και τότε μέσα μου για το βρόχο εδώ, είμαι πρόκειται να πάει μπροστά και να αποθηκεύουν κατά τη γνώμη μου $ $ Πίνακα που μαθευτεί αλήθεια. Έγινε. Περίμενε. Έγινε. OK. Αυτό είναι το φορτίο (λειτουργία) λένε στην PHP. Τώρα, γιατί αυτό το έργο; Και είμαι το είδος της εξαπάτησης εδώ. Έτσι, το ένα, εμείς είδαμε foreach εν συντομία την τελευταία φορά. Σημαίνει απλώς ότι μπορείτε να επαναλάβετε σε μια σειρά χωρίς να ενοχλεί με i και τα η και συν συν, και όλα αυτά. Λεξικό είναι φυσικά το όνομα του αρχείου, κάτι σαν μικρές ή μεγάλες, οι δύο λεξικά χρησιμοποιήσαμε την τελευταία φορά. Το αρχείο είναι μια λειτουργία που ανοίγει το κείμενο αρχείο, διαβάζει στη γραμμή, και τα χέρια σας πίσω μια τεράστια ποικιλία, καθένα από τα στοιχεία της οποίας είναι ένα γραμμή από το αρχείο. Έτσι, αυτό είναι ο συνδυασμός της fopen, και fread, και ενώ βρόχο, και fclose, και όλα αυτά. Τέλος, η λέξη σημαίνει απλά ότι η μεταβλητή Πάω να έχουν πρόσβαση σε σε κάθε επανάληψη σε αυτό το βρόχο. Έτσι, με λίγα λόγια, αυτό σημαίνει επένδυση εδώ ανοίξει το αρχείο του οποίου το όνομα είναι λεξικό, η μεταβλητή, επαναλάβετε σε την γραμμή, και κάθε φορά που θα πάρετε μια γραμμή, κατάστημα σε μια μεταβλητή που ονομάζεται λέξη, και στη συνέχεια να κάνουμε κάτι με τη λέξη. Τι θέλω να κάνω; Θέλω να βάλω λέξη στον πίνακα κατακερματισμού μου. Λοιπόν, μπορώ να βάλω κάτι στο μου hash πίνακα ακριβώς όπως και στη C χρησιμοποιώντας αγκύλες. Αυτό είναι το όνομα για τον πίνακα hash μου. Θα πάω με τον δείκτη σε εκείνο το hash πίνακας σε αυτήν την τοποθεσία. Έτσι, δεν περικλείουν το μηδέν, δεν περικλείουν ένα. Quote Στήριγμα unquote κάτι, ό, τι αυτή η λέξη είναι. Και ακριβώς όπως μπορεί να έχετε στο δικό σας trie κατακερματισμού εργασίας τραπέζι, απλά κατάστημα ουσιαστικά ένα Boolean, εμμέσως ή ρητά. Έγινε. Είμαι αποθήκευση η αξία αληθινός. Τώρα υπάρχει μια-δυο πράγματα Είμαι πλημμελείς εδώ. Τεχνικά, υπάρχει μετάβαση να είναι μια ενοχλητικό νέα γραμμή, / n, στο τέλος του κάθε μία από αυτές τις λέξεις. Έτσι, μάλλον θα πρέπει να καλέσετε μια συνάρτηση PHP ονομάζεται μπριζόλα (), η οποία θα κυριολεκτικά ψιλοκόψτε ότι μακριά. Και εγώ πρέπει πραγματικά να κάνουμε ένα άλλο πράγμα. Θα πρέπει πιθανώς να αυξήσετε το μέγεθος σε κάθε επανάληψη, έτσι είμαι παρακολούθηση σε παγκόσμιο επίπεδο από ό, τι είναι. Και ειλικρινά, και αυτό είναι ένα από τα stupider πτυχές της PHP, αν είστε χρησιμοποιώντας μια καθολική μεταβλητή, θα πρέπει να έχετε να πω ρητά ότι είστε. Έτσι, Πάω να πληκτρολογήσετε στην πραγματικότητα σε παγκόσμιο επίπεδο $ Μέγεθος, η παγκόσμια $ τραπέζι, και τώρα η λειτουργία μου είναι πλήρης. Έτσι, δεν είναι τόσο απλό όπως και πριν, αλλά ίσως να πήρε λιγότερο χρόνο από ό, τι το C έκδοση, ίσως; OK. Έτσι τώρα ας κάνουμε τον έλεγχο (λειτουργία). Ας δούμε αν αυτό τουλάχιστον πήρε το ώρες στο τέλος που μας πήρε στο C. Έτσι, επιτρέψτε μου να πάει μπροστά και να κηρύξει ελέγχετε ως συνάρτηση. Λαμβάνει στη λέξη επιχείρημα, το οποίο είναι πρόκειται να προέλθει από ορθογράφος. Και είμαι απλώς πρόκειται να ελέγξετε αν το ακόλουθη μεταβλητή isset, τραπέζι βραχίονα strtolower της λέξης - ας ισορροπήσει όλα παρενθέσεις μου - στη συνέχεια επιστρέφουν αλήθεια. Αλλιώς - ότι ήταν πραγματικά ο σκληρός μέρος αυτού του προγράμματος. Αλλιώς, επιστρέφει false. Έγινε. Αυτός είναι ο έλεγχος (). Τώρα, γιατί αυτό το έργο; Λοιπόν, ένα έχω περάσει σε μια λέξη, το οποίο είναι ένα string. Δύο, Φεύγω εσωτερικό του κατακερματισμού πίνακα, ο οποίος ονομάζεται $ πίνακα. Είμαι αυτό που αναγκάζει σε πεζά καλώντας μια λειτουργία αρκετά παρόμοια tolower () σε C, αλλά αυτό δεν κάνει ολόκληρη τη λέξη, όχι ένα ενιαίο χαρακτήρα. Και αν αυτό έχει οριστεί, με άλλα λόγια εκεί έχει οριστεί μια τιμή, με άλλα λόγια, αν είναι αλήθεια, τότε ναι, αυτό είναι μια λέξη. Επειδή έβαλα εκεί με το φορτίο (). Και αν όχι, θα πάω να επιστρέψει false. Τώρα οι άλλοι είναι εύκολη. Μέγεθος λειτουργία (), πώς μπορώ να κάνω αυτό; Κάνω ουσιαστικά επιστροφή $ μέγεθος. Αλλά εγώ τεχνικά πρέπει να κάνει αυτό το ενοχλητικό πράγμα. Και στην πραγματικότητα μέχρι ακούω, έκοβα μια γωνία πάρα πολλά. Πραγματικά πρέπει να κάνουμε την παγκόσμια $ πίνακα. Αλλά αυτό που είπε, ξεφορτώσουν). Ξεφορτώσουν () είναι καταπληκτική. Εκφόρτωσης λειτουργία (). Πώς μπορώ να θέλουν να εφαρμόσουν εκφόρτωσης (); Έγινε. OK. Έτσι ξεφορτώσουν (), η διαχείριση μνήμης είναι εντελώς ληφθεί μέριμνα για εσάς κάτι σαν PHP και πολλά γλωσσών υψηλότερου επιπέδου. Έτσι, αυτό είναι καταπληκτικό. Όπως και γιατί η κόλαση δεν περάσαμε το παρελθόν συν οκτώ εβδομάδες στο γράψιμο C προφανώς πολύ αργοί, πραγματικά το χρόνο καταναλώνουν προβλήματα με δεκάδες ώρες της εργάζονται κάτω από τις ζώνες μας; Λοιπόν, για ένα πράγμα, αυτό μπορεί να λειτουργήσει πρόστιμο για τα μικρά προγράμματα. Είναι σίγουρα επιτάχυνε μου χρόνο ανάπτυξης. Αλλά ας δούμε τι θα συμβεί στον πραγματικό κόσμο. Επιτρέψτε μου να μπω σε αυτόν τον κατάλογο σε ένα παράθυρο τερματικού. Δεν υπάρχει ορθογράφος. Και παρατηρήσετε ως μέρος, και ίσως έχουν αντιμετωπίσει αυτό το πρόβλημα που έξι ή επτά πρόβλημα που. Δεν χρειάζεται να είναι απολύτως τέλος PHP αρχεία με. php. Αν βάλετε μια γραμμή σαν την πρώτη σε ένα η κορυφή, αυτό είναι μια ειδική γραμμή της σύνταξης που σημαίνει ουσιαστικά βρείτε το πρόγραμμα που ονομάζεται PHP και να το χρησιμοποιήσετε για να ερμηνεύσει αυτό το αρχείο. Μέχρι τώρα κανείς δεν ξέρει πραγματικά ότι Τρέχω ένα πρόγραμμα PHP. Μπορώ να το τρέξω όπως ακριβώς και αν ήταν κάτι που καταρτίζονται C. Αλλά εδώ είναι το πράγμα. Στην πραγματικότητα, ας το κάνουμε πάλι. Dropbox/pset6 /. Υπάρχει ορθογράφος. OK, 0,44 δευτερόλεπτα. Πήρε πιο γρήγορα αυτή τη φορά. Τώρα ας πάμε στην έκδοση της PHP. Προσεγμένο. Σκεφτείτε όμως πόσο χρόνο Έσωσα σε ώρες γραφείου. OK. Έτσι 3,59 δευτερόλεπτα, η οποία στην πραγματικότητα δεν ακούγεται ούτε ακριβή. Αλλά αυτό είναι επειδή τα πολυλογώ, όταν εκτυπώνετε ένα τεράστιο ποσό πράγματα στην οθόνη, ότι ίδια επιβραδύνει τα πράγματα. Τι έγινε πραγματικά το CPU στο συσκευή ήταν 3,59 δευτερόλεπτα, σε αντίθεση με την C, η οποία έλαβε 0,44 δευτερόλεπτα πιο πρόσφατα. Αυτό είναι πραγματικά μια τάξη μέγεθος διαφορετικό. Επομένως, ποια είναι η τιμή που προέρχονται από; Γιατί είναι τόσο αργή; Γιατί η PHP εκτελεί τόσο άσχημα; Danielle; ΚΟΙΝΟ: Δεν έκανε πραγματικά χρησιμοποιήστε ένα hash table. DAVID MALAN: Δεν είχα πραγματικά χρησιμοποιήστε ένα hash table. Γι 'αυτό το είδος έκανε. Έτσι είναι ένα associative array. Το πιο πιθανό, αν οι άνθρωποι της PHP πολύ έξυπνο, που χρησιμοποιούνται κάτω από το κουκούλα ένα πραγματικό hash εφαρμοστεί πίνακα σε κάτι όπως η C ή C + +. Αλλά. Ναι. ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: Ναι. Έτσι, κάθε μία από τις λειτουργίες που έγραψα τώρα - στην πραγματικότητα, μπορεί να σας πω ότι για μια ακόμη φορά ένα λίγο πιο δυνατά; Κοινό: Κάθε μία από τις λειτουργίες που που περιλαμβάνεται έχει μια πολύ πιο πλήρη χωρητικότητα από ό, τι - DAVID MALAN: Οπότε αυτό είναι πολύ αληθινό. Υπάρχει μια πολύ πιο γενικά ότι είμαστε δεν είναι πραγματικά βλέποντας εστιάζοντας μόνο σε dictionary.php, που έγραψα. Αντίθετα, υπάρχει μια ολόκληρη διερμηνέα πηγαίνει στο παρασκήνιο. Πράγματι, όταν έτρεξα αυτό το πρόγραμμα, δεν έτρεχε καταρτίζονται μηδενικά και μονάδες σχεδιαστεί για Intel CPU μου. Αντ 'αυτού, λειτουργεί γραμμή προς γραμμή PHP κώδικα που μοιάζει ακριβώς σαν να πληκτρολογήσει. Και έτσι κάθε φορά που χρησιμοποιείτε ένα ερμηνεύεται γλώσσα, πραγματικά να κάνουμε πληρώσει αυτό το τίμημα. Είναι πρόκειται να πάρει κάποιο χρόνο για να διαβάσετε top αρχείο σας προς τα κάτω, από αριστερά προς δεξιά, και στη συνέχεια να εκτελέσει κάθε γραμμή ξανά και ξανά. Τώρα, στην πραγματικότητα, ειδικά στο διαδίκτυο, μπορείτε να επιταχύνει πραγματικά τη διαδικασία αυτή από την προσωρινή αποθήκευση των αποτελεσμάτων της PHP κώδικας ερμηνεύεται. Και αυτό είναι λογικό στο διαδίκτυο, διότι εάν δεν έχετε έναν χρήστη, όπως μου εδώ, αλλά 1.000 ή 10.000 χρήστες, στη συνέχεια, ίσως η πρώτη φορά που το αρχείο είναι πρόσβαση είναι αργή, αλλά στη συνέχεια Είναι πολύ πιο γρήγορα. Αλλά αυτό πάρα πολύ, και πάλι, είναι ένα εμπόριο off. Και για κάτι σαν ερευνητικά δεδομένα που, ή ακόμα και κάτι μεγάλο, όπως αυτό, οι χρήστες σας τελικά θα αρχίζουν να αισθάνονται ότι η επιβράδυνση. Έτσι, με λίγα λόγια, ερμηνευμένες γλώσσες είναι πολύ της μόδας, πολύ δημοφιλής, και ειλικρινά είναι ίσως οι γλώσσες θα πρέπει να φτάσουν κατά την επίλυση προβλημάτων μετά την CS50. Αλλά συνειδητοποιούν πόσο είστε πραγματικά λαμβάνοντας ως δεδομένο κάτω από το καπό πραγματικά οι τελευταίες αρκετές εβδομάδες στην hash πίνακες, και τα δέντρα, και προσπαθεί, που χρησιμοποιούνται τελικά στην πραγματικότητα εφαρμόσουν τα πράγματα όπως τα ανοιχτά βραχίονα, αγκύλη, το οποίο μπορούμε τώρα ευγνωμοσύνη θεωρούμε δεδομένο. Έτσι, ας ρίξουμε μια ματιά τώρα σε αυτό το πλαίσιο ιστού. Και ανέφερα την τελευταία φορά ότι υπάρχει ένα μάτσο superglobals σε PHP που είναι πραγματικά δεν έχει σημασία στη γραμμή εντολών. Είναι πιο σημαντικές στο πλαίσιο χρήση της PHP σε ένα πλαίσιο web. Έτσι τρέχοντας την PHP σε έναν web server, προκειμένου να δημιουργήσει πράγματα όπως HTML. Και έχουμε μια ματιά στο $ _GET και $ _POST, και αυτό είναι όπου αυτόματα χρηστών είσοδος καταλήγει απλά αν υποβάλει μορφή σε ένα αρχείο με κατάληξη. php σε μια ιστοσελίδα διακομιστή όπως η συσκευή. Αλλά ας δούμε εν συντομία $ _COOKIE Και $ _SESSION. Με άλλα λόγια, ό, τι είναι ένα cookie, όπως μπορείτε να το καταλάβετε, στο πλαίσιο της χρησιμοποιώντας το διαδίκτυο; ΚΟΙΝΟ: αρχείο στον υπολογιστή. DAVID MALAN: Ναι. Είναι ένα αρχείο στον υπολογιστή του χρήστη φυτεύτηκαν από οποιονδήποτε ιστότοπο τυχαίνει να επισκεφθείτε. Έτσι, όταν θα πάτε στο Facebook, όταν θα πάτε να bankofamerica.com, όταν θα πάτε στο google.com, όταν θα πάτε σχεδόν σε κάθε ιστοσελίδα στον κόσμο αυτές τις μέρες, συμπεριλαμβανομένων cs50.net, ένα cookie που φυτεύτηκαν στον υπολογιστή σας, το οποίο είναι είτε μια τιμή που είναι αποθηκευμένη στη μνήμη RAM σε σας υπολογιστή στη μνήμη του προγράμματος περιήγησης σας ή Μερικές φορές μάλιστα ένα αρχείο που είναι αποθηκευμένο στο σκληρό σας δίσκο. Και αυτό που συνήθως αποθηκεύονται σε αυτό το αρχείο δεν είναι το όνομα χρήστη σας, δεν σας κωδικό πρόσβασης, συνήθως δεν είναι κάτι ευαίσθητα, εκτός εάν η ιστοσελίδα δεν είναι τόσο καλά με την ασφάλειά τους, αλλά μάλλον είναι ένα μεγάλο μοναδικό αναγνωριστικό μεταξύ άλλα πράγματα. Είναι ένα μεγάλο τυχαίο αριθμό που φυτεύτηκαν στον υπολογιστή σας υπολογιστή, αλλά μπορείτε να σκεφτείτε ως ένα είδος εικονικής σφραγίδα χέρι σαν από μια λέσχη ή κάποιο πάρκο ψυχαγωγίας που επιτρέπει το προσωπικό, οι ιδιοκτήτες που υπηρεσία, για να θυμηθούμε ποιος είσαι. Έτσι, αν το μεγάλο τυχαίος αριθμός είναι σαν 12345678, αν και αυτό είναι προφανώς δεν είναι τυχαίο, σκεφτείτε ότι η σφραγίδα χέρι ότι όταν επισκέπτεστε facebook.com για πρώτη φορά, σφραγίζουν τον αριθμό στο χέρι σας. Και τότε γιατί μιλάτε HTTP, θα είναι ένα πρόγραμμα περιήγησης, και επειδή το Facebook προφανώς μιλά την ίδια ως web διακομιστή, το πρωτόκολλο HTTP αναφέρει ότι κάθε φορά που στη συνέχεια επισκεφτείτε facebook.com, είτε πρόκειται για ένα δεύτερο αργότερα, μία ώρα αργότερα, ακόμη και την επόμενη μέρα, εφ 'όσον δεν έχετε ρητά αποσυνδεθεί, η οποία ουσιαστικά Είναι σαν το πλύσιμο των χεριών σας. HTTP λέει ότι θα πρέπει να παρουσιάσει σας χέρι σφραγίδα κάθε φορά επιστροφή στην εν λόγω ιστοσελίδα. Τι Facebook κάνει τότε είναι που ματιά σε αυτό σφραγίδα χέρι και λένε, OH, 123456789. Δεν ξέρω με την πρώτη ματιά ότι αυτό είναι ο David Malan στο Cambridge, Massachusetts, αλλά μπορούν να ελέγχουν τους βάση δεδομένων και να πει, OH, το πρόσωπο για του οποίου ο υπολογιστής θα φυτευτεί 123456789 είναι ο David Malan από Cambridge, Μασαχουσέτη. Ας δείξουμε ότι χρήστη, τότε το προφίλ του σελίδας ή Ειδησεογραφία του. Αλλά υπάρχει ένα πρόβλημα εδώ, αν αυτό είναι το πώς λειτουργεί πραγματικά το διαδίκτυο. Ας ρίξουμε μια ματιά σε ένα γρήγορο παράδειγμα. Ας πραγματικά να πάμε να πούμε facebook.com. Αλλά πριν θα μπορούσαμε να πάμε εκεί, ας Θέλω να προχωρήσει και να ανοίξει του Chrome Επιθεωρητής εδώ κάτω. Επιτρέψτε μου να δούμε την καρτέλα δικτύου. Και τώρα ας προχωρήσουμε και πληκτρολογήστε σε https://facebook.com. Και το κάνω αυτό, έτσι ώστε δεν βλέπουμε όλες αυτές τις ανακατευθύνσεις και των αποβλήτων χρόνο ψάχνοντας μέσω αυτών. Επιτρέψτε μου να πατήστε enter. Εντάξει. Βλέπουμε ένα σωρό των αιτήσεων. Έρχεται το Facebook. Υπάρχει μια ολόκληρη δέσμη των αρχείων. Και εδώ, ανά αναφορά μου τελευταία φορά λανθάνουσα κατάσταση, που είναι πολλές αιτήσεις HTTP. Αλλά το πρώτο είναι πιθανώς η πιο ενδιαφέρουσα. Οπότε ας μετακινηθείτε προς τα κάτω εδώ, και Θα μεγέθυνση σε ένα δευτερόλεπτο. Αυτό πρόκειται να είναι το είδος της ένα χάος, αλλά ας δούμε. Facebook μας μια αποστολή σωρό πράγματα. Αλλά στάσου, ενδιαφέρουσα. Είναι φύτευση όχι μία, αλλά τέσσερις χέρι σφραγίδες πάνω στο χέρι μου εδώ. Set-cookie, το Set-cookie, το set-μπισκότο, set-μπισκότο. Και υπάρχουν μερικά χαρακτηριστικά εδώ. Όλοι τους αναφέρουμε μερικά το είδος της λήξης. Και αυτό μοιάζει με το Facebook ελπίζει να μου το θυμηθείτε μέχρι το 2015. Έτσι, αυτό είναι πιθανώς το χρόνο κατά τον οποίο Θα πρέπει να αποσυνδεθείτε ή απλώς θα αυτόματα υποθέτουν ότι είμαι δεν έρχονται πίσω. Έτσι, αυτό είναι πραγματικά ένα αξιοπρεπές χρονικό διάστημα. Και υπάρχουν και κάποια άλλα πράγματα που συμβαίνουν εδώ. Αυτό το cookie φαίνεται να είναι δια της βίας διαγράφεται λέγοντας ότι έληξε το 1970 πριν υπήρχε cookies. Έτσι, ο browser είναι ακριβώς πρόκειται να αναλάβει OK, αυτό είναι σαν να το πλύσιμο των χεριών σφραγίδα. Τώρα, όμως, όταν το πρόγραμμα περιήγησης μου κάνει μια μεταγενέστερη αίτηση - επιτρέψτε μου να προχωρήσει και να το κάνουμε αυτό ξανά και reload. Τώρα, επιτρέψτε μου να μετακινηθείτε προς τα πίσω το top αίτηση και πηγαίνετε προς τα κάτω εδώ, να ζητήσει κεφαλίδες. Παρατηρήστε αυτό. Έτσι τώρα είμαι κάτω δεν κεφαλίδες απόκρισης, αλλά παρατηρήσετε ότι λέει κεφαλίδες αίτησης. Και να παρατηρήσετε ότι ο φυλλομετρητής μου ως μέρος της αιτήσεώς της, μετά το χτύπημα reload έχει αποστέλλονται τουλάχιστον τα ακόλουθα πληροφορίες. Δεν έχει οριστεί-cookie, αλλά μπισκότο. Έτσι, αυτή είναι η γραμμή, η κεφαλίδα HTTP, ώστε να μιλήσει, όπου browser μου είναι ένα είδος χωρίς να μου το γνωρίζουν παρουσίαση το χέρι μου για την επιθεώρηση του Facebook. Έτσι, αυτά τα cookies μπορεί να είναι χρησιμοποιείται στη συνέχεια για ό, τι; Για να θυμηθείτε ποιοι είστε, ή να θυμηθείτε πώς πολλές φορές έχετε πάει εκεί, ή τίποτα. Έτσι, εδώ είναι counter.php. Και επιτρέψτε μου να μεγεθύνετε την γραμματοσειρά. Και κάθε φορά που επαναφορτώστε τη σελίδα, σημείωση Είναι να θυμόμαστε πόσες φορές Έχω πάει εκεί. Λοιπόν, αυτό δεν είναι όλα αυτά εντυπωσιακά. Ας κλείσει αυτό το tab, και τώρα ας πάμε πίσω στο http://localhost/counter.php. Ω, αυτό είναι ενδιαφέρον. Εξακολουθεί να θυμόμαστε, ακόμη και αν και έχω κλείσει την καρτέλα. Και ειλικρινά, αν κλείσετε το πρόγραμμα περιήγησης, εάν εφαρμοστεί με τον σωστό τρόπο, θα θα μπορούσε να εξακολουθεί να θυμόμαστε ότι αυτός ο χρήστης είναι που αυτός ή αυτή ήταν η πρώτη φορά, και μόνο μία φορά πάω στο μενού του Chrome, η οποία εδώ είναι εδώ, και να πάει σε Ιστορία, και κάντε κλικ στο κουμπί Εκκαθάριση δεδομένων περιήγησης, όπως κάποιοι από εσάς μπορεί να έχετε στο παρελθόν, μόνο τότε θα τα cookies σας πραγματικά να διαγραφούν κατά τη διάρκεια web ανάπτυξης. Έτσι, αν πάμε - ας κλείνω gedit εδώ. Και αν πάμε τώρα σε αυτό το αρχείο. Επιτρέψτε μου να μπω σε μας vhosts / localhost / δημόσια, και επιτρέψτε μου να κάνω counter.php. Σημειώστε ότι αυτό είναι ένα αρκετά απλό πρόγραμμα. Είναι μια πολύ απλή ιστοσελίδα. Έτσι, η αρχή του αρχείου είναι απλά σχόλια. Αλλά εδώ είναι μια νέα γραμμή που θα μπορεί να έχουμε δει ήδη σε p-έθεσε επτά, session_start (). Αυτή είναι μια γραμμή κώδικα PHP που λέει ουσιαστικά το web server, κάνουν Φροντίστε να σφραγίζουν τα χέρια και να κάνουν Βεβαιωθείτε ότι έχετε ελέγξει το χέρι γραμματόσημα. Αυτό είναι το μόνο που κάνει γραμμή, και κάνει όλα αυτή τη διαδικασία για μας. Στη συνέχεια παρατηρήσετε Έχω μόνο δύο υποκαταστήματα εδώ. Αν το κλειδί μετρητή μέσα σ 'αυτό ειδική global μεταβλητή που ονομάζεται $ _SESSION Βρίσκεται - με άλλα λόγια, αν υπάρχει κάποια αξία εκεί - ας το πάρει και να το αποθηκεύσετε σε ένα τοπικό μεταβλητή $ μετρητή. Αλλιώς, ας αναθέσει $, σε αντίθεση η προεπιλεγμένη τιμή 0. Τώρα εδώ είναι μια πτυχή της PHP που είναι ταυτόχρονα ευλογία και κατάρα. PHP είναι λίγο ατημέλητη. Έτσι, ενώ στην C, ποια θα ήταν η πεδίο της καταπολέμησης έχουν είτε εδώ ή εδώ; Θα έχουν περιοριστεί σε αυτές τις αγκύλες. Μαντέψτε τι; Στην PHP, υπάρχει ακόμα, εκτός από εκείνες άγκιστρα, εδώ, και εδώ, και εδώ, και εδώ, και ακόμη και κάτω. Έτσι λέω αυτό είναι μια ευλογία, με την έννοια ότι δεν έχετε να σκεφτείτε ως σκληρά όπως κάναμε πριν μερικές εβδομάδες. Αλλά είναι επίσης ένα κομμάτι από ένα κατάρα σε αυτό δεν έχει σημασία, όπου μπορείτε να χρησιμοποιήσετε μια μεταβλητή σε PHP, τουλάχιστον σε ένα πρόγραμμα όπως αυτό, είναι παγκοσμίως προσβάσιμο καλύτερο ή το χειρότερο. Έτσι, θα πρέπει να έχετε κατά νου ότι τώρα μεταβλητές σας δεν μπορεί να είναι απροσδιόριστη. Ίσως έχετε ορίζεται αλλού. Αλλά τι θα πάω να κάνω τελικά; Πάω να αποθηκεύουν στο εσωτερικό της σφαιρικής μεταβλητή ως αξία του μετρητή κλειδί το αποτέλεσμα της κάνει μετρητή συν 1. Έτσι, αυτό είναι μόνο η αριθμητική που κάνει το προσαύξησης αυτού του μετρητή. Και το γεγονός ότι είμαι αποθήκευση ότι αξία πίσω εδώ μέσα είναι να κατ 'ουσίαν, την ενημέρωση της βάσης δεδομένων για να να θυμάστε ότι 123456789 χρήστης έχει εδώ δύο φορές. Και όταν το κάνω και πάλι την επόμενη φορά που θα επαναλάβετε τη φόρτωση της σελίδας, πρόκειται να ελέγξει σφραγίδα το χέρι μου και να πω, OH, 123456789 χρήστης έχει πλέον εδώ τρεις φορές. Και έτσι τι PHP και παρόμοιες γλώσσες κάνουν για μας είναι ότι είναι υπολογίζοντας πώς και πού και για πόσο καιρό για την αποθήκευση τιμών σε αυτή την ειδική superglobal. Και αυτό Superglobal την επόμενη φορά που θα επισκεφθείτε την σελίδα είναι είδος μαγείας προ-πυκνοκατοικημένη, γεμάτη με τις αξίες που υπήρχαν την τελευταία φορά που επισκέφθηκε, αν αυτό ήταν πριν από ένα δευτερόλεπτο, μια εβδομάδα Πριν, ή το 2013 και είμαστε τώρα μιλάμε περίπου το 2015. PHP και το φροντίζουν web server όλα αυτά για εσάς. ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: μεταβλητές στην PHP είναι ουσιαστικά πάντα παγκόσμιας εκτός αν δηλώνουν τους μέσα από μια συνάρτηση, και στη συνέχεια να είναι σε τοπικό επίπεδο, η λειτουργία μόνο. Αλλά επειδή δεν έχω γράψει κάποια λειτουργίες, είναι πλέον αποτελεσματικά παγκόσμια καθ 'όλη το αρχείο μου εδώ. ΚΟΙΝΟ: Είναι ένας τρόπος υπάρχει για να γίνουν οι τοπικές; DAVID MALAN: Υπάρχει κάποια τρόπος για να κάνει τους τοπικούς; Μόνο από την πρώτη συσκευασία τους σε λειτουργίες. Η οποία στην τελευταία έκδοση του PHP, μπορείτε να το κάνετε αυτό με μια ανώνυμη συνάρτηση. Αλλά περισσότερα για αυτό στο πλαίσιο της JavaScript. Όμως, η σύντομη απάντηση είναι όχι. Η μεγαλύτερη απάντηση είναι ναι. Νίκαια. Καλή ερώτηση κουίζ. Εντάξει. Έτσι, τέλος, η ίδια η σελίδα είναι πραγματικά αρκετά απλή. Σημειώστε ότι από τη στιγμή που βγείτε από τη λειτουργία PHP, ανάκληση ότι όλα αυτά τα πράγματα κάτω παρακάτω είναι ακριβώς πρόκειται να πάρει σούβλα από τις πρώτες στον browser. Ποια είναι καλό, γιατί δεν θέλετε να στείλετε ο χρήστης κάποια HTML, αλλά θέλω να ενημερώσετε δυναμικά αυτό το HTML. Και ένας τρόπος που μπορώ να το κάνετε αυτό είναι να ταξινομήσετε πολύ γρήγορα πέσει πίσω σε PHP λειτουργία, η χρήση ανοικτού βραχίονα ερωτηματικό σύμβολο της ισότητας, και στη συνέχεια την έξοδο του αξία του μετρητή. Ή αν αυτό φαίνεται λίγο αινιγματικό, αυτό σύμβολο της ισότητας είναι στην πραγματικότητα μόνο μερικά συντακτική ζάχαρη γι 'αυτό printf ($ counter). Αλλά ειλικρινά, αυτό είναι λίγο άσχημο και λίγο ενοχλητικό να πληκτρολογήσετε. Έτσι, PHP προσφέρει πολύ όμορφα αυτό το χαρακτηριστικό όπου μπορείτε να το πω πιο συνοπτικά με τον ίδιο τρόπο. Έτσι τι συμβαίνει κάτω η κουκούλα; Ας δούμε γρήγορα στο δίκτυο καρτέλα εδώ για counter.php. Και επιτρέψτε μου να πάει μπροστά και το πρώτο ας ξεκαθαρίσουμε τα cookies. Ας σαφή δεδομένα περιήγησης, δεδομένου η αρχή του χρόνου. Τώρα, ας πάμε πίσω εδώ. Τώρα ας ξαναφορτώστε τη σελίδα. Και είμαι πίσω στο μηδέν. Επειδή η σφραγίδα χέρι μου έχει πλυθεί, Θα ήθελα τώρα να πάρετε ένα νέο cookie. Πράγματι, αν εξετάσουμε την καρτέλα του δικτύου και εξετάσουμε κεφαλίδες απόκρισης, ανακοίνωση ότι η συσκευή με την αποστολή ένα cookie του οποίου το όνομα είναι κάπως αυθαίρετα, αλλά το είδος της λογικά, PHPSESSID. Και μου στέλνει αυτό πραγματικά μεγάλο τυχαίο αριθμό. Δεν είναι αρκετά. Δεν είναι αρκετά δεκαεξαδικό. Είναι ένα είδος της αλφαριθμητική συμβολοσειρά, αλλά προφανώς είναι τυχαία. Και αυτή είναι η σφραγίδα χέρι, έτσι ώστε να μιλούν ότι είμαι αναφέρεται σε. Εν τω μεταξύ, αν κάνω κλικ reload και, στη συνέχεια, εξετάσουμε αυτή τη δεύτερη γραμμή για το δεύτερο μου αίτηση, ανακοίνωση τώρα που το αίτημά μου κεφαλίδες περιλαμβάνουν PHPSESSID ισούται με αυτό, δεν έχει οριστεί-cookie, αλλά μόνο μπισκότο. Και αυτό είναι παρουσίαση του προγράμματος περιήγησής μου χαρτοσήμου χέρι μου. Έτσι τώρα ως ένα τρέιλερ, και θα μιλήσουμε περισσότερο γι 'αυτό σε μια εβδομάδα ή έτσι, αλλά με ποιο τρόπο αυτό θα κάνει ευάλωτες, ο λογαριασμός σας στο Facebook ευάλωτα, και άλλα τέτοια λογαριασμούς ευάλωτη; ΚΟΙΝΟ: Αν κάποιος έχει το cookie σας. DAVID MALAN: Ναι, αν κάποιος έχει το cookie σας. Εννοώ πραγματικά, σαν κάποιοι από εσάς μπορεί να έχουν δοκιμάσει, όπως μια λέσχη ή ένα λούνα παρκ, αν δοκιμάσετε κάτι όπως αυτό για να αντιγράψετε τη σφραγίδα, αν και προς τα πίσω πάνω στο χέρι ενός άλλου ατόμου, και τότε αυτός ή αυτή παρουσιάζει ως δική τους, αν πραγματικά δεν φαίνονται ταυτόσημα, 123456789, τότε ο ιστός server είναι προφανώς ακριβώς πρόκειται να εμπιστεύονται ότι ο χρήστης είναι εσύ. Και αυτό είναι πράγματι ένα θεμελιώδες απειλή κάθε φορά που χρησιμοποιούν cookies γιατί αν κάποιος διακωμωδεί ακριβώς έτσι να μιλούν μπισκότο σας, στοιχεία από ό, τι είναι, είτε με αληθινά αντιγραφή κοιτάζοντας τον υπολογιστή σας και να είναι όπως, OK. Μπισκότο David είναι JJ3JIK και ούτω καθεξής, και τότε είναι αρκετά έξυπνος για να ξέρω πώς να είδος στείλετε χειροκίνητα ότι cookie από ένα πρόγραμμα περιήγησης ή από ένα πρόγραμμα που γράφουν, θα μπορούσαν εντελώς συνδεθείτε σε μια ιστοσελίδα όπως εσείς. Δεν είναι ότι σκληρά για να προσποιούνται ότι είναι κάποιος άλλος, αν δεν επανεξετάσουμε p-set δύο, η οποία εισήγαγε αυτό; ΚΟΙΝΟ: Κρυπτογραφία. DAVID MALAN: Ένα μικρό κομμάτι της κρυπτογραφίας. Απλή κρυπτογραφία, τουλάχιστον στην βασική έκδοση, αλλά crypto παρ 'όλα αυτά. λιγότερο. Έτσι αποδεικνύεται αν κρυπτογραφήσετε όλα αυτές οι κεφαλίδες, χρησιμοποιώντας κάτι που θα μπορούσε σήμερα γνωρίζουμε περισσότερο γνωστή ως SSL, secure socket layer, ή https:// διευθύνσεις URL, Στη συνέχεια όλα αυτά τα πράγματα είμαστε Ματιές πραγματικά κρυπτογραφημένα, πράγμα που σημαίνει ότι είναι σαν να Δεν μπορεί να διαβάσει τη σφραγίδα χέρι. Μόνο facebook.com μπορεί, ή google.com, ή στην περίπτωση αυτή, η συσκευή μπορεί διαβάστε την εν λόγω σφραγίδα χέρι. Τραγικά όμως, και πάλι, αυτό είναι πάρα πολύ κατάλληλο με την ουσία NSA των καθυστερήσεων, ακόμη SSL είναι εύθραυστα. Και δεν είναι πραγματικά ότι σκληρά να σπάσει ακόμη και η κρυπτογράφηση. Όχι τόσο από την πυρόλυση την κρυπτογράφηση, αλλά από την εξαπάτηση του πρόγραμμα περιήγησης στο αποκρυπτογράφηση τα δεδομένα πρόωρα. Αλλά και πάλι, θα σας πειράζω με ότι πριν από καιρό. Για τώρα, απλά πρέπει να φοβόμαστε. Είναι τραγικό το είδος της αληθινής. Εντάξει. Έτσι, όταν το κάνει αυτό μας αφήνει τώρα; Λοιπόν, ας το κάνουμε. Ας πάμε μπροστά και να πάρει μια γρήγορη teaser πριν πάρουμε ένα διάλειμμα. Και νομίζω ότι θα καθυστερήσει λίγο περισσότερο σήμερα, αλλά θα πάμε να βουτήξει κάτι καινούργιο και σέξι, η οποία θα σας ανοίξουν την όρεξη για ακόμη περισσότερα. Έτσι, αυτό είναι το teaser. Έτσι, SQL, αρχίσαμε να μιλάμε για ποτέ τόσο σύντομο χρονικό διάστημα την τελευταία φορά. Θα πραγματικά να λερώσετε τα χέρια σας με ορισμένα από αυτά σε ρ-σετ επτά. Και σε απλή γλώσσα, αυτό σημαίνει SQL - S-Q-L - κάνει για σας; Τι είναι αυτό; Ναι. ΚΟΙΝΟ: Ας έχετε πρόσβαση στα στοιχεία. DAVID MALAN: Ναι. Είναι ας έχετε πρόσβαση στα στοιχεία σε μια βάση δεδομένων. Structured Query Language. Και αυτό είναι ουσιαστικά ένα γλώσσα προγραμματισμού. Υπάρχουν χαρακτηριστικά της είναι ότι εμείς ακόμα δεν θα χρησιμοποιήσει στην τάξη. Αλλά μπορείτε να αποτελεσματικά ορίσετε συναρτήσεις. Λέγονται αποθηκεύονται διαδικασίες SQL. Αλλά θα κρατήσει αρκετά απλή και μόνο χρησιμοποιήσετε ορισμένες βασικές λειτουργίες όπως η επιλογή των δεδομένων, εισαγωγή δεδομένων, ενημέρωση των δεδομένων, καθώς και τη διαγραφή δεδομένων. Και μπορείτε πραγματικά να σκεφτείτε μια βάση δεδομένων, όπως μια βάση δεδομένων SQL, όπως ακριβώς είναι το Microsoft Excel. Επειδή SQL αναφέρεται σε μια σχεσιακή βάσης δεδομένων, όπου σχέση σημαίνει απλά πίνακες. Γραμμές και στήλες. Έτσι, οτιδήποτε μπορείτε να βάλετε σε ένα υπολογιστικό φύλλο όπως αυτό ή το Google Docs, θα μπορούσε να θέσει σε μια βάση δεδομένων SQL δηλώνοντας ένα τραπέζι. Τώρα, πώς μπορείτε πραγματικά να αποκτήσετε πρόσβαση οι πληροφορίες; Λοιπόν, με εντολές ή ερωτήματα όπως αυτό. SELECT, INSERT, UPDATE και DELETE. Και για το μεγαλύτερο μέρος, αυτά είναι η τέσσερις μόνο συστατικά που θα πρέπει να κάνει κάτι πολύ δυναμικά το πρόβλημα που επτά. Τώρα, πίσω στην ημέρα, θα κάνατε στην πραγματικότητα αλληλεπιδρούν με μια βάση δεδομένων σε μια μαύρο και άσπρο παράθυρο τερματικού σε Μια φωτεινή προτροπή σαν αυτό. Και η βάση δεδομένων που τρέχετε για το συσκευή ονομάζεται MySQL, η οποία είναι ελεύθερη και ανοικτή μηχανή βάσεων δεδομένων πηγής. Αν έχετε το Google και να διαβάσετε το Wikipedia το άρθρο, θα ξέρετε ότι το όνομα είναι ένα κομμάτι της μετάβασης για ορισμένες εκδόσεις του Linux. Maria βάση δεδομένων είναι στην πραγματικότητα ένα πιρούνι έτσι ώστε να μιλάμε για MySQL. Μεγάλη ιστορία σύντομη, Oracle αγόρασε την MySQL. Oracle είναι μια μεγάλη εταιρεία. Οι άνθρωποι έχουν ανησυχούν ότι θα δεν παραμένουν αρκετά ως open source, έτσι αυτό είναι απλώς ένα αντίγραφο της MySQL που είναι εξακολουθούν να είναι ελεύθερα, ακόμα ανοικτή πηγή, και εγκατασταθεί στο Fedora Linux από προεπιλογή. Αλλά αυτό είναι το είδος του πόνου στην λαιμό να εξοικειωθούν με βάση δεδομένων με αυτόν τον τρόπο. Έτσι έχουμε συμπεριλάβει στη συσκευή CS50 ένα δωρεάν εργαλείο ανοικτού κώδικα που ονομάζεται phpMyAdmin. Μόνο τυχαίο το γεγονός ότι είναι γραμμένο σε PHP. Δεν υπάρχει θεμελιώδης χρειάζονται για την PHP εδώ. Αλλά αυτό είναι μόνο ένα web-based εργαλείο που θα κατεβάσει δωρεάν, εγκατεστημένο σε η συσκευή, που μας επιτρέπει να έχουμε μια γραφική διεπαφή χρήστη με το οποίο να διερευνήσει το p-set επτά δεδομένων με η οποία για τη δημιουργία νέων βάσεων δεδομένων, ας πούμε για ίδια τελική έργο σας αν θέλετε αρέσει, και τελικά, να δημιουργήσουν δυναμικές ιστοσελίδες όπως CS50 Οικονομικών που σας επιτρέπουν να αναλύουμε τα δεδομένα και ενημέρωση των δεδομένων δυναμικά. Δεν πάμε να πρέπει να χρησιμοποιήσετε μόνο ένα απλό αρχείο κειμένου ή CSV. Μπορείτε να χρησιμοποιήσετε πραγματικά μια έξυπνη βάση δεδομένων προγράμματος, ώστε να μπορείτε να εκτελέσετε περισσότερες σύνθετα ερωτήματα από την απλή ανάγνωση τα πάντα γραμμικά. Έτσι, για παράδειγμα, αυτό είναι ό, τι δίνουμε σας έξω από το κουτί για το p-set επτά. Αυτό είναι ένας πίνακας με φαινομενικά τουλάχιστον τρεις στήλες, μία από τις οποίες είναι όνομα χρήστη, ένα εκ των οποίων είναι hash, και το άλλο των οποίων είναι αναγνωριστικό. Αλλά το ενδιαφέρον πράγμα, και μόνο για δώσουμε έμφαση μια σκέψη εδώ, το όνομα χρήστη είναι πιθανώς ήδη μοναδικό, έτσι δεν είναι; Θέλω να πω, οι περισσότεροι οποιαδήποτε ιστοσελίδα, εάν έχετε ένα όνομα χρήστη, υπάρχει δεν μπορεί να είναι δύο Caesars. Δεν μπορούν να υπάρχουν δύο Malans. Δεν μπορούν να υπάρχουν δύο jharvards. Μοναδική του. Σε αντίθετη περίπτωση, δεν ξέρουν που jharvard είναι στην πραγματικότητα. Λοιπόν, τι θα μπορούσε να είναι το κίνητρο για επίσης έχοντας μια τρίτη στήλη στα αριστερά εκεί που ονομάζεται ID, το οποίο μοιάζει με ένα αριθμός που είναι παρόμοια μοναδικό; Νιώθω λίγο περιττή για μένα με την πρώτη ματιά. Γιατί μπορεί να είναι συναρπαστικό να έχουμε όχι μόνο μοναδικά ονόματα, αλλά και μοναδικούς αριθμούς; Κοινό: Θα μπορούσαν να έχουν το ίδιο password. DAVID MALAN: Οι άνθρωποι μπορεί να έχουν το ίδιο password, σίγουρα. Αυτό θα μπορούσε να συμβεί απολύτως. Αλλά αν έχουν αυτό το μοναδικό όνομα χρήστη, I Θα έλεγα ότι αυτό δεν είναι πραγματικά το θέμα, γιατί αν πληκτρολογήσετε τους όνομα χρήστη, το μόνο που πρέπει να ελέγξετε τους κωδικό πρόσβασης, κατακερματισμού αυτής τους. Γιατί αλλιώς; ΚΟΙΝΟ: Ταχύτερη αναζήτηση. DAVID MALAN: Ταχύτερη αναζήτηση. Γιατί; ΚΟΙΝΟ: ID είναι μόνο μία. DAVID MALAN: ID είναι μόνο ένα χαρακτήρα, ή για να είμαι πιο ακριβής, είναι ένας αριθμός, έτσι είναι πιθανώς 32 bits ή κάτι τέτοιο. Ότι το όνομα, προφανώς Jason Hirschhorn είναι μέχρι εκεί είναι το είδος της γελοία καιρό, και πρόκειται να μου πάρει πολύ περισσότερο χρόνο σε string συγκρίνουν H-Ι-Κ-S-C-Η-Η-Ο-Κ-Ν, και ίσως α / 0 ή κάτι τέτοιο, προκειμένου να αναζητήσετε Jason, σε αντίθεση με μόνο λέγοντας μου δώστε το αριθμό των χρηστών δύο. Αυτό είναι 32 bits. Είναι ένα ενιαίο INT ότι θα πρέπει να συγκρίνετε. Και πράγματι, αυτό είναι ακριβώς γιατί βάσεις δεδομένων τείνουν να εκχωρήσετε μοναδικά αναγνωριστικά για να σειρές σε αυτές. Τώρα τα δεδομένα ποια άλλα είδη υπάρχουν Εκτός από INT και προφανώς χορδές σαν αυτό; Λοιπόν, για να είναι πιο σωστή, SQL βάσεις δεδομένων, όπως MySQL, έχουν ΧΑΡ πεδία. Και ΧΑΡ λίγο παραπλανητικά δεν είναι μια ενιαία ΧΑΡ. Ένα πεδίο CHAR σε μια βάση δεδομένων MySQL είναι έναν ή περισσότερους χαρακτήρες, αλλά είναι ένα σταθερό αριθμό χαρακτήρων. Έτσι, για παράδειγμα, αν πάω πάνω να phpMyAdmin, όπως μπορεί να έχετε ήδη, ή σύντομα θα είναι ένα πρόβλημα που επτά, και πάω στη βάση δεδομένων μου, και μόνο για διασκέδαση, ας δημιουργήσουμε ένα νέο πίνακα με το όνομα δοκιμή μόνο με δύο στήλες. Θα στη συνέχεια κάντε κλικ στο κουμπί Μετάβαση. Και αυτό θα γίνει αρκετά εξοικειωμένοι, ιδίως σε ό, πειραματιζόμαστε γύρω από τη δική σας. Εδώ θα μπορούσα να πληκτρολογήστε το αναγνωριστικό για να δημιουργήσετε ένα νέο πίνακα τύπου int. Αλλά εδώ να πληκτρολογήσετε το όνομα χρήστη για να αναδημιουργήσει ότι νωρίτερα πίνακα. Και παρατηρήσετε έχω ένα σωρό από είδη για να διαλέξετε. Και αυτό είναι πάρα πολύ γιατί phpMyAdmin το είδος της Νίκαιας. Είναι το είδος της αυτο-διδασκαλία σε ότι σας μπορεί να είναι ακριβώς το είδος του σημείου, και κάντε κλικ στο κουμπί, και εξετάσουμε αναπτυσσόμενο μενού, και να συναγάγει από ότι αυτό εξουσίες SQL σας δίνει. Και πράγματι, αν μπορώ να επιλέξω ΧΑΡ, εγώ τότε πρέπει να καθορίσετε το μήκος, ή πώς πολλές αξίες, πόσα ΧΑΡΑΚΤήρων. Έτσι, πολύ κοινές αξίες είναι τα πράγματα όπως 255, αλλά ότι είναι λίγο μεγάλη. Συνήθως είναι οκτώ για ένα όνομα χρήστη. Αλλά αυτό είναι λίγο μικρό αυτές τις μέρες. Έτσι, αυτό είναι μια απόφαση σχεδιασμού. Είναι 8 max χαρακτήρες, 32, 255, 1000; Είναι πραγματικά μέχρι σας. Αλλά μια CHAR πεδίο είναι ένας σταθερός αριθμός. Έτσι, επιλέγουν πολύ λίγα και είστε το είδος του βιδώνονται αν θέλετε ένα μεγαλύτερο όνομα. Επιλέξτε πάρα πολλά και ό, τι είναι το μειονέκτημα; ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: Είναι σπατάλη. Ακριβώς όπως και στην C, αν έχετε ένα μεγαλύτερο κομμάτι της μνήμης από ό, τι χρειάζεστε, είστε απλά χάσιμο χρόνου και σπατάλη χώρου. Έτσι, ως εναλλακτική λύση, υπάρχει VARCHAR, η οποία επιλύει αυτό το πρόβλημα με θεραπεία μήκος όχι ως ένα σταθερό μήκος, αλλά ως μέγιστο μήκος, και χρησιμοποιώντας ένα μεταβλητό αριθμό των χαρακτήρων, η οποία κατόπιν τείνει να χρησιμοποιεί μόνο όσες ΧΑΡΑΚΤήρων όπως σας πραγματικά ανάγκη. Αυτό ακούγεται τέλειο. Γιατί δεν μπορούμε να απαλλαγούμε από το ΧΑΡ δεδομένα στη συνέχεια, πληκτρολογήστε; Τι θα μπορούσε να είναι το μειονέκτημα της χρησιμοποιώντας VARCHARs, το οποίο ακούγεται σαν να είναι μια ωραία νίκη; Ναι; ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: Εντάξει, καλά. Έτσι, αν όλα τα δεδομένα σας είναι η ίδια μήκος, ποια είναι η ανησυχία; ΚΟΙΝΟ: Επειδή είστε σπατάλη δεδομένα λέγοντάς τους όλους. DAVID MALAN: Έτσι, αν όλα τα δεδομένα σας είναι το ίδιο μήκος, όμως, θα έλεγα ότι καθορίζοντας ένα μέγιστο μήκος για VARCHAR δεν είναι διαφορετική από την καθορίζοντας ένα σταθερό μήκος για ΧΑΡ ​​αν γνωρίζετε τον αριθμό αυτό εκ των προτέρων. Αλλά υπάρχει, πράγματι, και θα ταξινομήσετε του απόσπασμα από την απάντηση αυτή την πραγματικότητα ότι εξακολουθεί να υπάρχει ένα μέγιστο, η οποία θα μπορούσε να είναι ενοχλητικό, ειδικά αν αντιμετωπίζουν το όνομα ενός ατόμου που είναι ασυνήθιστα μεγάλη που δεν πρόβλεψη. Και είναι επίσης λίγο λιγότερο αποτελεσματική πραγματικά να ψάξετε για VARCHARs ως αντίθεση με την αναζήτηση ΧΑΡΑΚΤήρων, ιδίως για μεγάλα τραπέζια που έχουν πολλά και πολλά δεδομένα. Έτσι και εδώ, θεματικές είναι και πάλι Δεν προφανής επιλογή. Έτσι απλά για να σας δώσει μια αίσθηση των άλλων τύπους δεδομένων που θα μπορούσαν να ενδιαφέρουν είτε για την p-set επτά ή σε το μέλλον, υπάρχει INT. Υπάρχει BIGINT, η οποία είναι σαν πολύ καιρό. Τείνει να είναι 64 bits. Υπάρχει DECIMAL, τα οποία θα δείτε στο Το σύνολο πρόβλημα, το οποίο είναι ένα πολύ απάντηση καθαρότερο για τα προβλήματα που αντιμετώπισε με φλοτέρ και πλωτά ανακρίβεια σημείο. Και έπειτα υπάρχει DATETIME. Υπάρχει κυριολεκτικά ένας τύπος δεδομένων που έχει να μοιάζει με ένα έτος, το μήνα, την ημέρα, και μια ώρα, λεπτό και το δεύτερο. Αλλά SQL βάσεις δεδομένων έχουν επίσης τα πράγματα θα καλέσουμε ευρετήρια. Και ένας δείκτης είναι κάτι που καθορίσετε κατά τη δημιουργία του πίνακα κάνουν αναζητήσεις και άλλες λειτουργίες πιο αποτελεσματική. Συγκεκριμένα, υπάρχει κάτι που ονομάζεται Ο πρωταρχικός δείκτης που θα μπορούσατε δηλώνουν ως εξής. Το κάναμε αυτό για σας με το χρήστες του πίνακα που σας δίνουμε. Να σημειωθεί όμως αν ήταν το χέρι αναδημιουργία Ο πίνακας χρήστες εδώ δίνοντας ένα όνομα των χρηστών. Έχω ήδη καθορίσει ID. I καθορίζεται INT. Έχω καθορίσει το όνομα χρήστη με έως 32 χαρακτήρες. Αλλά αν συνεχίσετε την κύλιση σε αυτό το αρκετά μεγάλο παράθυρο, παρατηρούμε ότι υπάρχει μια σωρό άλλα πράγματα που μπορείτε να καθορίσετε. Ένα, μπορώ να καθορίσετε τις ιδιότητες όπως, ξέρετε τι, αυτή INT θα πρέπει να μην είναι υπογεγραμμένο. Δεν θέλω αρνητικούς αριθμούς, οπότε ας κάνουν UNSIGNED. Null δεν είναι σχετική εδώ, διότι Θέλω σε κάθε χρήστη να έχουν ένα μοναδικό αριθμό. Δεν θέλω να είναι null. Αλλά αυτό είναι ενδιαφέρον. Μπορώ να καθορίσετε ότι το ID είναι είτε η πρωτεύον κλειδί αυτής της βάσης δεδομένων, ή να είναι μοναδικά, ή είναι ευρετήριο, ή το πλήρες κείμενο. Έτσι, για τους σκοπούς του σήμερα, μεγάλη ιστορία σύντομη, ΔΗΜΟΤΙΚΟ σημαίνει ότι αυτό θα είναι τόσο εννοιολογικά και τεχνικά το πεδίο που χρησιμοποιούμε για τη μοναδική ταυτοποίηση χρηστών. Έτσι, όταν έχουμε να αναζητήσετε χρήστες, αυτό είναι το είδος από την υπόσχεση να τους δούμε αποτελείται κυρίως από ότι το μοναδικό αναγνωριστικό. Και η βάση δεδομένων θα εξασφαλίσει ότι εάν έχουν έναν αριθμό χρηστών 3, δεν μπορείτε να σωματικά τοποθετήστε έναν άλλο χρήστη με τον ίδιο αριθμό 3. Η βάση δεδομένων απλά θα αρνηθούν για να αποθηκεύσετε τις αλλαγές σας. Ποιο είναι ένα καλό πράγμα, επειδή μπορείτε να προστατεύσει τον εαυτό σας από τον εαυτό σας. εαυτός Εναλλακτικά, για το όνομα χρήστη. Έτσι, η δεύτερη σειρά, ανάκληση, είναι το πεδίο το όνομα χρήστη. Έτσι, η δεύτερη γραμμή είναι εδώ το όνομα χρήστη, όπως κάναμε για την άκρα αριστερά εκεί. Λοιπόν, τι άλλο θα μπορούσε να θέλω να προσδιορίσω; Δεν μου επιτρέπεται, σύμφωνα με το SQL, για να καθορίσετε δύο πρωτεύοντα κλειδιά. μπορείτε να καθορίσετε ένα κοινό κλειδί, όπου μπορείτε εξετάσουμε δύο πεδία, αλλά δεν μπορούν μεμονωμένα είναι πρωτεύοντα κλειδιά. Έτσι, αυτό είναι έξω από το θέμα. Έτσι, ποιο θα μπορούσε να θέλω να επιλέξω; Λοιπόν, ΜΟΝΑΔΙΚΟ είναι παρόμοιες στο πνεύμα με μια πρωτεύον κλειδί, όπου μπορείτε να το αναφέρετε πεδίου πρέπει να είναι μοναδικό, αλλά είναι Δεν πρόκειται να είναι το ένα Μπορώ να χρησιμοποιήσω όλη την ώρα. Και δεν πρόκειται να χρησιμοποιήσετε αυτό το ένα όλα ο χρόνος για ποιο λόγο και πάλι; Είναι πιο αργή δυνητικά εάν είναι ένα μεγάλο όνομα. Είναι απλά ένα χάσιμο χρόνου. INDEX, εν τω μεταξύ, διευκρινίζει ότι είναι δεν πρόκειται να είναι μοναδική, αλλά θα ήθελα μπορείτε να απασχοληθεί σε μαγικό σας κάτω από το κουκούλα για να γίνει πιο γρήγορα για μένα να αναζήτηση σε αυτόν τον τομέα. Έτσι, αυτό μάλλον δεν είναι σχετική εδώ. Για όνομα, θα έλεγα ότι ΜΟΝΑΔΙΚΗ είναι μια καλή απάντηση. Αλλά ας υποθέσουμε ότι έχουμε κάνει τους χρήστες πιο ενδιαφέρουσα από ό, τι ακριβώς ονόματα χρηστών, hashes, και αριθμούς ταυτότητας. Τι θα συμβεί αν δώσουμε στους λαούς πλήρη ονόματα; Τι θα συμβεί αν τους δώσαμε διευθύνσεις και άλλα δεδομένα σχετικά με αυτά; Λοιπόν, αν καθορίσετε ότι μια στήλη σε μια βάση δεδομένων στο ευρετήριο, αυτό σημαίνει ότι MySQL ή Oracle, ή οποιαδήποτε άλλη βάση που χρησιμοποιείτε, θα πρέπει να εργαστεί μαγεία της και να χρησιμοποιούν κάποιο είδος της φαντασίας δεδομένων δομή, όπως ένα δέντρο ή ένα trie, ή hash πίνακα, ή κάτι για να εγγυηθεί ότι όταν ψάχνετε για δεδομένα χρησιμοποιώντας επιλέξτε στο συγκεκριμένο τομέα - σαν να μου δείξει σε όλους ότι ζει στην Oxford Street. Ένα ερώτημα όπως αυτό. Αν έχετε καθορίσει εκ των προτέρων ότι θέλετε ένα ευρετήριο σε αυτό το πεδίο, η αναζητήσεις θα ήταν πολύ, πολύ πιο γρήγορα. Εάν δεν καθορίσετε ένα ευρετήριο, το καλύτερο μπορείτε να κάνετε είναι μια γραμμική αναζήτηση, αν δεν είναι ταξινόμηση. Αλλά αν ορίσετε INDEX, την έξυπνη άνθρωποι που έκαναν τη βάση δεδομένων - ανθρώπους σαν εσάς που ξέρετε τώρα τα δέντρα και προσπαθεί και πίνακες κατακερματισμού - θα δημιουργήσει αυτόματα μια τέτοια δεδομένα δομή στη μνήμη RAM για να βεβαιωθείτε ότι αυτές οι αναζητήσεις είναι πολύ πιο γρήγορα. FULLTEXT εν τω μεταξύ είναι συναφείς στο πνεύμα, αλλά σας επιτρέπει να κάνετε μπαλαντέρ αναζητήσεις, όπως μου δείξει σε όλους ότι ζει σε δρόμους που ξεκινούν με το O επιστολή για οποιονδήποτε λόγο. Μπορείτε να κάνετε τις αναζητήσεις μπαλαντέρ όπως αυτό. Ή, πιο επιτακτική πράγματα όπως δείχνουν Θέλω ο καθένας που έχει τη λέξη - δείξε μου κάθε πρόσωπο του οποίου το όνομα αρχίζει με ένα συγκεκριμένο γράμμα. Μπορείτε να αναζητήσετε λέξεις-κλειδιά με αυτόν τον τρόπο. Εντάξει. Έτσι, οι δυνατότητες σχεδιασμού ενδέχεται να υπάρχουν. Υπάρχουν άλλοι που θα είμαι κύμα τα χέρια μου. Αποδεικνύεται ότι μπορείτε να έχετε διαφορετικές μηχανές αποθήκευσης. Και αυτό είναι και πιο απόκρυφες ό, τι χρειαζόμαστε σίγουρα για το πρόβλημα που επτά. Από προεπιλογή, εσείς χρησιμοποιείτε κάτι που λέγεται InnoDB. Θα δείτε αναφορά σε αυτό το κάπου στο interface phpMyAdmin είναι πιο πιθανό. Αλλά να ξέρετε ότι υπάρχουν και άλλες σχεδιασμός αποφάσεις που είναι πιθανόν να ενδιαφέρον έρθει τελικών σχεδίων, αν κάνετε κάτι web-based. Αλλά ας το κάνουμε. Ας πάμε μπροστά και να θέσουμε αυτή σχετικά με την οθόνη ως ένα τρέιλερ για μια ιστορία συμμετοχή σας, ένα συγκάτοικο, και ένα ποτήρι γάλα. Ας ρίξουμε μια δύο λεπτά ή έτσι σπάσει εδώ. Και αν μπορείτε να κολλήσετε γύρω, ας έρθει πίσω, να δούμε λίγο περισσότερο σε SQL, και τότε ένα κομμάτι της JavaScript με p-που οκτώ στο μυαλό. Εντάξει. Έτσι, πάμε να σκεφτόμαστε ένα γωνιά περίπτωση που μπορεί πολύ εύκολα να προκύψουν στο πλαίσιο της βάσης δεδομένων χρησιμοποιώντας ένα ή ειλικρινά, ακόμη και με τη χρήση του πραγματικού κόσμου τα πράγματα όπως ΑΤΜ για να πάρουν τα χρήματα. Έτσι, εδώ είναι ένα ψυγείο. Ας υποθέσουμε ότι έχετε ένα πάρα πολύ σε dorm σας ή το σπίτι σας. Και έχεις ένα συγκάτοικο, και οι δύο από Σας αρέσει το γάλα, για παράδειγμα. Έτσι θα έρθει στο σπίτι από την τάξη μία ημέρα. Αυτός ή αυτή δεν είναι ακόμα πίσω. Μπορείτε να ανοίξετε το ψυγείο. Θέλετε πραγματικά ένα μεγάλο ποτήρι γάλα. Δεν υπάρχει γάλα. Οπότε τι κάνεις; Μπορείτε να κλείσετε το ψυγείο. Μπορείτε πιάσε τα κλειδιά σας. Θα βγούμε έξω στην πλατεία. Και μπορείτε να πάρετε στη γραμμή στο CVS σε εκείνους πράγματα εαυτό checkout, η οποία είναι πάντα να διαρκέσει περισσότερο από ό, τι στην πραγματικότητα έχοντας ταμίες. Εν πάση περιπτώσει. Έτσι, λοιπόν, εν τω μεταξύ, dot dot dot, σας συγκάτοικος έρχεται στο σπίτι και αυτός ή αυτή παρομοίως έχει μια μεγάλη επιθυμία για λίγο γάλα. Έτσι, αυτός ή αυτή ανοίγει το ψυγείο, κοιτάζει στο εσωτερικό, και ω, γαμώτο. Δεν γάλα. Έτσι, ο ίδιος ή η ίδια κεφάλια έξω, συμβαίνει να πάει στο άλλο CVS, η οποία ήταν μόνο μια τετράγωνο μακριά για κάποιο λόγο, και αυτός ή παίρνει στη γραμμή για να αγοράσουν λίγο γάλα. Εν τω μεταξύ, θα έρθει στο σπίτι, αυτός ή έρχεται στο σπίτι, και τι κάνουν που τελικά έχει; Δύο φορές περισσότερο γάλα. Αλλά δεν σας αρέσει πραγματικά γάλα τόσο πολύ. Έτσι τώρα έχετε τόσο πολύ γάλα που τώρα ένας από αυτούς είναι ακριβώς πρόκειται να πάει ξινή τελικά. Έτσι, αυτό είναι μια πραγματικά κακή πρόβλημα. Σωστά; Έτσι, τι έχει συμβεί; Έτσι, ουσιαστικά, αυτό είναι το είδος από ένα γελοίο παράδειγμα. Αλλά κάτω από την κουκούλα, τι είχαμε συμβεί εδώ είναι δύο από σας που ελέγχθηκαν η κατάσταση με κάποιο κομμάτι του μνήμη, το ψυγείο. Και οι δυο σας ελέγξει την κατάσταση κάποιας μεταβλητής. Εσείς οι δύο επέστησε ένα συμπέρασμα ότι στη συνέχεια ενήργησε αναλόγως. Αλλά δυστυχώς, ενώ η συγκάτοικός σας ήταν στο κατάστημα, η κατάσταση που μεταβλητή αλλάξει, αυτός ή αυτή ήρθε πίσω και τώρα θέλει να αλλάξει την κατάσταση, αλλά είναι ήδη αλλάξει σε αυτόν ή αυτήν. Και φυσικά, αυτός ή αυτή δεν θα έχει πάει στο κατάστημα, αν ήξεραν ότι θα ήταν ήδη καθ 'οδόν. Έτσι, στον πραγματικό κόσμο, πώς θα μπορούσε να σας αποφύγετε αυτό το πρόβλημα, με την προϋπόθεση να έχουν ψυγείο, έχετε έναν συγκάτοικο, και πραγματικά σας αρέσει το γάλα? ΚΟΙΝΟ: επικοινωνία. DAVID MALAN: Επικοινωνία. OK. Αλλά πώς μπορεί να σας επικοινωνούν; ΚΟΙΝΟ: Αφήστε μια σημείωση. DAVID MALAN: Αφήστε μια σημείωση, έτσι δεν είναι; Πάντα να αφήσει ένα σημείωμα για οι οπαδοί του show. Εντάξει, έτσι ώστε πάντα να αφήσει ένα σημείωμα, ή θέσει πραγματικά σαν ένα λουκέτο ή κάτι στο ψυγείο που κρατά σας συγκάτοικο από τον έλεγχο της κατάστασης αυτή η μεταβλητή. Τώρα, γιατί μπορεί αυτό να είναι συναφές με set πρόβλημα επτά, ή σε ΑΤΜ. Λοιπόν, φανταστείτε έναν κόσμο σε ένα ΑΤΜ, όπου ίσως να είναι σε θέση να πάει μέχρι ένα ΑΤΜ μηχάνημα εδώ, και ένα άλλο ΑΤΜ εδώ. Και αυτό συμβαίνει αρκετά συχνά. Και ας υποθέσουμε ότι είχατε δύο κάρτες ΑΤΜ, η οποία είναι δυνατόν να επιτευχθεί. Και μπορείτε να συνδεθείτε σε δύο μηχανήματα ουσιαστικά ταυτόχρονα, ελπίζουμε ενώ κανείς δεν ψάχνει. Και τότε θα πληκτρολογήσετε το PIN σας περίπου ταυτόχρονα. Και στη συνέχεια, κάνετε ένα ερώτημα ισορροπίας για να δούμε πόσα χρήματα έχετε. Και ας πούμε ότι έχετε 100 € αριστερά στο λογαριασμό σας. Έτσι, ουσιαστικά ταυτόχρονα, πω ένα, μηδέν, μηδέν, πληκτρολογήστε. Και ελπίζω να πάρει πίσω κάποια χρήματα. Αλλά πόσα χρήματα μπορεί να σας πάρει πίσω; Τώρα υπολογιστές στο τέλος της ημέρας, ειδικά αν μιλάμε για servers, δεν κάνουν απαραίτητα πράγματα με τη σειρά που είναι αναμενόμενο. Έτσι, ας υποθέσουμε τι συμβαίνει, εξαιτίας της όποια και αν είναι τα ζητήματα της ταχύτητας του δικτύου εκεί είναι, ή θέματα CPU υπάρχουν, ή κάτι τέτοιο, ας υποθέσουμε ότι η πρώτο ATM ελέγχει την ισορροπία σας και βλέπει, OH, αυτό το άτομο έχει $ 100. Αλλά τότε γίνεται έξαλλος γιατί ίσως ένα αντίγραφο ασφαλείας που συμβαίνει και γι 'αυτό είναι επιβραδύνεται. Ή ίσως κατά τον έλεγχο, το δίκτυο σύνδεσης πήρε λίγο πιο αργά, επειδή Αυτό ακριβώς συμβαίνει. Είναι φυσικές συσκευές. Έτσι εν τω μεταξύ, ο δεύτερος ΑΤΜ είναι ζητώντας από την ίδια ερώτηση. Πόσα χρήματα έχει ο David έχει; 100 δολάρια είναι η απάντηση. Αλλά επειδή η πρώτη ΑΤΜ δεν έχει ακόμη έστειλε το μήνυμα αφαιρούμε $ 100, και ΑΤΜ έχουν ελεγχθεί θησαυροφυλάκιο της τράπεζας, βλέπουμε ότι υπάρχει 100 δολάρια εκεί, και τώρα και οι δύο μηχανές είναι δυνητικά πρόκειται να φτύσει μια απάντηση. Τώρα, αυτό είναι μεγάλη για σας κατά κάποιο τρόπο αν αυτό που κάνει η τράπεζα τελικά είναι να αλλάξετε το ποσό μείον 100 από θέτοντας τη μεταβλητή ίση με σας τραπεζικό λογαριασμό ίση με 0, σε αντίθεση να κάνει μείον 100. Τώρα, στη χειρότερη περίπτωση για την τράπεζα - ή στην καλύτερη για την τράπεζα, εν τω μεταξύ, θα σας δώσει $ 200, και τραπεζικό λογαριασμό σας δείχνει τώρα αρνητική $ 100, το οποίο πραγματικά δεν έχει σας ωφελήσει καθόλου. Αλλά το θέμα είναι ότι αυτή η φυλή προϋπόθεση για να πάρει δύο συγκάτοικοι γάλα, ή για δύο ΑΤΜ προσπαθώντας να πάρουν μετρητά και να αλλάξετε την κατάσταση ενός θόλου την ίδια στιγμή υπάρχει οποιαδήποτε φορά που έχετε μια βάση δεδομένων. Τώρα το πρόβλημα που επτά, αυτό το θέμα τίθεται υπό την έννοια ότι αν έχετε αγοράσει ένα μερίδιο των μετοχών του Facebook, και στη συνέχεια για παράδειγμα, μπορείτε να αγοράσετε ένα δεύτερο μερίδιο Facebook μετοχών, θα πρέπει να κάνετε μια απόφαση ως προγραμματιστής. Προκειμένου να αποφασίσουν πώς να ενημερώσετε το δεδομένων, οι πιθανότητες είναι εσείς πρόκειται να έχουν μία σειρά για το εν λόγω απόθεμα, και αυτό είναι ένας τρόπος για να το εφαρμόσει. Και θα πάμε να έχουν ένα μερίδιο της FB, το οποίο είναι αποθέματά τους σύμβολο γι 'αυτό το όνομα, ή αυτόν τον χρήστη ID, το μοναδικό αναγνωριστικό. Αλλά η ίδια ιστορία μπορεί να συμβεί εδώ. Αν κάνετε μια SELECT σε SQL, όπως θα δείτε το πρόβλημα που επτά όταν βλέπετε, oh, ο David έχει μία μετοχή Διαθέσιμο Facebook. Επιτρέψτε μου να αλλάξει τώρα αυτό να είναι δύο μετοχές, γιατί θέλει να αγοράσει ένα δεύτερο μερίδιο. Αλλά ας υποθέσουμε ότι ο David είχε στην πραγματικότητα δύο περιήγησης παράθυρα ανοιχτά, ή να υποθέσουμε ότι Είναι ένα κοινό λογαριασμό με δύο συζύγων, και οι δυο τους προσπαθούν να εκτελέσει την ίδια λειτουργία, υπάρχει, επίσης, η υπάρχει το δυναμικό για μια απόφαση να είναι γίνεται με βάση την προηγούμενη κατάσταση του κόσμου - ο λογαριασμός έχει μία μετοχή - και οι δύο άνθρωποι, ή και τα δύο servers, τώρα προσπαθήστε να πω την αυξάνει σε δύο μετοχές. Αλλά σε αυτή την περίπτωση, μπορεί να έχετε χρεωθεί με τα χρήματα και για τις δύο μετοχές, αλλά αυξάνεται μόνο εκείνη τη φορά. Έτσι, με λίγα λόγια, το θεμελιώδες πρόβλημα εδώ, όπως και με το αστείο για την έξοδο από την Σημειώστε, ή να βάλει λουκέτο σε αυτό, είναι εάν δύο άνθρωποι, ή δύο νήματα - θυμηθείτε να το μηδέν - να επιθεωρήσει την κατάσταση κάποιας μεταβλητής και στη συνέχεια να προσπαθήσουμε να αλλάξουμε αυτή τη μεταβλητή, αλλά αυτά τα δύο πράγματα δεν συμβαίνουν σε η Ταυτόχρονα όμως μπορεί να διακοπεί από άλλα πράγματα που συμβαίνουν, τα δεδομένα μπορούν να μπει σε μία πολύ περίεργη κατάσταση. Και μπορείτε να ωφελήσει ή να υποστούν κατά την έννοια του παραδείγματος χρημάτων. Έτσι, σε σύνολο επτά προβλήματος, σας δίνουμε αυτό μία γραμμή κώδικα, οι οποίες καιρό πολυλογώ, λύνει αυτό πρόβλημα στην MySQL. Αυτή η πολύ μεγάλη διδασκαλίας που δεν χωράει ακόμα και σε μία γραμμή για το οθόνη εδώ εξασφαλίζει ότι η λειτουργία σας είναι αυτό που ονομάζεται ατομική. Συμβαίνει όλα με τη μία, ή αυτό δεν συμβαίνει καθόλου. Αυτή η πολύ μεγάλη φράση δεν μπορεί να να διακόπτεται εν μέρει. Και αυτό που κάνει είναι κυριολεκτικά τι λέει. Εισαγωγή σε κάποιο τραπέζι την ακόλουθη τρεις τομείς οι συγκεκριμένες τιμές, αλλά σε αντίγραφο κλειδί, δεν κάνουν ένα ένθετο. Κάντε μια ενημέρωση. Έτσι, αυτό είναι σαν να κάνει μια SELECT και ένα INSERT, ώστε να μιλούν ταυτόχρονα. Και αυτό είναι το κλειδί που είναι πιθανόν να που αναφέρεται εδώ; Αποδεικνύεται, και θα δείτε αυτό πρόβλημα που spec επτά, διότι έχουμε κηρύξει να υπάρχει ένα μοναδικό κλειδί σε αυτό το συγκεκριμένο τραπέζι τέτοια ώστε δεν μπορείτε να έχετε πολλαπλές σειρές για τον ίδιο χρήστη με το ίδια δεκάρα σύμβολο μετοχής - σε αυτό το παράδειγμα εδώ, είναι DVN.V μια ανόητη απόθεμα πενών ότι εμείς ανατρέξτε στο spec. Επειδή έχουμε δηλώσει ότι είναι μοναδική, αυτό σημαίνει ότι αν προσπαθήσετε να τοποθετήσετε ένα αντίγραφο σειρά, είστε αντί να πηγαίνει να ενημερώσει χωρίς οποιοσδήποτε άλλος που έχει την ευκαιρία να αλλάξει η κατάσταση του κόσμου, είτε. Έτσι, με λίγα λόγια, αυτό εξασφαλίζει τα πράγματα είναι ατομική. Γενικότερα όμως, οι βάσεις δεδομένων όπως MySQL - και δεν χρειάζεται αυτή τη δυνατότητα για p-έθεσε επτά, αλλά κρατήστε το στο μυαλό για το μέλλον - υποστηρίξουν τα λεγόμενα των συναλλαγών, όπου μπορείτε να πείτε START ΣΥΝΑΛΛΑΓΩΝ κυριολεκτικά. Στη συνέχεια μπορείτε να εκτελέσετε δύο προτάσεις SQL. Και μια πρόταση SQL, όπως θα δείτε σε π-έθεσε επτά, φαίνεται λίγο κάτι σαν αυτό. Ενημερώστε έναν πίνακα που ονομάζεται λογαριασμό. Ρυθμίστε την στήλη ισορροπίας ίση με ό, τι η στήλη ισορροπία σήμερα είναι μείον 1.000 όπου ο αριθμός, το αριθμό λογαριασμού, όπως το ID του χρήστη, ισούται με 2, και στη συνέχεια να ενημερώσετε λογαριασμό dot dot dot. Έτσι, σε απλή γλώσσα, αυτό που κάνει αυτά τα δύο ερωτήματα φαίνεται να κάνει στην πραγματικό κόσμο νόημα των τραπεζών; ΚΟΙΝΟ: Μεταφορά στην εξοικονόμηση. DAVID MALAN: Ακριβώς. Τη μεταφορά κεφαλαίων από ένα λογαριασμό στον άλλο. Και αυτό είναι άλλο ένα παράδειγμα όπου πραγματικά θέλουν αυτά τα δύο πράγματα να συμβούν ή μη συμβεί. Δεν θέλετε κάτι για να πάρει στο μέσα από αυτά και ενδεχομένως να χαλάσουν τα μαθηματικά, ή χάλι πόσο χρήματα έχετε, ή πόσο τα χρήματα η τράπεζα έχει. Έτσι, αυτό που είναι πραγματικά καλό για τις συναλλαγές στην MySQL είναι ότι, και βάσεις δεδομένων γενικότερα, είναι ότι και έξυπνους ανθρώπους που έχουν υλοποιηθεί αυτά τα χαρακτηριστικά να καταλάβω πώς να κάνει βέβαιος ότι και οι δύο από αυτά τα πράγματα να συμβούν ή καθόλου. Και αν είστε πραγματικά φιλοδοξούν να κάνουν μια ιστοσελίδα που χρησιμοποιείται από τους ανθρώπους για πανεπιστημιούπολη, οι άνθρωποι στον πραγματικό κόσμο, κάνοντας κάτι με την έννοια εκκίνησης, αυτά είναι τα είδη σχεδιαστικές αποφάσεις που γίνει ποτέ τόσο σημαντική. Διαφορετικά, θα αρχίσετε να χάσετε τα δεδομένα, χάνουν χρήστες, ή στη χειρότερη περίπτωση, όπως έχουμε δει εδώ, δυνητικά χάνουν χρήματα. Έτσι και πάλι, περισσότερα για αυτό το πρόβλημα που επτά, καθώς και ίσως για μερικά από σας στην τελική έργα. Οπότε ας αλλάξουμε αυτή την εικόνα που είχαμε πριν από λίγο μόνο σε ένα ακόμη τρόπο. Επιτρέψτε μου λοιπόν να δούμε πραγματικά αν μπορώ - nope, που έφυγε. Εκεί είναι. Έτσι, αυτό είναι όπου άφησε την τελευταία φορά. Και αποδεικνύεται ότι θα πάμε να πετάξει ένα πράγμα στο μίγμα εδώ - μια γλώσσα που ονομάζεται JavaScript. Έτσι το JavaScript ταιριάζει πραγματικά σε αυτό το κομμάτι - και δεν είχα αρκετά αφήνουν αρκετό χώρο, έτσι αυτό δεν είναι πλέον σε κλίμακα. Εντάξει, αυτό είναι πραγματικά θλιβερό. Εντάξει, έτσι ώστε να είναι JavaScript. Εντάξει. Είμαι πραγματικά κάνει το μεγάλο κακό. Εντάξει. Έτσι JavaScript είναι μια άλλη προγραμματισμού γλώσσας, και η τελευταία μας, αν αυτό βοηθάει διαβεβαιώσει ότι δεν υπάρχει πολύ περισσότερο πυροσβεστική κρουνούς εδώ. Έτσι JavaScript είναι επίσης μια ερμηνεύεται γλώσσα, που σημαίνει ότι δεν μεταφράσει σε μηδενικά και μονάδες. Μπορείτε απλά να το τρέξει. Αλλά τι είναι θεμελιωδώς διαφορετική με JavaScript συνήθως είναι ότι θα μην τρέξει στον web server σας. Δεν παίρνει εκτελούνται στο Συσκευή per se. Αντίθετα, παίρνει κατεβάσει από έναν χρήστη μέσω HTTP στο πρόγραμμα περιήγησής τους - Chrome, Safari, Internet Explorer, Firefox, ό - και αυτό είναι το πρόγραμμα περιήγησης που εκτελεί αυτή συγκεκριμένη γλώσσα προγραμματισμού. Έτσι για να είναι σαφής, PHP μέχρι στιγμής έχει εκτελούνται είτε στη γραμμή εντολών σε μαύρο και άσπρο παράθυρο μας, σε ένα διακομιστή όπως και η συσκευή, ένας υπολογιστής ήθελα τη συσκευή, ή είναι ήδη εκτελείται από έναν web server εκτελείται σε έναν υπολογιστή. Αλλά το θέμα εδώ είναι ότι η PHP μέχρι στιγμής έχει εκτελεστεί server-side, έτσι ο χρήστης και το πρόγραμμα περιήγησης του χρήστη δεν βλέπει ποτέ μια γραμμή κώδικα PHP. Στην πραγματικότητα, αν ποτέ ανοίξει ένα πρόγραμμα περιήγησης για ιστοσελίδα ή άλλο σας και δείτε πραγματικά κώδικα PHP στο παράθυρό σας, κάποιος έχει σκάτωσε. Επειδή δεν είναι γραφτό να γίνει αποστέλλονται σε ένα πρόγραμμα περιήγησης άμεσα. Είναι υποτίθεται ότι πρέπει να εκτελεστεί και να μετατραπεί σε κάτι σαν HTML. Αλλά JavaScript είναι ουσιαστικά το αντίθετο. Είναι γραφτό να τρέχουν συνήθως στο εσωτερικό του παραθύρου του browser του χρήστη. Και τι είδους ιστοσελίδες χρησιμοποιούν JavaScript στη συνέχεια αυτές τις μέρες; Όπως κυριολεκτικά σε κάθε δημοφιλή ιστοσελίδα. Κάθε ιστοσελίδα που εσείς πιθανότατα χρησιμοποιούν καθημερινά χρησιμοποιούν JavaScript για την απλούστερη και ακόμη και η πιο σέξι χαρακτηριστικά. Έτσι, κάτι σαν το Facebook Συνομιλία εάν χρησιμοποιήσετε αυτό. Πώς αυτό πραγματικά εργασία; Λοιπόν μέχρι στιγμής, όλα τα πράγματα έχουμε γίνεται με HTML και PHP υποθέτει ότι θα τραβήξει ένα URL, και πατήσετε Enter, και θα δείτε κάποιο περιεχόμενο HTML. Και κάνετε κλικ στο σύνδεσμο, που αλλάζει το URL, αλλάζει η σελίδα, και επαναφορτίσεις κάποια νέα περιεχόμενο. Κάντε κλικ άλλη διεύθυνση URL ή να υποβάλει μια φόρμα, πάρει χτυπημένα σε άλλη σελίδα και θα δείτε κάποια νέα περιεχόμενο. Αλλά χρησιμοποιώντας κάτι σαν το Facebook Chat, ή Gchat, ή το Google Maps, σπάνια όμως η όλη σελίδα ανανεώσετε τέτοια ώστε μπορείτε να δείτε μια λευκή οθόνη στιγμιαία και Στη συνέχεια νέο περιεχόμενο. Αντίθετα, οι ιστοσελίδες σήμερα είναι δυναμικά να πάρει ενημερώθηκε και πάλι ξανά και ξανά όλο το είδος του πίσω από τα παρασκήνια. Και αποδεικνύεται ότι όταν πάτε να κάτι σαν το Facebook, ή Gchat, ή το Gmail, και οι ενημερώσεις της σελίδας αυτόματα χωρίς επαναφόρτωση της ολόκληρη την οθόνη, τι συνέβη είναι ότι Ο φυλλομετρητής σας έχει κάνει είδος κρυφά συμπληρωματικές αιτήσεις HTTP - όχι για ολόκληρες σελίδες web, αλλά μόνο για μικρά κομμάτια των δεδομένων, όπως η άμεσο μήνυμα ότι ο φίλος σας μόλις σας, ή την ενημέρωση κατάστασης που αποστέλλονται κάποιον που μόλις σας, ή το τιτίβισμα αποστέλλονται ότι κάποιος που μόλις στείλατε. Είναι απλά κάνει λίγο αιτήσεις για δεδομένων, και στη συνέχεια, χρησιμοποιώντας JavaScript, αυτό γλώσσα προγραμματισμού, να αλλάξουμε ό, τι η ιστοσελίδα μοιάζει χωρίς το διακομιστή βοηθά, χωρίς το διακομιστή δημιουργώντας αυτό το HTML. Έτσι, εν ολίγοις, JavaScript μπορεί να χρησιμοποιηθεί στη συνέχεια για να πάρει όχι μόνο τα νέα δεδομένα από ο server χωρίς επαναφόρτωση ένα ολόκληρο σελίδα ή την υποβολή μιας φόρμας. Μπορεί επίσης να χρησιμοποιηθεί για την αλλαγή το λεγόμενο DOM - έγγραφο μοντέλο αντικειμένου - το οποίο είναι ακριβώς το φανταχτερό τρόπο για λέγοντας ότι το δέντρο της HTML που είδαμε την τελευταία φορά. Έτσι για να καθησυχάσει, JavaScript είναι συντακτικά τόσο όμοια με C, καθώς και. Δεν υπάρχει καμία κύρια λειτουργία. Απλά αρχίστε να γράφετε τον κώδικα και θα πάρει εκτελεστεί, ή ερμηνεύεται πιο σωστά. Προϋποθέσεις θα μοιάζει με αυτό. Δεν διαφέρει από το C ή PHP για εκείνο το θέμα. Boolean εκφράσεις ή-ed μαζί θα μοιάζει με αυτό. Anded μαζί μοιάζει με αυτό. Διακόπτες θα μοιάζει με αυτό. Για βρόχους θα μοιάζει με αυτό. Ενώ οι βρόχοι θα μοιάζει με αυτό. Κάντε while loops θα μοιάζει με αυτό. Αυτό είναι νέο. Έτσι, JavaScript δεν έχει foreach κατασκευή per se, αλλά αυτό το κατασκεύασμα για i μεταβλητή array, και εγώ σε αυτό περίπτωση γίνεται μια τιμή του δείκτη. Γι 'αυτό είναι λίγο διαφορετικό από αυτό foreach, αν και οι νέες εκδόσεις του JavaScript βγαίνουν όλη την ώρα, έτσι ώστε ακόμη και αυτά τα χαρακτηριστικά της γλώσσας εξελίσσονται. Και ως ένα μέρος, JavaScript αυτές τις μέρες μπορεί επίσης να χρησιμοποιηθεί σε ένα διακομιστή όπως ακριβώς PHP χρησιμοποιώντας ένα πλαίσιο που αποκαλείται Node.js. Ένας από CS50 του TFs, Kevin, οδήγησε μια σεμινάριο για Node.js που είναι διαθέσιμες στο cs50.net/seminars. Έτσι, εάν είστε περίεργοι, να ξέρετε ότι μπορούν να χρησιμοποιήσουν αυτό από την πλευρά του διακομιστή ως καλά, αλλά αυτό είναι μια αρκετά πρόσφατη τάση, αλλά ένα ισχυρό σε αυτό. Αυτό είναι λίγο διαφορετική. Πρόκειται για μια σειρά σε JavaScript. Και αυτό που φαίνεται ως διαφορετικά έναντι C ή PHP; Υπάρχουν μερικές γρήγορες ιστορίες μπορούμε να πούμε εδώ. Τι λείπει σε σχέση με PHP; ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: Ναι; Λυπούμαστε, λένε πάλι; ΚΟΙΝΟ: Δεν δηλώνοντας ο τύπος της μεταβλητής. DAVID MALAN: Δεν είμαστε δηλώνοντας ο τύπος της μεταβλητής. Έτσι, στην πραγματικότητα αρκετά όπως PHP, δεν είμαστε προσδιορίζοντας τα είδη αυτής της μεταβλητής. Αντίθετα, είμαστε πιο γενικά λέγοντας var για τη μεταβλητή. Δεν έχουμε ενόχληση της PHP της σύμβολο του δολαρίου, η οποία ενώ είναι κουραστικό να τύπος, κάνει πιο σαφές ότι κάτι που είναι μια μεταβλητή. Ότι, εδώ, είμαστε είδος πίσω Προσέγγιση της C με ένα απλό τηλεφώνημα ενός μεταβλητή με το όνομα που θέλουμε για να δώσει, όπως αριθμούς. Και επίσης, όπως PHP, έχουμε αγκύλες για το τιμές μέσα σε αυτό το φάσμα. Έτσι μεταβλητές JavaScript, επίσης, θα μπορούσε να μοιάζει με αυτό. Προσέξτε εδώ πρόκειται για μια σειρά που ονομάζεται s, αλλά όπως έχουμε που δεν κατονομάζονται ότι είναι ένα string. Εδώ όμως είναι ένα χαρακτηριστικό που δεν υπάρχουν με τον ίδιο ακριβώς τρόπο σε PHP, αλλά λίγο παρόμοια. Αυτό είναι ένα αντικείμενο σε JavaScript. Και τα αντικείμενα είναι το είδος του ελβετικού στρατού Μαχαίρι μιας δομής δεδομένων στο εν σας μπορείτε να τα χρησιμοποιήσετε για οποιοδήποτε αριθμό πραγμάτων. Εδώ, για παράδειγμα, είμαστε δηλώνοντας μια μεταβλητή που ονομάζεται απόσπασμα. Ο τύπος του εν λόγω μεταβλητής Είναι ένα αντικείμενο. Μπορείτε να σκεφτείτε αυτό ως ένα struct C που έχει τα κλειδιά και τις αξίες. Σύμβολο είναι ένα κλειδί. FB είναι μια αξία, προφανώς ένα σύμβολο μετοχής. Κόμμα. Η τιμή είναι ένα άλλο κλειδί, και η αξία του είναι προφανώς κινητής υποδιαστολής, ή Αριθμός γενικότερα στην JavaScript, από 49,26 δολάρια. Έτσι, η PHP δεν έχει - δεν είδαμε στην PHP αντικείμενα αρκετά σαν αυτό, αλλά είδα ένα αναλογικό, ποιο ήταν αυτό; ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: συστοιχίες Associative. Έτσι, λαμβάνοντας υπόψη ότι η PHP έχει associative arrays του οποίου η σύνταξη είναι πάντα τόσο ελαφρώς διαφορετικά - είδαμε τις αγκύλες. Είδαμε τα περίεργα σύμβολα βέλη. JavaScript έχει αντικείμενα, αλλά αυτό είναι ως επί το πλείστον μια σημασιολογική διαφορά και διαφορετική συνώνυμο για τώρα. Ωστόσο, ως ένα μέρος, η PHP έχει επίσης αντικείμενα με τέτοιο τρόπο ώστε Java και άλλα γλώσσες έχουν αντικείμενα σε object-oriented προγραμματισμό. Αλλά θα χρησιμοποιήσουμε αυτά τα απλά για τους τύπους δεδομένων για τώρα. Αντικείμενα και πίνακες συνειρμική. Αυτό και μόνο θα μπορούσε να το κάνει λίγο πιο σαφής. Εδώ είναι γιατί ένα αντικείμενο είναι χρήσιμη. Όταν θέλετε να δηλώσει ένας φοιτητής, όπως Zamyla, μπορούμε πραγματικά ενθυλακώνουν να το πω έτσι μέσα από αυτό αντικείμενο με αγκύλες όπως ακριβώς πριν από ένα σωρό κλειδιά και τις αξίες εδώ. Έχουμε μια ταυτότητα, ένα σπίτι και ένα όνομα για Zamyla, που ακολουθείται από ένα ερωτηματικό ως συνηθισμένο στο τέλος. Κάτω και εδώ, αυτό είναι ελαφρώς διαφορετικά, αλλά επίσης και πολύ ισχυρό αυτές τις μέρες. Εδώ είναι μια σειρά, και ξέρω ότι επειδή υπάρχει μια αγκύλη up top και μια αγκύλη στο κάτω μέρος. Και αυτό είναι μια σειρά από ποια δεδομένα πληκτρολογήστε προφανώς σε JavaScript; Αυτή είναι μια συστοιχία φαίνεται σαν τρία αντικείμενα. Και ξέρω ότι είναι μόνο ένα αντικείμενο λόγω των άγκιστρα. Και παρατηρήσετε ότι υπάρχει ανοικτό άγκιστρο, κάποια πράγματα, κοντά σγουρά στήριγμα, κόμμα, Στη συνέχεια κάποιοι περισσότερο, κόμμα, και, στη συνέχεια, λίγο περισσότερο. Έτσι ώστε να είναι τρία επιχειρήματα χωρίζονται από δύο κόμματα. Έτσι, αυτό είναι μια σειρά από τρία αντικείμενα. Και κάθε ένα από αυτά τα αντικείμενα φαίνεται να είναι μέλος του φοιτητή ή του προσωπικού μερικών ταξινόμησης, το καθένα με ένα αναγνωριστικό, το σπίτι, και το όνομα. Αλλά έχω αυτό το κάτι που ονομάζεται που ονομάζεται JSON - JavaScript Object Notation. Και αυτό είναι μια μορφή δεδομένων που όντως είναι τόσο πολύ δημοφιλής και μόδα αυτές τις μέρες ότι αν γράψετε ένα εφαρμογή που χρησιμοποιεί το Facebook API, το Twitter API, πραγματικά σχεδόν κάθε API εκεί έξω αυτές τις μέρες, συμπεριλαμβανομένων ορισμένων από τις δικές CS50, η δεδομένα που μπορείτε να πάρετε πίσω δεν είναι σε old school μορφή CSV. Επειδή υπενθυμίζουν ότι CSV είναι εξαιρετικά απλή. Είναι ακριβώς στήλες διαχωρίζονται με κόμμα. Δεδομένων JSON σας δίνει περισσότερες μεταδεδομένων. Είναι συνεργάτες ένα κλειδί με κάθε τιμή, ώστε δεν πρέπει να υποθέσουμε ότι μόνο η μηδενική στήλη είναι μία τιμή, στήλη το ένα είναι ένα άλλο, στήλη δύο είναι ένα άλλο. Τα πάντα σε ένα αντικείμενο JSON εδώ είναι είδος της αυτο-περιγραφή, γιατί κάθε ένα από τα ονόματα σε αυτό το αρχείο έχει κυριολεκτικά όνομα μπροστά του ως string με. Έτσι, ας ρίξουμε μια ματιά σε ένα μερικά παραδείγματα εδώ. Επιτρέψτε μου να πάω στη συσκευή. Και επιτρέψτε μου να μπω σε vhost μας κατάλογο στο δημόσιο. Και επιτρέψτε μου να μπω σε ο JavaScript κατάλογο. Και ας πάμε μπροστά και να ανοίξει dom-0.html, όπου DOM σημαίνει απλώς έγγραφο μοντέλο αντικειμένου. Είναι η ουσία δέντρο στο οποίο Αναφέρθηκα νωρίτερα. Και επιτρέψτε μου να προτείνω το εξής. Εδώ είναι μια ιστοσελίδα του οποίου το σώμα είναι αρκετά απλή. Έτσι και εδώ κάτω στον πυθμένα, παρατηρήσετε Έχω μια φόρμα. Έχουμε δει αυτά στο παρελθόν. Έχει δύο εισόδους, μία από τις οποίες έχει ένα ID του ονόματος, μία από τις οποίες έχει έναν τύπο υποβάλλουν, και η πρώτη ένας τύπος είναι το κείμενο. Έτσι, αυτό ακούγεται πραγματικά πολύ απλό. Ας πάμε εδώ. Ας πάμε πίσω σε αυτήν τη σελίδα εδώ. Ας πάμε σε localhost, και να πάει σε Κατάλογος JavaScript μας, και να πάει σε dom-0, και εδώ έχουμε αυτή τη μορφή. Έτσι, αυτό είναι προφανώς όλη αυτή η σελίδα κάνει. Έχει ένα πεδίο με όνομα ένα κουμπί Υποβολή. Αλλά δεν πρόκειται να χρησιμοποιήσετε το PHP εδώ. Πάω να κάνω ό, τι πλευρά του πελάτη έτσι ώστε να μιλήσει σε JavaScript ως εξής. Παρατηρήστε ότι έχω όντως δοθεί το όνομα στον τομέα της εισόδου μια μοναδική αναγνωριστικό, το οποίο θα είναι πράγματι σώσε με λίγο χρόνο σε μια στιγμή. Και παρατηρήσετε έχω εισαχθεί μια άλλη ετικέτα στο κεφάλι της ιστοσελίδας μου, η  tag. Έτσι είναι με αυτή την έννοια ότι το JavaScript είναι μια γλώσσα προγραμματισμού client-side. Στην περίπτωση αυτή, ακριβώς όπως CSS, έχω βάλει κατ 'ευθείαν στο εσωτερικό του HTML μου. Αλλά παρατηρήσετε έχω δηλώσει λειτουργία που μοιάζει λίγο σαν PHP συντακτικά, αλλά αυτό είναι πραγματικά JavaScript, γιατί και πάλι, είναι client-side στο πρόγραμμα περιήγησης. Και ρίξτε μια εικασία τι αυτό πρόκειται να κάνει, ακόμα κι αν μερικά από τη σύνταξη εδώ είναι νέα. ΚΟΙΝΟ: Υποδεχτείτε όποιος. DAVID MALAN: Δεν πρόκειται να πω ένα γεια σε όποιον επισκέπτεται αυτή τη σελίδα. Λοιπόν, πώς; Έτσι παρατηρούμε, αποδεικνύεται σε JavaScript υπάρχει μια ειδοποίηση (λειτουργία). Αυτή είναι μια πολύ θλιβερή είδος της λειτουργίας που πραγματικά ακριβώς τείνει να ενοχλήσει τους χρήστες. Δεν είναι αυτό που πρέπει πραγματικά να χρησιμοποιήσετε συνήθως, αλλά είναι μια γρήγορη και βρώμικη τρόπο το είδος της εκτύπωσης κάτι σε έναν χρήστη με γραφικά διεπαφή, όπως ένα πρόγραμμα περιήγησης. Σημειώστε εδώ ότι έχω ένα κορδόνι σε μονά εισαγωγικά. Αποδεικνύεται ότι σε αντίθεση με C, JavaScript μπορεί πραγματικά να χρησιμοποιείτε μεμονωμένα εισαγωγικά, και ειλικρινά αυτό είναι ακριβώς το είδος της σύμβασης μεταξύ στυλιστικές JavaScript προγραμματιστές να χρησιμοποιήσει μονά εισαγωγικά. PHP, που πραγματικά έχουν ελαφρώς διαφορετικό νόημα. Αλλά για τώρα, απλά να ξέρετε ότι αυτός είναι ο μόνος λόγος. Η σύμβαση σε JavaScript είναι συχνά χρησιμοποιήστε μονά εισαγωγικά, αλλά θα μπορούσαμε να χρησιμοποιήσουμε διπλά εισαγωγικά και στα δύο μέρη, καθώς και. Έτσι, αυτό είναι ενδιαφέρον. Θυμηθείτε την τελευταία φορά που είχαμε ότι εικόνα στην οθόνη που επέστησε ένα δένδρο όπου είχατε τον κόμβο HTML, και η κεφάλι κόμβο, και τον κόμβο του σώματος, και στη συνέχεια κάποιο κείμενο. Αλλά υπήρχε ένα ειδικό κόμβο κατά τη κορυφή που κάλεσα το έγγραφο. Λοιπόν, αποδεικνύεται σε JavaScript, οποιαδήποτε φορά που θα γράψετε ένα πρόγραμμα σε JavaScript σε ένα πρόγραμμα περιήγησης, έχετε πρόσβαση σε μια ειδική global μεταβλητή. Παρόμοιες στο πνεύμα με superglobals της PHP, αυτό ονομάζεται στην όλα τα πεζά έγγραφο. Είναι σαν ένα struct, αλλά αυτό το struct Επίσης, έχει λειτουργίες στο εσωτερικό του. Έτσι, ένα struct Γ έχει μόνο τυπικά στοιχεία. Αλλά ένα αντικείμενο JavaScript, όπως αυτό τεχνικά, επίσης, έχει λειτουργίες, αλλιώς γνωστή ως μέθοδοι, στο εσωτερικό του. Και μπορείτε να καλέσετε μια συνάρτηση μέσα αυτό το αντικείμενο κυριολεκτικά κάνει τους όνομα, τελεία, και στη συνέχεια το όνομα του η λειτουργία, ή πάλι η μέθοδος. Είναι απλά ένα συνώνυμο, πραγματικά. Και τι σημαίνει αυτή η λειτουργία να κάνω; Μπορείτε είδος του να μαντέψετε από το όνομά του. Πάρτε στοιχείο με ID. Έτσι, αυτό πρόκειται να αναζητήσετε την ιστοσελίδα, αναζήτηση εκείνο το δέντρο, που αναζητούν όποια κόμβο, AKA στοιχείο, έχει μοναδικό αναγνωριστικό του απόσπασμα unquote όνομα. Και τότε τι θα πάω να κάνω; Πάω να πάρετε την τιμή στο εσωτερικό της ότι ο κόμβος στο δέντρο, και θα πάω με κάποιο τρόπο να πω γεια σε αυτό το όνομα. Πάρτε λοιπόν μια εικασία, ακόμα κι αν δεν έχετε δει αυτό ακόμα, τι να κάνει η συν σύμβολα εδώ και εδώ ίσως; ΚΟΙΝΟ: Ενώσετε. DAVID MALAN: Ενώσετε. Δεξιά, και αυτά είναι μόνο είδος αποφάσεις σχεδιασμού οι άνθρωποι που χρόνια πριν. Στην PHP, ενώσετε τα πράγματα με τελείες. Στο C, να πηδούν μέσα από στεφάνες και αρκετές καλέστε λειτουργίες όπως strcopy () ή strcat () ή άλλες παρόμοιες λειτουργίες. Αλλά σε JavaScript, μπορείτε να χρησιμοποιήσετε πλεονεκτήματα. Έτσι, αυτό είναι ακριβώς η συνένωση τρεις χορδές - Γεια σας, ένα όνομα, και στη συνέχεια ένα θαυμαστικό. Έτσι, πότε και γιατί είναι αυτή η λειτουργία κάλεσε όμως; Λοιπόν, πάρτε μια εικασία από την HTML στο κάτω μέρος. Γιατί είναι χαιρετήσει () καλείται, ή πότε; Προφανώς, όσο καλύτερα μπορώ να πω, σχετικά με υποβάλλουν, όταν υποβάλλεται αυτή τη μορφή, Πάω να κάνω ό, τι είναι μέσα από αυτά τα αποσπάσματα. Και συγκεκριμένα, Πάω να καλέσετε χαιρετώ () και, στη συνέχεια, επιστρέφει false. Λοιπόν, ας δούμε ποια είναι η καθαρή επίπτωση εδώ είναι η πρώτη. Επιτρέψτε μου λοιπόν να προχωρήσει και πληκτρολογήστε σε, ας πούμε, Λόρεν, Υποβολή. Γεια Λόρεν. Ας δούμε αν ίσως αυτό ήταν μόνο ένας τυχερός εφαρμογή. Όχι. Έτσι, είναι πληκτρολογώντας ό, τι όνομα Εγώ πραγματικά τοποθετήθηκαν εκεί. Αλλά παρατηρήστε τι δεν αλλάζει. Η διεύθυνση URL είναι ακόμα dom-0.html. Δεν υπάρχει register.php. Δεν υπάρχει δεύτερο αρχείο. Δεν υπάρχει καμία χαρακτηριστικό δράση. Έτσι τι είναι αυτό το ψεύτικο επιστροφή προφανώς κάνεις; Γιατί είμαι καλώντας χαιρετώ () και, στη συνέχεια, επιστροφή ψευδείς ίσως; Τι συμβαίνει συνήθως όταν κάνετε κλικ Υποβολή σε μια φόρμα που ακόμα έχουμε δει την περασμένη εβδομάδα? ΚΟΙΝΟ: [δεν ακούγεται]. DAVID MALAN: Πηγαίνει κάπου, έτσι δεν είναι; Πηγαίνει σε κάποια διεύθυνση URL προορισμού. Αλλά δεν θέλω να συμβεί εδώ. Θέλω η ιστοσελίδα μου είναι εντελώς δυναμική, όπως το Gmail, όπου όταν είστε εκεί, μπορείτε να μείνετε εκεί. Η διεύθυνση URL δεν αλλάζει με έναν τρόπο που δηλώνει το σύνολο σελίδα ξαναφορτώνει. Αντίθετα, θέλω απλώς να αλλάξει κάτι όπως εκτύπωση κάτι εδώ στην οθόνη. Λοιπόν επιτρέψτε μου να το καθαρίσω αυτό μέχρι λίγο. Επιτρέψτε μου να ανοίξει δεν dom-0, αλλά επιτρέψτε μου να ανοίξει dom-2. Ακριβώς έτσι που έχετε δει κάποια σύνταξη εδώ. Αποδεικνύεται ότι αυτό που μόλις δεν χρησιμοποιεί πρώτες JavaScript. Έτσι, αυτό είναι πραγματικά η γλώσσα JavaScript. Κάποιοι από εσάς ίσως γνωρίζετε μια βιβλιοθήκη που ονομάζεται jQuery. Έτσι jQuery δεν είναι το ίδιο πράγμα όπως JavaScript. Είναι απλά μια βιβλιοθήκη που πραγματικά έξυπνη τύπος έγραψε και διαδόθηκε όπως ότι σχεδόν ο καθένας στον κόσμο τώρα χρησιμοποιεί jQuery, όταν χρησιμοποιεί JavaScript. Και με την πρώτη ματιά, ειλικρινά, μοιάζει λίγο πιο αινιγματικό. Αλλά θα βρείτε, ειδικά αν πάτε υπάρχουν για την τελική έργο σας με την ιστοσελίδα ανάπτυξη, θα διαπιστώσετε ότι αυτό το καθαρίζει τα πράγματα και σας εξοικονομεί αρκετά λίγες γραμμές κώδικα. Οπότε ας ματιά στο πώς αυτή η μορφή εργασίας. Παρατηρήστε τι δεν μπορώ να αφαιρέσω προφανώς από την HTML μου; Δεν υπάρχει χειριστής για να υποβάλουν να το πω έτσι. Δεν υπάρχει καμία ιδιότητα. Γιατί ξέρετε, τι Δεν μου άρεσε πραγματικά; Ένιωσα σαν να έπεφταν σε παλιές συνήθειες εκεί. Ακριβώς όπως είχε αρχίσει να αισθάνονται ατημέλητη να μπερδεύονται τόσο με CSS HTML, επειδή είστε το είδος της ρίψης διαφορετικές γλώσσες σε όλο τον θέση, ομοίως έκανε αυτό αρχίσετε να αισθάνεστε σαν ένα κακό δρόμο για να πάει κάτω, όπου Βάζω κώδικα JavaScript μέσα μου HTML αντί factoring έξω. Έτσι, αυτό είναι το μάθημα εδώ. Σε dom-2.html, είμαι το factoring έξω. Και κάνω τα πράγματα λίγο διαφορετικά. Για τώρα, θα πάω στο κύμα τα χέρια μου σε ό, τι αυτό κάνει πραγματικά κάτω από το καπό. Αλλά ακριβώς για υποθέσουμε τώρα ότι το πρώτο γραμμή κώδικα σε αυτήν τη βιβλιοθήκη ονομάζεται jQuery σημαίνει ακριβώς όταν η το έγγραφο είναι έτοιμο, κάντε τα εξής. Επειδή οι ιστοσελίδες μπορεί να πάρει κάποιο χρόνο για να φορτώσει. Ίσως να είναι σε μια αργή internet σύνδεσης, και θα μπορούσε να περιστρέφεται και γυρίζοντας, και, τέλος, είναι γεμάτο. Αυτή η γραμμή κώδικα λέει απλά περιμένετε μέχρι ολόκληρη η σελίδα είναι έτοιμο, το έγγραφο είναι έτοιμο, πριν από την εκτέλεση αυτού του κώδικα. Και σήμερα παρατηρούμε ότι, αυτό είναι πιθανώς η πιο χρήσιμη πρώτη πάρει μακριά από jQuery. Αυτή η γραμμή εδώ είναι πολύ παρόμοια σε πνεύμα σε αυτό το πολύ μακρύτερη γραμμή εδώ. Ότι, στον τομέα του ακατέργαστου κώδικα JavaScript, εκεί υπάρχει ένα έγγραφο παγκόσμιο αντικείμενο που έχει μια λειτουργία που ονομάζεται getElementById (), οι άνθρωποι που έγραψε jQuery απλοποιημένη ότι για να πω σύμβολο του δολαρίου, και στη συνέχεια στο εσωτερικό του παρενθέσεις βάλει δύο εισαγωγικά, και στη συνέχεια βάλετε ένα σύμβολο hash που ακολουθείται από το μοναδικό αναγνωριστικό που θέλετε να πάρετε. Έτσι, αυτό είναι ισοδύναμο με document.getElementById. Εν τω μεταξύ,. Υποβάλουν μόνο μέσα στο υποβολή όποια μορφή και είστε αναφέρεται στα αριστερά, πηγαίνετε μπροστά και να εκτελέσει αυτό. Αλλά αυτό είναι τώρα η περιέργεια πάρα πολύ. Πού είναι το περίεργο αυτό Έχω επισημανθεί εδώ; Δεν είναι μόνο αυτό το είδος της συντακτικά νέα, υπάρχει και κάτι που λείπει. Απευθύνεται: Είναι ακριβώς λέγεται συνάρτηση; Δεν λέγεται ειδοποίηση; DAVID MALAN: Ναι. Λοιπόν, έτσι συναγερμού () είναι κάτω εδώ, για να είμαστε δίκαιοι. Αλλά δεν υπάρχει καμία αναφορά ενός όνομα, όπως γνωρίζετε, foo ή κάτι εδώ. Και πράγματι, αυτό είναι ένα από τα χαρακτηριστικά γνωρίσματα της JavaScript που είναι αρκετά ισχυρό, αλλά και αρκετά νέα. Και PHP έχει πράγματι αυτό επίσης. Επιτρέψτε μου να προχωρήσει και να κάνει κάτι πραγματικά γρήγορα. Επιτρέψτε μου να προχωρήσει και να θέσει αυτό έξω εδώ. Επιτρέψτε μου να το κάνω αυτό. Λειτουργία. Ας το ονομάσουμε αυτό το χειριστή (). Μια συνάρτηση handler ώστε να μιλήσουν. Κάτι που χειρίζεται κάποια λειτουργία. Επιτρέψτε μου να καθαρίσει εσοχή μου. Και το βάλω εδώ. Και θέσω εδώ. Ναι. OK. Έτσι, τώρα έχω μια λειτουργία που ονομάζεται χειρισμού () που πραγματικά δεν ξέρω τι κάνει ακόμα. Απλώς εξακολουθεί να έχει αυτό το πράγμα. Ουπς. Πήρε πάρα πολύ. Ας το κάνουμε αυτό. Εντάξει. Λυπάμαι. Εντάξει. Επιτρέψτε μου να το κάνω αυτό. OK. Αυτό φαίνεται ωραία και ίσια διαβιβάσει τώρα. Επιτρέψτε μου να το κάνω αυτό. Κάνετε αυτό. Και OK. Έτσι τώρα, ας βάλουμε αυτό εδώ. Δεν υπάρχει πλέον προγραμματισμός σχετικά με τη μύγα. OK. Έτσι τώρα, ας πάμε πίσω στο όπου η ιστορία άρχισε. Προηγουμένως, είπα ότι αυτή η γραμμή εδώ σημαίνει ότι όταν το έγγραφο είναι έτοιμο, πάμε μπροστά και να το κάνουμε αυτό. Τι θέλω να κάνω; Λοιπόν συγκεκριμένα, θέλω να πάω μπροστά και να κάνουμε το εξής. Εκτελέστε αυτήν τη γραμμή κώδικα, και στη συνέχεια αυτό που θέλω να κάνετε είναι να καλέσετε αυτό λειτουργεί όταν υποβληθεί η φόρμα. Τώρα αυτό είναι αυτό που είναι ενδιαφέρον. Αυτό δεν είναι η ίδια συνάρτηση. Σημείωση Δεν βάζω παρενθέσεις εδώ κατά τον συνήθη τρόπο. Είμαι κυριολεκτικά περνώντας μια λειτουργία που ονομάζεται χειριστή () σε μια άλλη λειτουργία καλείται να υποβάλει () ως επιχείρημα αν και είναι σαν μια μεταβλητή. Και αυτό είναι ένα από τα χαρακτηριστικά των JavaScript, είναι οι ίδιοι λειτουργίες είναι πραγματικά αντικείμενα μόνο. Στην πραγματικότητα, είναι πραγματικά ακριβώς μεταβλητές κάποιου είδους. Και αν το όνομα της συνάρτησης είναι χειριστή (), δεν υπάρχει κανένας λόγος δεν μπορώ και να τα ως επιχείρημα εδώ. Και αυτό σημαίνει ότι, όταν το έντυπο με το αναγνωριστικό του demo είναι υποβάλλονται, καλέστε αυτή τη λειτουργία. Αλλά τώρα, αν μπορώ να αναιρέσω όλα αυτά, Τότε γιατί εγώ ίσως να κάνουν Πριν από αυτή την στιγμή; Λοιπόν, αυτό είναι μια ανώνυμη συνάρτηση. Διότι, ειλικρινά, κατάλαβα γιατί είμαι ενοχλεί να χάνουμε χρόνο το χαρακτηρισμό συνάρτηση που ονομάζεται χειριστής () μόνο για να καλέσετε αυτό σε ένα και μόνο ένα μέρος; Αν δεν χρειάζεται το όνομα, και δεν μου πρέπει να το καλέσετε περισσότερες από μία θέση, ας εφαρμόσουν τη λειτουργία ακριβώς εκεί που το χρειάζεστε. Και έτσι JavaScript και PHP υποστηρίζει αυτό ονομάζονται ανώνυμες λειτουργίες που επιτρέψτε μου να κάνει ακριβώς αυτό εδώ. Αλλά είμαστε ακριβώς το ξύσιμο της επιφάνειας. Ας δώσουμε έμφαση με μόνο ένα ζευγάρι τελευταία παραδείγματα εδώ. Αν πάω σε quote.php. Σημειώστε ότι αυτό είναι πραγματικά ένα PHP λειτουργία, ένα πρόγραμμα PHP, ότι έγραψα ότι αναμένει μια παράμετρος που ονομάζεται HTTP σύμβολο, και μπορώ να περάσει μια τιμή, όπως FB. Και αν θέλουμε πραγματικά να δούμε την πηγή κώδικα, αυτή είναι η διερεύνηση μια δωρεάν ιστοσελίδα που ονομάζεται Yahoo Finance, ακριβώς όπως π-set επτά, και αυτό είναι που επιστρέφουν σε μένα κάτι προφανώς η format γνωστό είναι JSON - JavaScript Object Notation. Είναι απλά ένα αντικείμενο. Ανακοίνωση για τα άγκιστρα, τα αποσπάσματα, του παχέος εντέρου, και τα κόμματα. Τώρα Εν τω μεταξύ, αυτό είναι αρκετά δροσερό. Επειδή ίσως μπορώ να χρησιμοποιήσω ένα προγραμματισμό γλώσσα για να δημιουργήσετε τις διευθύνσεις URL που μοιάζει με αυτό δυναμικά, έτσι δεν είναι; Μπορώ να το αλλάξετε αυτό στο Google και να πάρετε πίσω της Google των τιμών των μετοχών των $ 1,017.55. Ας δούμε, λοιπόν, αν δεν μπορούμε να χρησιμοποιήσουμε αυτό τώρα. Επιτρέψτε μου να πάω σε ajax-0 εδώ, η οποία μοιάζει με το ακόλουθο. Είναι απλά μια ιστοσελίδα που έχει μια φόρμα με ένα κουμπί. Επιτρέψτε μου εδώ να προχωρήσει και πληκτρολογήστε YHOO για το σύμβολο της μετοχής της Yahoo, κάντε κλικ στο Λήψη Παρέθεσε, και σήμερα παρατηρούμε ότι έχω πάρει μια ειδοποίηση με 32.86. Επιτρέψτε μου να πραγματικά να πάει σε ένα πιό φανταχτερό έκδοση από αυτή τη σελίδα, την έκδοση δύο, και πληκτρολογήστε ας πούμε Microsoft, MSFT. Get Quote. Και σήμερα παρατηρούμε, δεν ειδοποίηση. Παρατηρήστε εκεί που λέει τιμή να προσδιοριστεί; Υπάρχει η απλούστερη των παραδειγμάτων που παραπέμπει σε ποιο Gchat, και το Facebook Συνομίλησε, και το Gmail, και άλλα τέτοια οι ιστοσελίδες που κάνουν με την πραγματικότητα την αλλαγή της ιστοσελίδας. Παρατηρήστε αυτό. Επιτρέψτε μου να ξαναφορτώσετε την σελίδα. Επιτρέψτε μου να ανοίξει Επιθεωρητή του Chrome. Επιτρέψτε μου να πάω προς τα στοιχεία καρτέλα εδώ κάτω. Τώρα, προσέξτε, αν μεγεθύνετε εδώ κάτω και ανοίξετε αυτό επάνω, παρατηρούμε ότι αυτό είναι μου HTML DOM - έγγραφο μοντέλο αντικειμένου μου. Αυτό είναι HTML μου. Αλλά σήμερα παρατηρούμε ότι, ακόμη και αν πρόκειται να είναι λίγο δύσκολο να το δούμε σε δύο μέρη ταυτόχρονα, εάν πληκτρολογήσετε στο FB μέχρι εδώ, δείτε το κάτω μέρος της οθόνης και μόνο. Είναι πραγματικά αλλάζει HTML μου σχετικά με τη μύγα. Και το κάνει αυτό πολύ απλά κάνοντας κάτι σαν αυτό. Αν έχω ανοίξει ajax-2, ανακοίνωση για την εφαρμογή κάτι τόσο προκλητική όσο ότι, ακόμα κι αν είναι πολύ άσχημο, αλλά τόσο περίπλοκο όσο αυτό λειτουργικά, έχει μερικά HTML στο κάτω μέρος. Αλλά πρόσεξα ότι χρησιμοποιείται για να μαρκάρει. Εμείς δεν έχουμε χρησιμοποιηθεί πριν από αυτό, αλλά αυτό είναι σαν, αλλά δεν ισχύει τα πάντα σε μια νέα γραμμή. Κάνει ακριβώς ένα ορθογώνιο περιοχή στην ίδια γραμμή, κατ 'ουσίαν. Παρατηρήστε ότι έδωσα ταυτότητα των τιμών. Και αποδεικνύεται χρησιμοποιώντας το ίδιο JavaScript βιβλιοθήκη, έχω μια λειτουργία ονομάζεται quote () που ονομάζεται όποτε την υποβολή της φόρμας. Και αυτό που κάνω είναι αυτό. Είμαι δηλώνοντας μια μεταβλητή σε JavaScript ονομάζεται url, εξοικονομώντας την τιμή σύμβολο quote.php; =. Με άλλα λόγια, εγώ αρχίζω να προετοιμάσει μια αίτηση HTTP, και στη συνέχεια Είμαι συνενώσει σε ότι με ένα συν ανεξάρτητα από το στοιχείο με το αναγνωριστικό σύμβολο είναι, η οποία ανακοίνωση είναι ότι πεδίο κειμένου κάτω δεξιά εδώ. Έτσι ακριβώς όπως είχαμε μορφές στο παρελθόν. Και τότε αποδεικνύεται στην jQuery, αν κλήση. val (), η οποία καλεί μια val λειτουργία, μια λειτουργία αξία, που παίρνει ό, τι ο χρήστης έχει πληκτρολογήσει μέσα Και τότε όλα της κίνησης του δικτύου που συμβαίνει είναι αυτό. $. GetJSON. Και ως ένα μέρος, το σύμβολο του δολαρίου είναι απλά μια σημειογραφία. Είναι πραγματικά jQuery.getJSON. Πάρτε μου να JSON από αυτό το URL, και όταν το αίτημα έρχεται πίσω, καλέστε αυτό λειτουργία και να περάσει σε όσο το επιχείρημα Όποια και αν ήρθε πίσω από το διακομιστή. Έτσι, με άλλα λόγια, αν πάω πίσω στο περιήγησης, και να πάω πίσω στο quote.php, τι browser μου κάνει είναι να πάρει Αυτό το κομμάτι των δεδομένων. Και όταν πηγαίνω σε αυτήν την ιστοσελίδα εδώ, παρατηρήσετε αν αντί να πάει στο δίκτυο καρτέλα και να τον διαγράψετε, και στη συνέχεια πληκτρολογήστε κάτι σαν GOOG για το Google και τον Quote, ανακοίνωση η σελίδα δεν έχει αλλάξει. Αλλά ένα αίτημα HTTP έγινε, και τι Επέστρεψα εδώ, αν κοιτάξουμε το η απάντηση είναι ένα σωρό JSON ότι έχουμε πρόσβαση τελικά με Αυτή η απλή γραμμή εδώ. Τα δεδομένα είναι ό, τι είχε πάρει από το διακομιστή. Η τιμή είναι το όνομα του κλειδί με νοιάζει. Έτσι data.price μου δίνει αυτό. Τώρα, εν τω μεταξύ, και αυτό είναι το τελευταίο παράδειγμα. Μπορείτε να κάνετε ακόμα περισσότερα με τη σελίδα. Μία πραγματικότητα, και τα δύο. Μπορούμε να φέρουμε πίσω την tag, αν θυμάστε αυτό. Αυτό είναι JavaScript. Μπορούμε να το κάνουμε αυτό. Πολύ συναρπαστικό. Θα το αφήσουμε ως δραματική στιγμή. Αλλά το πιο συναρπαστικό, μπορείτε να κάνουμε τα πράγματα όπως αυτό. Αν πάω στο geolocation-1, αποδεικνύεται ότι το Chrome ξέρει ότι βρισκόμαστε σε γεωγραφικού πλάτους 42.37. -71.10. Έτσι, υπάρχει ακόμα εκεί στη διάθεσή σας. Αλλά περισσότερα για αυτό την επόμενη εβδομάδα. Τα λέμε τη Δευτέρα.