[Powered by Google Translate] [Ενότητα 8 - Άνετα Περισσότερα]
[Rob Bowden - Πανεπιστήμιο του Χάρβαρντ]
[Αυτό είναι CS50. - CS50.TV]
>> Αυτές οι σημειώσεις τμήμα εβδομάδα πρόκειται να είναι πολύ σύντομη,
έτσι είμαι απλώς πρόκειται να συνεχίσετε να μιλάτε, εσείς πρόκειται να κρατήσει τις ερωτήσεις,
και εμείς θα προσπαθήσουμε να γεμίσουν όσο το δυνατόν περισσότερο χρόνο.
Πολλοί άνθρωποι πιστεύουν ότι αυτό PSET δεν είναι απαραίτητα δύσκολη, αλλά είναι πολύ μεγάλη.
Η PSET spec η ίδια παίρνει μια ώρα για να το διαβάσετε.
Σας δίνουμε ένα μεγάλο μέρος της SQL θα μπορούσε ενδεχομένως να χρειαστεί να χρησιμοποιήσετε.
Θα σας καθοδηγήσει με πολλά από αυτά, γι 'αυτό δεν θα πρέπει να είναι πάρα πολύ κακό.
Έχει κανείς άρχισε ή τελείωσε;
Είναι η τελευταία PSET. Ω, Θεέ μου.
Συνήθως υπάρχει ένα μετά το JavaScript αυτό, αλλά τα πράγματα αλλάζουν ημερολόγιο
κάνει τα πάντα 1 εβδομάδα μικρότερη, και δεν έχουμε πλέον μια PSET JavaScript.
Δεν ξέρω πως ότι επηρεάζει το αν το JavaScript πρόκειται να εμφανιστεί για τις εξετάσεις
ή Κουίζ 1.
Φαντάζομαι ότι θα είναι κάτι σαν πρέπει να ξέρετε υψηλού επιπέδου πράγματα για JavaScript,
αλλά αμφιβάλλω αν θα σας δώσω κατ 'ευθείαν κώδικα JavaScript
από τη στιγμή που δεν είχε PSET σε αυτό.
Αλλά ότι θα είναι τα πράγματα για την αναθεώρηση κουίζ επόμενη εβδομάδα.
>> Το τμήμα των ερωτήσεων.
Πολλά από αυτά τα πράγματα είναι κάπως φτωχό λεξιλόγιο, αλλά θα συζητήσουμε γιατί.
Σε αντίθεση με C, PHP είναι μια "δυναμικά δακτυλογραφημένο" γλώσσα. Τι σημαίνει αυτό, ρωτάτε;
Λοιπόν, να πω αντίο σε όλα αυτά τα char, float, int, και άλλες λέξεις-κλειδιά θα πρέπει να χρησιμοποιήσετε
κατά τη δήλωση μεταβλητών και συναρτήσεων σε C.
Στην PHP, τον τύπο μιας μεταβλητής καθορίζεται από την αξία που αυτή τη στιγμή κατέχει.
Έτσι, πριν να πληκτρολογήσετε τον κωδικό αυτό σε ένα αρχείο με το όνομα dynamic.php,
PHP είναι δυναμικά πληκτρολογήσει. Αυτό είναι αλήθεια.
Διαφωνώ με το γεγονός ότι αυτό σημαίνει ότι λέμε αντίο σε char, float, int,
και άλλες λέξεις-κλειδιά.
Η ακριβής διαφορά μεταξύ δυναμικά δακτυλογραφημένο και την εναλλακτική λύση,
η οποία είναι στατικά πληκτρολογήσει, είναι ότι δυναμικά δακτυλογραφημένες, όλα έλεγχο τύπου και τα πράγματά σας
συμβαίνει κατά το χρόνο εκτέλεσης, ενώ στατικά πληκτρολογήσει συμβαίνει κατά τη μεταγλώττιση.
Η λέξη στατική σε γενικές γραμμές φαίνεται να σημαίνει ότι τα πράγματα διάρκεια της μεταγλώττισης.
Υποθέτω ότι υπάρχουν και άλλες χρήσεις για αυτό, αλλά σε C όταν δηλώνετε μια στατική μεταβλητή,
αποθήκευση του κατανέμεται κατά τη μεταγλώττιση.
Εδώ, δυναμικά πληκτρολογήσει απλά σημαίνει ότι -
Στο C αν προσπαθήσετε να προσθέσετε ένα string και έναν ακέραιο, όταν το υπολογίσουν,
πρόκειται να διαμαρτύρονται, επειδή πρόκειται να πω ότι δεν μπορείτε να προσθέσετε ένα int και ένα δείκτη.
Είναι απλά δεν είναι έγκυρη λειτουργία.
Αυτό είναι ένα άλλο πράγμα που θα φτάσουμε στο ένα δευτερόλεπτο.
Αλλά αυτό το είδος του ελέγχου, το γεγονός ότι διαμαρτύρεται κατά τη μεταγλώττιση,
είναι στατικό έλεγχο τύπου.
Υπάρχουν γλώσσες όπου δεν χρειάζεται να πω char, float, int, και όλα αυτά τα πράγματα,
αλλά η γλώσσα μπορεί να πει από το πλαίσιο του πράγματος τι τύπο που θα έπρεπε να είναι,
αλλά είναι ακόμα στατικά πληκτρολογήσει.
Έτσι, εάν παίρνετε 51, ocaml, ποτέ δεν πρέπει να χρησιμοποιήσετε κάποιο από αυτά τα είδη,
αλλά ακόμα θα σε χρόνο μεταγλώττισης λένε δεν μπορείτε να κάνετε αυτό επειδή είστε ανάμειξη ένα int και ένα string.
Δυναμικά πληκτρολογήσει απλά σημαίνει ότι κάποια στιγμή κατά τη διάρκεια του χρόνου τρέχει εσείς πρόκειται να πάρετε μια καταγγελία.
Εάν έχετε χρησιμοποιήσει επίσης Java πριν, σε γενικές γραμμές, σχεδόν κάθε Ο-τύπο γλώσσας
πρόκειται να πληκτρολογήσει στατικά, έτσι C, C + +, Java, όλα αυτά είναι γενικά στατικά πληκτρολογήσει.
Στην Java κατά τη μεταγλώττιση κάτι και λέτε
string s ισούται με νέα κάτι που δεν είναι string,
που πρόκειται να διαμαρτυρηθεί επειδή αυτοί οι τύποι απλά δεν ταιριάζουν.
Αυτό πρόκειται να διαμαρτύρονται κατά τη μεταγλώττιση.
Αλλά έχει επίσης κάποια δυναμική φορά τα πράγματα όπως αν προσπαθήσετε να ρίχνει κάτι
σε έναν τύπο που είναι πιο συγκεκριμένες από ό, τι τρέχοντα τύπο του,
δεν υπάρχει τίποτα που μπορεί να κάνει κατά τη μεταγλώττιση για να ελέγξετε αν το καστ πρόκειται να πετύχει.
Java έχει επίσης κάποια δυναμική τύπου έλεγχο ότι από τη στιγμή που παίρνει σε αυτή τη γραμμή του κώδικα
όταν είναι πραγματικά εκτέλεση, πρόκειται να κάνει το απόρριμμα,
ελέγξτε αν το απόρριμμα ήταν έγκυρος στην πρώτη θέση,
και αν δεν ήταν, τότε πρόκειται να παραπονεθεί ότι έχετε ένα έγκυρο τύπο.
Δυναμική τύπου έλεγχο.
Πληκτρολογήστε αυτό σε ένα αρχείο με όνομα dynamic.php.
Dynamic.php.
Θα unzip αυτήν τη μορφοποίηση.
Έχουμε μια μεταβλητή, μπορούμε να ρυθμιστεί στο ακέραιο 7,
τότε θα πάμε να το εκτυπώσετε και% s -
Ω, είμαστε εκτύπωση το είδος του, έτσι gettype πρόκειται να επιστρέψει τον τύπο της μεταβλητής.
Είμαστε εκτύπωση μόλις τον τύπο ξανά και ξανά.
Εμείς απλά php.dynamic.php.
Θα δείτε ότι οι αλλαγές από ακέραιο αριθμό σε string στην Boolean καθώς περνάμε.
Στη C δεν υπάρχει Boolean τύπο δεδομένων, δεν υπάρχει συμβολοσειρά τύπου δεδομένων.
Υπάρχει char * και Boolean τείνει μόνο να είναι int ή char ή κάτι τέτοιο.
Στην PHP αυτοί οι τύποι δεν υπάρχουν, και αυτό είναι ένα από τα μεγάλα πλεονεκτήματα της PHP σε C -
ότι οι εργασίες χορδών είναι απείρως πιο εύκολο από ό, τι σε PHP Γ. Απλώς δουλειά.
>> Γι 'αυτό και επιστρέψτε εδώ.
Τρέξαμε dynamic.php.
Αυτό λέει η PHP διερμηνέα, που ονομάζεται php, για την εκτέλεση του κώδικα PHP σε dynamic.php.
Αν έχετε οποιαδήποτε σφάλματα στο αρχείο, ο διερμηνέας θα σας πω!
Ο διερμηνέας, αυτό είναι μια άλλη μεγάλη διαφορά μεταξύ PHP και C.
Στο C θα πρέπει να συγκεντρώνουν κάτι και στη συνέχεια να εκτελέσετε αυτή καταρτίζονται αρχείο.
Στην PHP ποτέ δεν compile τίποτα.
Έτσι, ο διερμηνέας PHP είναι βασικά διαβάζοντας μόνο αυτή τη γραμμή προς γραμμή.
Είναι χτυπά var = 7, τότε χτυπά printf, τότε χτυπά var, τότε χτυπά printf και ούτω καθεξής.
Υπάρχει ένα κομμάτι της σύνταξης που κάνει, και αποθηκεύει τα αποτελέσματα
οπότε αν εκτελέσετε τη δέσμη ενεργειών αργότερα μπορείτε να κάνετε μερικά,
αλλά ουσιαστικά είναι ένα είδος γραμμή με γραμμή του πράγματος.
Αυτό σημαίνει ότι πολλές από τις βελτιώσεις που έχουμε πάρει σε C,
όπως η κατάρτιση, είναι ακριβώς γενικά ο compiler μπορεί να κάνει πολλά κόλπα για σας.
Μπορεί να πάρει από αχρησιμοποίητες μεταβλητές, μπορεί να κάνει όλα αυτά τα είδη των πραγμάτων,
μπορεί να κάνει αναδρομή ουρά.
Στην PHP εσείς δεν πρόκειται να πάρει το πλεονέκτημα
επειδή ακριβώς πρόκειται να αρχίσει την εκτέλεση της γραμμής με γραμμή προς γραμμή,
και δεν αναγνωρίζει πραγματικά αυτά τα πράγματα τόσο εύκολα
δεδομένου ότι δεν είναι 1 μεγάλο πέρασμα σύνταξη πάνω από το πράγμα και στη συνέχεια εκτέλεση ·
είναι ακριβώς γραμμή προς γραμμή.
Έτσι, αυτός είναι ο διερμηνέας.
>> Back στη δυναμική δακτυλογράφηση μας: αρκετά δροσερό, ε;
Μπορείτε σίγουρα δεν θα μπορούσε να το κάνει αυτό σε C!
Τώρα, δείτε αν μπορείτε να υπολογίσετε τον τύπο του κάθε ένα από τα παρακάτω τιμές.
Δείτε αυτό για αναφορά.
Έτσι, 3,50. Τι τύπος νομίζετε ότι πρόκειται να είναι;
Εδώ είναι τα είδη που έχουμε.
Έχουμε bools, ακέραιοι, πλωτά σημεία, συμβολοσειρές, πίνακες, αντικείμενα,
και στη συνέχεια, το οποίο πόρους, είναι το είδος των ασαφής.
Νομίζω ότι υπάρχει πραγματικά ένα παράδειγμα εδώ.
Στη συνέχεια υπάρχει NULL. NULL είναι ένας ειδικός τύπος.
Σε αντίθεση με C όπου NULL είναι απλώς ένας δείκτης με τη διεύθυνση 0,
σε PHP, NULL είναι δικό της τύπο, όπου το μόνο πράγμα που ισχύουν αυτού του τύπου είναι NULL.
Αυτό είναι πολύ πιο χρήσιμο για τον έλεγχο σφαλμάτων.
Στην C, όπου είχαμε το θέμα αυτό όπου κι αν επιστρέψει NULL,
Μήπως αυτό σημαίνει ότι είστε επιστρέφοντας ένα δείκτη NULL NULL χρήση ή για να δηλώσει σφάλμα
ή το σύνολο του εν λόγω σύγχυσης που είχαμε σε ένα σημείο.
Εδώ, επιστρέφουν NULL σημαίνει γενικά λάθος.
Πολλά πράγματα επίσης για ψευδή επιστρέψει σφάλμα.
Αλλά το θέμα είναι ο τύπος NULL, το μόνο πράγμα που του τύπου NULL είναι NULL.
Στη συνέχεια, επανάκλησης είναι σαν μπορείτε να ορίσετε κάποιες ανώνυμες λειτουργίες.
Δεν χρειάζεται να δώσει η λειτουργία ένα όνομα, αλλά δεν θα πρέπει να ασχοληθεί με αυτό εδώ.
Κοιτάζοντας τους τύπους που δεν περιμένουν από εμάς να γνωρίζουμε,
τι νομίζετε ότι ο τύπος των 3,50 είναι; >> [Φοιτητής] Float.
Ναι.
Έτσι λοιπόν εδώ, τι νομίζετε ότι ο τύπος είναι αυτό; >> [Φοιτητής] Array.
Ναι. Το πρώτο ήταν πλωτήρα, το δεύτερο είναι ένας πίνακας.
Σημειώστε ότι αυτή η σειρά δεν είναι σαν μια σειρά C
όπου έχετε δείκτη 0 έχει κάποια αξία, δείκτης 1 έχει κάποια αξία.
Εδώ οι δείκτες είναι a, b, και c και οι τιμές είναι 1, 2, και 3.
Στην PHP, δεν υπάρχει διαφορά ανάμεσα σε ένα associative array και μόνο τακτική σειρά
όσο θα πίστευε κανείς από την Γ.
Υπάρχει μόνο αυτό, και κάτω από το καπό μια κανονική σειρά είναι απλά ένα associative array
όπου 0 χάρτες σε κάποια τιμή με τον ίδιο τρόπο μια χάρτες με κάποια αξία.
Για το λόγο αυτό, η PHP μπορεί να είναι αρκετά κακό για πραγματικά γρήγορη κώδικα / συγκριτικής αξιολόγησης πράγματα
δεδομένου ότι σε C όταν χρησιμοποιείτε μια σειρά ξέρετε ότι η πρόσβαση σε ένα μέλος είναι σταθερό χρόνο.
Στην PHP πρόσβαση σε ένα μέλος είναι ποιος ξέρει πόσο χρόνο;
Είναι μάλλον σταθερή, αν hashes σωστά.
Ποιος ξέρει τι πραγματικά κάνει κάτω από την κουκούλα;
Θα πρέπει πραγματικά να εξετάσουμε την εφαρμογή για να δείτε πώς πρόκειται να ασχοληθεί με αυτό.
Μέχρι τότε fopen.
Νομίζω ότι εδώ ας PHP εγχειρίδιο fopen να δούμε τον τύπο επιστροφής.
Βλέπουμε εδώ μπορείτε να αναζητήσετε σχεδόν κάθε λειτουργία στο εγχειρίδιο PHP
και αυτό είναι το είδος του ανθρώπου σελίδα της PHP.
Ο τύπος επιστροφής θα είναι πόρος.
Αυτός είναι ο λόγος που έψαξα, γιατί δεν ορίζει πραγματικά πόρων.
Η ιδέα των πόρων, σε C κατά κάποιο τρόπο πήρε ένα αρχείο * ή οτιδήποτε άλλο?
στην PHP είναι ο πόρος * Το αρχείο σας.
Είναι ό, τι πρόκειται να διαβάζετε από, είναι τι πρόκειται να εγγράφως.
Είναι συνήθως εξωτερικό, γι 'αυτό είναι ένας πόρος που μπορεί να τραβήξει από τα πράγματα και να ρίξει τα πράγματα σε.
Και τελικά, ποιος είναι ο τύπος της NULL; >> [Φοιτητής] NULL.
Ναι. Έτσι, το μόνο πράγμα που είναι NULL είναι NULL.
NULL είναι NULL.
>> Ένα χαρακτηριστικό του συστήματος τύπου της PHP (προς το καλύτερο ή προς το χειρότερο) είναι η ικανότητά του να ταχυδακτυλουργία τύπους.
Όταν γράφετε μια γραμμή κώδικα PHP που συνδυάζει τις τιμές των διαφόρων τύπων,
PHP θα προσπαθήσει να κάνει το λογικό.
Δοκιμάστε κάθε μία από τις παρακάτω γραμμές κώδικα PHP. Τι εκτυπωθούν;
Είναι αυτό που περιμένατε; Γιατί ή γιατί όχι;
Το γεγονός αυτό για PHP είναι αυτό που κάνει αυτό που λέμε ασθενώς δακτυλογραφημένα.
Αδύναμα δακτυλογραφημένα και έντονα δακτυλογραφημένη,
υπάρχουν διαφορετικές χρήσεις για αυτούς τους όρους,
αλλά οι περισσότεροι άνθρωποι χρησιμοποιούν ασθενώς δακτυλογραφημένα και έντονα δακτυλογραφημένη να σημαίνει αυτό το είδος του πράγματος
όπου ("1" + 2)? που λειτουργεί.
Στην Γ αυτό δεν θα λειτουργήσει.
Μπορείτε να φανταστείτε αυτό δεν λειτουργεί.
Πολλοί άνθρωποι μπερδεύονται δυναμική δακτυλογράφηση και αδύναμη πληκτρολόγηση και στατική δακτυλογράφηση και ισχυρή τυποποίηση.
Η Python είναι ένα άλλο παράδειγμα μιας γλώσσας που είναι δυναμικά πληκτρολογήσει.
Μπορείτε να ρίξει γύρω από τους τύπους των μεταβλητών και πρόκειται να καθοριστεί κατά το χρόνο εκτέλεσης
όλα τα σημεία ελέγχων σφάλμα.
Στην Python πρόκειται να εκτελέσει αυτό και θα δείτε ("1" + 2)?
και αυτό θα αποτύχει, διότι λέει ότι δεν μπορείτε να προσθέσετε ένα string και έναν ακέραιο.
Στην PHP, η οποία είναι εξίσου δυναμικά πληκτρολογήσατε, αυτό δεν θα αποτύχει.
Ασθενής πληκτρολόγηση έχει να κάνει με το γεγονός ότι κάνει τα πράγματα με τους τύπους
που δεν κάνει πραγματικά αίσθηση απαραίτητα.
Έτσι ("1" + 2)? Μπορώ να φανταστώ ότι είναι η σειρά 12, μπορώ να φανταστώ ότι είναι η σειρά 3,
Μπορώ να φανταστώ να είναι ο ακέραιος 3.
Δεν είναι κατ 'ανάγκην σαφώς καθορισμένη, και είμαστε κατά πάσα πιθανότητα θα δείτε εδώ
ότι όταν θα εκτυπωθούν ("1" + 2)? αυτό είναι κατά πάσα πιθανότητα θα καταλήγουν να είναι διαφορετικά
από την εκτύπωση (1 + "2").
Και αυτό τείνει να είναι, κατά τη γνώμη μου, προς το χειρότερο.
Εδώ μπορούμε να δοκιμάσουμε αυτά.
Ένα άλλο μικρό τέχνασμα για PHP είναι ότι δεν χρειάζεται να γράψει στην πραγματικότητα το αρχείο.
Αυτό δεν έχουν τρέξει αυτή την κατάσταση εντολών.
Έτσι, php-r, τότε μπορεί να ρίξει στην εντολή εδώ:
"Print ('1 '+ 2)?" Και θα ρίξει μια νέα γραμμή.
Αυτό το έντυπο 3.
Φαίνεται σαν να εκτυπώνει 3 και είναι ο ακέραιος 3.
Έτσι, τώρα ας προσπαθήσουμε ο άλλος τρόπος γύρω από:
"Print (1 + '2 ')?
Παίρνουμε 3, και επίσης πρόκειται να είναι ακέραιος 3; Ειλικρινά δεν έχω καμία ιδέα.
Μοιάζει με αυτό είναι συνεπείς.
Δεν υπάρχει καμία πιθανότητα να είναι το 12 string ή κάτι τέτοιο
PHP επειδή, σε αντίθεση με JavaScript και Java πάρα πολύ,
έχει ένα ξεχωριστό φορέα για συνένωσης.
Αλληλουχία στην PHP είναι η τελεία.
Έτσι, εκτύπωση (1 '2 '.)? Πρόκειται να μας δώσει 12.
Αυτό τείνει να οδηγήσει σε σύγχυση όταν οι άνθρωποι προσπαθούν να κάνουν κάτι σαν str + =
κάποιο άλλο πράγμα που θέλετε να προσθέσετε για να το τέλος του string τους, και ότι πρόκειται να αποτύχει.
Θα χρειαστεί να κάνετε str. =
Γι 'αυτό μην ξεχνάτε συνένωση σε PHP είναι μια τελεία.
Άλλα πράγματα που μπορείτε να δοκιμάσετε: εκτύπωση ("CS" + 50)?
Σας έχω πει ότι δεν υπάρχει καμία ελπίδα από το αποτέλεσμα CS50
δεδομένου ότι δεν είναι συνένωση +.
Τι νομίζετε ότι αυτό πρόκειται να καταλήξει να είναι;
Ειλικρινά έχω την παραμικρή ιδέα.
Φαίνεται σαν να είναι μόλις 50.
Βλέπει το string, και εγώ στοίχημα αν βάλουμε 123CS -
Βλέπει την πρώτη σειρά, προσπαθεί να διαβάσει έναν ακέραιο από αυτό ή έναν αριθμό από αυτό.
Στην περίπτωση αυτή βλέπει 123CS.
"Αυτό δεν έχει νόημα ως ακέραιος αριθμός, έτσι είμαι απλώς πρόκειται να σκεφτώ 123."
Έτσι, 123 + 50 θα είναι 173.
Και εδώ αρχίζει διαβάζετε αυτό ως ακέραιος.
Δεν βλέπω τίποτα, γι 'αυτό ακριβώς το αντιμετωπίζει ως 0. Έτσι 0 + 50 πρόκειται να είναι 50.
Αυτό υποθέτω πρόκειται να κάνει κάτι παρόμοιο.
Σκέφτομαι 99.
Ναι, επειδή πρόκειται να κάνουν το πρώτο -
Έτσι, 99.
Εδώ (10/7), αν αυτό ήταν C, τι θα ήταν αυτό επιστρέψουν;
[Φοιτητής] 1. >> Ναι, θα είναι 1, γιατί 10/7 η διαίρεση ακεραίων 2.
Ένας ακέραιος διαιρείται με έναν ακέραιο πρόκειται να επιστρέψει έναν ακέραιο.
Δεν μπορεί να επιστρέψει ό, τι το σημείο 1 που θα ήταν, γι 'αυτό ακριβώς πρόκειται να επιστρέψει 1.
Εδώ εκτύπωση (7.10)? Πρόκειται να ερμηνεύσει ότι στην πραγματικότητα.
Και αυτό σημαίνει ότι αν θέλετε πραγματικά να κάνετε ακέραιο στρογγυλοποίηση και τέτοια πράγματα,
που χρειάζεται να κάνετε εκτύπωση (δάπεδο (10/7))?
Στο C είναι μάλλον περίεργο ότι μπορείτε να βασιστείτε ακέραιο περικοπή τακτικά,
αλλά στην PHP δεν μπορείτε γιατί θα μετατρέψει αυτόματα σε ένα άρμα.
Και τότε (7 + αλήθεια)? Τι νομίζετε ότι πρόκειται να είναι;
Υποθέτω 8 αν πρόκειται να ερμηνεύσει ως αληθινό 1.
Φαίνεται σαν να είναι 8.
>> Έτσι, οτιδήποτε έχουμε κάνει στα τελευταία 10 λεπτά δεν πρέπει ποτέ να κάνουμε απολύτως.
Θα δείτε τον κώδικα που το κάνει αυτό.
Δεν πρέπει να είναι τόσο απλό όσο αυτό.
Θα μπορούσατε να έχετε 2 μεταβλητές, και 1 μεταβλητή συμβαίνει να είναι ένα string
και η άλλη μεταβλητή που συμβαίνει να είναι ένα int, και στη συνέχεια, μπορείτε να προσθέσετε αυτές τις μεταβλητές μαζί.
Από την PHP δυναμικά δακτυλογραφημένες και δεν θα κάνει κανένα έλεγχο για τον τύπο σας
και δεδομένου ότι είναι ασθενώς δακτυλογραφημένα και δεδομένου ότι απλά θα ρίξει αυτόματα αυτά τα πράγματα μαζί
και όλα θα δουλέψουν, είναι δύσκολο να γνωρίζουν καν ότι αυτή η μεταβλητή πρέπει να είναι μια συμβολοσειρά τώρα,
γι 'αυτό δεν πρέπει να το προσθέσετε σε αυτή τη μεταβλητή, η οποία είναι ένας ακέραιος.
Η βέλτιστη πρακτική είναι αν η μεταβλητή είναι μια σειρά, να το κρατήσει ως συμβολοσειρά για πάντα.
Αν μια μεταβλητή είναι int, να το κρατήσει ως int για πάντα.
Αν θέλετε να ασχοληθεί με ακέραιους αριθμούς και έγχορδα,
μπορείτε να χρησιμοποιήσετε varsint - αυτό είναι το JavaScript.
Intval. Το κάνω αυτό όλη την ώρα. PHP και JavaScript να συνδυάσω τα πάντα.
Έτσι intval πρόκειται να επιστρέψει την ακέραια τιμή μιας μεταβλητής.
Αν περνάμε στο "print (intval ('123 '))? Μπορείτε να πάρετε 123.
Intval από μόνη της δεν πρόκειται να κάνει τον έλεγχο για μας ότι είναι αποκλειστικά ένας ακέραιος.
Το εγχειρίδιο της PHP, υπάρχουν μόνο τόσες πολλές λειτουργίες που είναι διαθέσιμες,
έτσι και εδώ νομίζω ότι αυτό που θα ήθελα να χρησιμοποιήσετε είναι is_numeric πρώτα.
Υποθέτω ότι επέστρεψε ψευδείς.
Αυτό είναι ένα άλλο πράγμα που θα πρέπει να πάει πέρα ​​είναι ===.
Έτσι is_numeric («'123df), δεν θα σκεφτώ αυτό ως is_numeric.
Στο C θα πρέπει να επαναλάβει πάνω από όλους τους χαρακτήρες
και ελέγξτε για να δείτε εάν κάθε χαρακτήρας είναι ψηφίο ή οτιδήποτε άλλο.
Εδώ is_numeric πρόκειται να το κάνει αυτό για μας,
και αυτό είναι που επιστρέφει false.
Έτσι, όταν εκτυπώνεται ότι, το έντυπο τίποτα, έτσι εδώ είμαι σύγκριση για να δούμε,
δεν τυχαίνει να είναι ψευδής; Και έτσι τώρα είναι εκτύπωση 1.
Προφανώς τυπώνει 1, όπως ισχύει, αντί της εκτύπωσης ισχύει ως αλήθεια.
Αναρωτιέμαι αν κάνω print_r. Όχι, το κάνει ακόμα 1.
>> Πηγαίνοντας πίσω στο ===, == εξακολουθεί να υφίσταται,
και αν μιλήσετε με τον Tommy θα σου πει == είναι απολύτως εντάξει.
Πάω να πω ότι είναι τρομερό == και δεν πρέπει ποτέ να χρησιμοποιείτε ==.
Η διαφορά είναι ότι == συγκρίνει τα πράγματα
όπου μπορεί να είναι αλήθεια, ακόμη και αν δεν είναι ο ίδιος τύπος,
ενώ === συγκρίνει τα πράγματα και πρώτα οι έλεγχοι αυτοί το ίδιο είδος;
Ναι. Εντάξει, τώρα θα πάω να δω αν πραγματικά συγκρίνουν να είναι ίσες.
Μπορείτε να πάρετε περίεργα πράγματα σαν 10 ισούται με - ας δούμε τι λέει ότι.
Έτσι ('10 '== '1 e1)?
Αυτό επιστρέφει true.
Υπάρχει κάποιος που έχει οποιεσδήποτε εικασίες γιατί αυτό επιστρέφει αλήθεια;
Δεν είναι μόνο γι 'αυτό. Ίσως αυτό είναι μια υπόδειξη.
Αλλά αν μπορώ να αλλάξω ότι σε ένα f - το καταριέται! Κρατάω χρησιμοποιώντας διπλά εισαγωγικά.
Ο λόγος για τα διπλά εισαγωγικά είναι φωνάζεις γιατί έχω βάλει αυτό σε διπλά εισαγωγικά.
Γι 'αυτό και θα μπορούσε να ξεφύγει από τις διπλά εισαγωγικά εδώ, αλλά μονά εισαγωγικά καθιστούν ευκολότερη.
Έτσι ('10 '== '1 f1)? Δεν εκτυπώνει αλήθεια. ('10 '== '1 E1)? Εκτυπώνει αλήθεια.
[Φοιτητής] Είναι εξάγωνο; >> Δεν είναι hex, αλλά είναι κοντά ότι είναι σαν -
1E1, επιστημονική σημειογραφία.
Αναγνωρίζει ως 1E1 1 * 10 ^ 1 ή οτιδήποτε άλλο.
Αυτοί είναι ίσοι ακέραιοι.
Αν το κάνουμε τότε === πρόκειται να είναι ψευδής.
Δεν έχω πραγματικά καμία ιδέα αν κάνουμε ό, τι για == (10 και «'10abc)?; Εντάξει. Έτσι, αυτό είναι αλήθεια.
Έτσι ακριβώς όπως όταν κάνατε (10 + '10abc)? Και θα είναι 20,
εδώ (10 '10abc == ')? είναι αλήθεια.
Ακόμα χειρότερα είναι τα πράγματα όπως (ψευδή == NULL)? Είναι αλήθεια
ή (ψευδή == 0)? είναι αλήθεια, (ψευδή == [])?
Υπάρχουν περίεργες περιπτώσεις - Αυτό είναι ένα από αυτά τα περίεργα περιπτώσεις.
Παρατηρήστε ότι (ψευδώς == [])? Είναι αλήθεια.
('0 '== False)? Είναι αλήθεια.
('0 '== [])? Είναι ψευδής.
Έτσι == είναι σε καμία περίπτωση μεταβατική.
α μπορεί να είναι ίσο με το β και το α μπορεί να είναι ίσο με c,
β αλλά ενδέχεται να μην είναι ίσο με γ.
Αυτό είναι ένα βδέλυγμα σε μένα, και θα πρέπει να χρησιμοποιείτε πάντα ===.
[Φοιτητής] Μπορούμε να το κάνουμε! ==, Καθώς; >> [Bowden] Ναι.
Το ισοδύναμο θα ήταν! = Και! ==.
Αυτό είναι στην πραγματικότητα μεγάλωσε στο spec PSET
όπου πολλές λειτουργίες απόδοσης -
Το εγχειρίδιο της PHP είναι καλό γι 'αυτό.
Θα πρέπει να θέσει σε ένα μεγάλο κόκκινο κουτί, "Αυτό θα επιστρέψει false αν υπάρχει ένα σφάλμα."
Αλλά επιστρέφοντας 0 είναι ένα απολύτως λογικό πράγμα που πρέπει να επιστρέψουν.
Σκεφτείτε για κάθε λειτουργία που αναμένεται να επιστρέψει έναν ακέραιο.
Ας πούμε ότι αυτή η λειτουργία είναι υποτίθεται για να μετρήσει τον αριθμό των γραμμών σε ένα αρχείο ή κάτι τέτοιο.
Υπό κανονικές συνθήκες, θα περάσει αυτή τη λειτουργία σε ένα αρχείο
και πρόκειται να επιστρέψει έναν ακέραιο που αντιπροσωπεύει τον αριθμό των γραμμών.
Έτσι, 0 είναι ένα απολύτως λογικό αριθμό, εάν το αρχείο είναι απλά άδειο.
Αλλά τι γίνεται αν έχετε περάσει το ένα μη έγκυρο αρχείο και η λειτουργία συμβαίνει να επιστρέψει false
αν δώσετε ένα έγκυρο αρχείο;
Αν απλά κάνετε == δεν είστε διαφοροποίηση της υπόθεσης μεταξύ έγκυρο αρχείο και κενό αρχείο.
Να χρησιμοποιείτε πάντα ===.
Αυτό είναι όλα αυτά.
>> Στην PHP, ο τύπος πίνακα είναι διαφορετική από ό, τι έχετε συνηθίσει στο C.
Πράγματι, μπορεί να έχετε παρατηρήσει ήδη αυτό το παραπάνω, όταν είδε ότι αυτό είναι του τύπου σειρά.
Η σύνταξη είναι νέο στήριγμα από την PHP 5.4, η οποία είναι η νεότερη έκδοση της PHP.
Πριν από αυτό που πάντα έπρεπε να γράψω array ('a' -> 1, 'b' -> 2.
Αυτός ήταν ο κατασκευαστής για μια σειρά.
Τώρα PHP έχει έρθει τελικά γύρω από την ωραία σύνταξη των μόλις αγκύλες,
η οποία είναι ακριβώς τόσο πολύ καλύτερα από ό, τι σειρά.
Όμως, λαμβάνοντας υπόψη PHP 5.4 είναι η τελευταία έκδοση,
μπορείτε να αντιμετωπίσετε τα μέρη που δεν έχουν ακόμη PHP 5.3.
Κατά τη διάρκεια του καλοκαιριού που έτρεξε σε αυτό το θέμα, όπου PHP 5.3 ήταν ό, τι είχαμε στη συσκευή,
αλλά ο διακομιστής που έχουμε αναπτύξει όλα βαθμού βιβλίο μας και να υποβάλουν και όλα αυτά τα πράγματα για να
ήταν PHP 5.4.
Μη γνωρίζοντας αυτό, έχουμε αναπτύξει σε 5,3, ώθησε σε 5,4,
και τώρα ξαφνικά κανένα από τα έργα μας κώδικα
επειδή έτυχε να έχουν αλλαγές μεταξύ 5,3 και 5,4
που δεν είναι συμβατό,
και πρέπει να πάμε και να διορθώσετε όλα τα πράγματα μας που δεν λειτουργούν για την PHP 5.4.
Για αυτήν την κατηγορία, δεδομένου ότι η συσκευή δεν έχει PHP 5.4,
είναι απολύτως εντάξει για να χρησιμοποιήσει αγκύλες.
Αλλά αν ψάχνετε τα πράγματα γύρω από το Internet,
αν ψάχνετε μέχρι κάποια πράγματα πίνακα, πιθανότατα θα πάμε να δούμε
το ξόρκι από τη σύνταξη κατασκευαστή σειρά δεδομένου ότι είναι γύρω από την PHP γεννήθηκε
και πλατεία σύνταξη βραχίονα ήταν γύρω για τους τελευταίους μήνες ζευγάρι
ή όποτε 5,4 ήρθε γύρω.
Αυτό είναι το πώς μπορείτε δείκτη.
Ακριβώς όπως και στην C το πώς θα κάνατε δείκτη από αγκύλες όπως $ array [0], $ array [1], $ array [2],
Σας δείκτης με τον ίδιο τρόπο, αν τύχει να έχετε δείκτες σας είναι χορδές.
Έτσι, $ array ['α'] και $ array [«β»].
$ Array [b]. Γιατί αυτό θα είναι λάθος;
Θα δημιουργήσει πιθανώς μια προειδοποίηση, αλλά εξακολουθούν να εργάζονται. PHP έχει την τάση να το κάνουμε αυτό.
Τείνει να απλά, "Πάω να σας προειδοποιήσει σχετικά με αυτό, αλλά είμαι απλώς πρόκειται να συνεχίσουμε
»Και κάνει ό, τι μπορώ."
Θα μεταφράσει αυτό κατά πάσα πιθανότητα σε μια σειρά,
αλλά είναι δυνατόν ότι σε κάποιο σημείο κατά το παρελθόν είπε κάποιος
καθορίσει το b να είναι 'Hello World'.
Έτσι τώρα β μπορούσε να είναι μια συνεχής και $ array [b] θα είναι πραγματικά να κάνει 'Hello World'.
Νομίζω ότι σε αυτό το σημείο, ή τουλάχιστον PHP ρυθμίσεις μας,
αν προσπαθήσετε να δημιουργήσετε ευρετήριο σε μια σειρά και ότι το κλειδί δεν υπάρχει, θα αποτύχει.
Δεν νομίζω ότι θα σας προειδοποιήσει απλά.
Ή τουλάχιστον μπορείτε να το ρυθμίσετε έτσι ώστε να μην προειδοποιούν απλά, ακριβώς κατ 'ευθείαν επάνω αποτυγχάνει.
>> Ο τρόπος να ελέγξετε για να δείτε αν πραγματικά υπάρχει ένας τέτοιος δείκτης είναι isset.
Έτσι isset ($ array ['Hello World']) θα επιστρέψει ψευδείς.
isset ($ array ['β']) θα επιστρέψει αλήθεια.
Μπορείτε να αναμίξετε αυτές τις συντάξεις.
Είμαι αρκετά σίγουρος τι αυτός ο πίνακας θα καταλήξει να είναι είναι - Μπορούμε να το δοκιμάσετε.
Ω, θέλω PHPWord.
Αυτή είναι η ανάμειξη της σύνταξης όπου μπορείτε να ορίσετε τι είναι το κλειδί
και δεν καθορίσετε τι είναι το κλειδί.
Έτσι, 3 εδώ είναι μια τιμή.
Δεν έχετε ρητά είπε τι κλειδί της πρόκειται να είναι.
Τι νομίζετε ότι κλειδί της θα είναι;
[Φοιτητής] 0. >> Υποθέτω 0 μόνο γιατί είναι το πρώτο που δεν έχουν καθοριστεί.
Μπορούμε να κάνουμε πραγματικότητα ένα ζευγάρι από αυτές τις περιπτώσεις.
Έτσι print_r είναι αναδρομική εκτύπωση. Θα εκτυπώσετε ολόκληρη την σειρά.
Θα εκτυπώσετε subarrays του πίνακα, εάν υπήρχαν.
Έτσι print_r ($ array)? Php.test.php.
Αυτό δεν μοιάζει σαν να έδωσε το 0.
Υπάρχει πράγματι κάτι που πρέπει να θυμάστε εδώ, αλλά εμείς θα επικοινωνήσουμε μαζί σε ένα δευτερόλεπτο.
Τι γίνεται όμως αν τυχαίνει να κάνουν αυτό το δείκτη 1;
PHP δεν κάνει διάκριση μεταξύ των δεικτών εγχόρδων και ακέραιος,
έτσι σε αυτό το σημείο έχω ορίζεται μόνο ένα δείκτη 1 και μπορώ να κάνω και τα δύο $ array [1] και $ array ['1 ']
και αυτό θα είναι το ίδιο δείκτη και το ίδιο κλειδί.
Και τώρα τι νομίζεις 3, πρόκειται να είναι; >> [Φοιτητής] 2. >> [Bowden] Υποθέτω 2.
Ναι. Είναι 2.
Τι θα συμβεί αν το κάναμε αυτό είναι 10, αυτό είναι 4; Τι νομίζετε ότι ο δείκτης του 3 πρόκειται να είναι;
Σκέφτομαι 11.
Η εικασία μου ως προς το τι κάνει η PHP - και νομίζω ότι έχω ξαναδεί αυτό -
είναι αυτό που κρατά μόνο κομμάτι του τι το υψηλότερο αριθμητικό δείκτη αυτό είναι που χρησιμοποιείται μέχρι τώρα είναι.
Ποτέ δεν πρόκειται να ορίσετε ένα δείκτη string σε 3. Θα είναι πάντα ένα αριθμητικό δείκτη.
Γι 'αυτό παρακολουθεί το ψηλότερο σημείο αυτό είναι ανατεθεί μέχρι σήμερα, η οποία συμβαίνει να είναι 10,
και πρόκειται να δώσει 11 - 3.
Αυτό που είπα πριν, παρατηρήστε τον τρόπο με τον οποίο εκτύπωση αυτής της σειράς.
Τυπώνει κλειδί 10, σημείο 4, στοιχείο 11, κλειδί d.
Ή ακόμα και ας το κάνουμε -
Υποθέτω ότι δεν έθεσε το 0, αλλά είναι εκτύπωση 1, 2, 3, 4.
Τι θα συμβεί αν αλλάξω εδώ; Ή ας στραφούν στην πραγματικότητα αυτά τα 2.
Τώρα εκτυπώνει 2, 1, 3, 4.
Πίνακες της PHP δεν είναι ακριβώς όπως το κανονικό πίνακα κατακερματισμού σας.
Είναι απολύτως λογικό να σκεφτούμε τους ως πίνακες κατακερματισμού το 99% του χρόνου.
Αλλά σε πίνακες κατακερματισμού σας δεν υπάρχει καμία αίσθηση του σειρά με την οποία εισήχθησαν τα πράγματα.
Έτσι, μόλις το τοποθετήσετε σε πίνακα κατακερματισμού σας,
υποθέσουμε ότι δεν υπάρχει συνδεδεμένη λίστα και θα μπορούσαν να κρίνουν σε συνδεδεμένη λίστα
η οποία εισάγεται πρώτη.
Αλλά εδώ έχουμε τοποθετηθεί 2 πρώτη και ξέρει όταν είναι εκτύπωση από αυτό το array ότι 2 έρχεται πρώτη.
Δεν το εκτυπώσετε σε μόλις οποιαδήποτε σειρά.
Η τεχνική δομή δεδομένων που χρησιμοποιεί είναι είναι ένα οργανωμένο χάρτη,
έτσι ώστε να αντιστοιχίζει κλειδιά για τις αξίες και θυμάται τη σειρά με την οποία οι κλειδιά εισήχθησαν.
Βασικά είναι σε ορισμένες επιπλοκές που είναι πραγματικά ενοχλητικό να -
Ας πούμε ότι έχετε μια σειρά 0, 1, 2, 3, 4, 5
και θέλετε να πάρετε έξω δείκτη 2.
Ένας τρόπος για να γίνει αυτό, ας δούμε τι μοιάζει.
0, 2, 1, 3, 4.
Απενεργοποίηση συμβαίνει να unset των δύο μεταβλητών και δεικτών πίνακα.
Έτσι unset ($ array [2])?
Τώρα τι είναι αυτό πρόκειται να μοιάσει; 2 είναι μόλις φύγει, έτσι ώστε να είναι απολύτως εντάξει.
Πιο ενοχλητικό είναι αν θέλετε τα πράγματα να είναι πραγματικά σαν μια σειρά.
Θα βάλω τυχαίους αριθμούς.
Τώρα παρατηρήσετε δείκτες μου.
Θέλω απλά να είναι σαν μια σειρά C, όπου πηγαίνει από το 0 έως το μήκος - 1
και μπορώ να επαναλάβει πάνω ως τέτοια.
Αλλά μόλις έχω unset το δεύτερο δείκτη, τι ήταν στο δείκτη 3 δεν γίνει τώρα δείκτης 2.
Αντ 'αυτού, αφαιρεί μόνο ότι ο δείκτης και τώρα πηγαίνετε 0, 1, 3, 4.
Αυτό είναι απολύτως λογικό.
Είναι απλά ενοχλητικό και πρέπει να κάνουμε τα πράγματα όπως συνδέσεων πίνακα. Ναι.
>> [Φοιτητής] Τι θα συμβεί αν είχατε ένα για βρόχο
και θα ήθελε να πάει πέρα ​​από όλα τα στοιχεία;
Όταν χτύπησε 2, θα το δώσει ποτέ;
Επανάληψη σε μια σειρά. Υπάρχουν 2 τρόποι που μπορείτε να το κάνετε.
Μπορείτε να χρησιμοποιήσετε μια τακτική για βρόχο.
Αυτό είναι μια άλλη πολυπλοκότητα της PHP.
Οι περισσότερες γλώσσες, θα έλεγα, έχουν κάποιο είδος του μήκους ή len ή κάτι
υποδεικνύοντας το μήκος ενός πίνακα.
Στην PHP είναι καταμέτρηση.
Έτσι, αριθμός ($ array)? $ I + +)
Ας εκτύπωσης ($ array [$ i])?
Notice: Undefined offset: 2.
Είναι ακριβώς πρόκειται να αποτύχει.
Αυτός είναι ο λόγος που, ως επί το πλείστον, δεν θα πρέπει να επαναλάβει πάνω από μια σειρά σαν αυτή.
Θα μπορούσε να είναι μια υπερβολή, αλλά ποτέ δεν πρέπει να επαναλάβει σε μια σειρά, όπως αυτό
επειδή η PHP παρέχει σύνταξη της foreach όπου foreach ($ array $ ως στοιχείο).
Τώρα, αν θα εκτυπώσετε ($ στοιχείο)? - We'll το συζητήσουμε σε ένα δεύτερο - που λειτουργεί τέλεια πρόστιμο.
Ο τρόπος που λειτουργεί foreach είναι το πρώτο επιχείρημα είναι ότι η σειρά είστε πάνω από την επανάληψη.
Και το δεύτερο επιχείρημα, στοιχείο, με κάθε πέρασμα του βρόχου for
πρόκειται να αναλάβει το επόμενο πράγμα στο πίνακα. Έτσι θυμηθείτε η σειρά έχει μια παραγγελία.
Η πρώτη φορά μέσω του για βρόχο, το στοιχείο θα είναι 123
τότε θα είναι 12 τότε θα είναι 13 τότε θα είναι 23 τότε θα είναι 213.
Τα πράγματα γίνονται πραγματικά περίεργο όταν κάνεις κάτι σαν foreach.
Ας δούμε τι θα συμβεί, γιατί δεν πρέπει ποτέ να το κάνετε αυτό.
Τι θα συμβεί αν εμείς unset ($ array [1])?
Αυτό ήταν μάλλον αναμενόμενο.
Είσαι πάνω από την επανάληψη αυτού του πίνακα, και κάθε φορά που είστε απενεργοποίηση του πρώτου δείκτη.
Έτσι, για το δείκτη 0, το πρώτο πράγμα, στοιχείο παίρνει την τιμή 0, γι 'αυτό πρόκειται να είναι 123.
Αλλά μέσα από το βρόχο για να unset δείκτης 1, έτσι αυτό σημαίνει ότι έχει φύγει 12.
Έτσι εκτύπωση. PHP_EOL.
PHP_EOL είναι μόνο νέα γραμμή, αλλά είναι τεχνικά πιο φορητό
από νέες γραμμές σε Windows είναι διαφορετικός από νέες γραμμές για Mac και UNIX.
Στα Windows νέας γραμμής είναι \ r \ n, ενώ παντού αλλού τείνει μόνο να είναι \ n.
PHP_EOL έχει ρυθμιστεί έτσι ώστε να χρησιμοποιεί ό, τι η νέα γραμμή του συστήματός σας είναι.
Έτσι εκτυπώσετε αυτό. Ας μην print_r ($ array) στο τέλος.
Δεν είχα ιδέα ότι αυτό θα ήταν η συμπεριφορά.
Αντικείμενο παίρνει ακόμα την αξία 12 ακόμα κι αν unset 12 πριν μας πήρε ποτέ σε αυτό από την σειρά.
Μην πάρτε τη λέξη μου για αυτό, αλλά μοιάζει με foreach δημιουργεί ένα αντίγραφο του πίνακα
και στη συνέχεια, το στοιχείο παίρνει όλες τις τιμές του αντιγράφου αυτού.
Έτσι ακόμα κι αν μπορείτε να τροποποιήσετε τον πίνακα στο εσωτερικό του για το βρόχο,
δεν θα νοιάζονται. Το στοιχείο θα αναλάβει τις αρχικές τιμές.
Ας προσπαθήσουμε απενεργοποίηση αυτό.
Κι αν αυτό είναι $ array [1] = "γεια"?
Ακόμα κι αν βάλουμε "γεια" στη σειρά, ποτέ δεν παίρνει θέση σε αυτή την τιμή.
Υπάρχει μια άλλη σύνταξη για foreach βρόχους
όπου βάζετε 2 μεταβλητές που χωρίζονται από ένα βέλος.
Αυτή η πρώτη μεταβλητή πρόκειται να είναι το κλειδί αυτής της αξίας,
και αυτή η δεύτερη μεταβλητή πρόκειται να είναι το ίδιο ακριβές σημείο.
Αυτό έχει ενδιαφέρον εδώ, αλλά αν πάμε πίσω στην αρχική μας υπόθεση του «ενός» -> 1,
«Β» -> 1,
εδώ αν εμείς απλά επαναλάβει για κάθε πίνακα ως στοιχείο, το στοιχείο θα είναι 1 κάθε φορά.
Αλλά αν θέλουμε επίσης να γνωρίζουν το κλειδί που συνδέεται με αυτό το στοιχείο
τότε κάνουμε ως βασικό $ -> $ στοιχείο.
Έτσι, τώρα μπορούμε να κάνουμε εκτύπωσης ($ κλειδί. »:«.
Τώρα είναι πάνω από την επανάληψη και την εκτύπωση κάθε πλήκτρο και συνδέονται αξία του.
>> Ένα επιπλέον πράγμα που μπορούμε να κάνουμε είναι foreach βρόχους μπορείτε να δείτε αυτή τη σύνταξη.
Συμπλεκτικά σύμβολα πριν από τα ονόματα των μεταβλητών τείνουν να είναι πώς PHP κάνει αναφορές.
Όταν παραπομπές είναι πολύ παρόμοια με δείκτες,
δεν έχετε δείκτες, έτσι ώστε να μην ασχοληθεί με τη μνήμη άμεσα.
Αλλά εσείς πρέπει αναφορές όπου 1 μεταβλητή αναφέρεται στο ίδιο πράγμα όπως μια άλλη μεταβλητή.
Μέσα από εδώ, ας κάνουμε $ στοιχείο. Ας πάμε πίσω στο 1, 10.
Ας κάνουμε το στοιχείο $ + +? Αυτό εξακολουθεί να υφίσταται σε PHP. Μπορείτε να κάνετε ακόμα + +.
php.test.php. Έχω να το εκτυπώσετε. print_r ($ array)?
Εμείς εκτύπωση 2, 11.
Αν είχα κάνει μόλις foreach ($ array ως στοιχείο $), τότε το στοιχείο θα είναι η τιμή 1
η πρώτη φορά μέσω του βρόχου. Θα αυξήσετε 1 με 2 και στη συνέχεια, τελειώσαμε.
Έτσι, στη συνέχεια θα περάσει από το δεύτερο πέρασμα του βρόχου και αυτό το στοιχείο είναι 10.
Το στοιχείο αυξήσεις έως 11, και στη συνέχεια, που είναι ακριβώς πετάμε.
Τότε print_r ($ array)? Και ας δούμε ότι αυτό είναι μόλις 1, 10.
Έτσι, η αύξηση που κάναμε χάθηκε.
Αλλά foreach ($ array ως στοιχείο & $)
τώρα αυτό το στοιχείο είναι το ίδιο στοιχείο, όπως το δικαίωμα αυτό εδώ. Είναι το ίδιο πράγμα.
Έτσι, το στοιχείο $ + + τροποποιεί σειρά 0.
Βασικά, μπορείτε επίσης να κάνετε $ k -> $ στοιχείο και μπορείτε να κάνετε $ array [$ k] + +?
>> Έτσι, ένας άλλος τρόπος για να γίνει αυτό, είμαστε ελεύθεροι να τροποποιήσετε το στοιχείο,
αλλά ότι δεν θα τροποποιήσει την αρχική σειρά μας.
Αλλά αν χρησιμοποιήσουμε k, που είναι το κλειδί για μας, τότε μπορούμε μόνο δείκτη σε σειρά μας χρησιμοποιώντας το κλειδί
και ότι αυξήσετε.
Η πιο άμεση μετατροπή της αρχικής σειρά μας.
Μπορείτε να κάνετε ακόμα και ότι αν για κάποιο λόγο ήθελε τη δυνατότητα να τροποποιήσει -
Στην πραγματικότητα, αυτό είναι απολύτως λογικό.
Εσείς δεν θέλετε να πρέπει να γράψετε $ array [$ k] + +,
απλά ήθελε να γράψει το στοιχείο $ + + αλλά και πάλι ήθελε να πει εάν ($ k === «α»)
μετά αύξησε το στοιχείο και στη συνέχεια να εκτυπώσετε σειρά μας.
Και τώρα τι περιμένουμε print_r να κάνουμε; Ποιες αξίες θα πρέπει να εκτυπωθούν;
[Μαθητής] 2 και 10. >> [Bowden] Μόνο αν το κλειδί ήταν «α» δεν τυπώνουμε ότι στην πραγματικότητα.
>> Μπορείτε πιθανότατα πολύ σπάνια, αν όχι ποτέ, θα πρέπει να ορίσετε λειτουργίες σε PHP,
αλλά μπορείτε να δείτε κάτι παρόμοιο, όπου μπορείτε ορίζουμε μια συνάρτηση σαν οτιδήποτε λειτουργία.
Συνήθως θα σας πω ($ foo, $ bar) και στη συνέχεια να ορίσετε να είναι οτιδήποτε.
Αλλά αν το κάνω αυτό, τότε αυτό σημαίνει πως ό, τι αποκαλεί ό, τι,
ό, τι ζητά baz, έτσι ώστε το πρώτο επιχείρημα πέρασε στην baz μπορεί να αλλάξει.
Ας κάνουμε $ foo + +?
και μέσα από εδώ, ας κάνουμε baz ($ στοιχείο)?
Τώρα ζητάμε μια λειτουργία.
Το επιχείρημα έχει ληφθεί από την αναφορά, πράγμα που σημαίνει ότι αν το τροποποιήσετε
είμαστε τροποποιώντας το πράγμα που ψηφίστηκε μέσα
Και εκτύπωση αυτό που περιμένουμε - αν έκανα θάλασσα σύνταξη - πήραμε 2, 11,
έτσι πράγματι αυξάνεται.
Ανακοίνωση χρειαζόμαστε αναφορές σε 2 μέρη.
Τι και αν το έκανα αυτό; Τι σημαίνει αυτό;
[Φοιτητής] Αυτό θα αλλάξει. Ναι >>.
Θέση είναι μόνο ένα αντίγραφο της τιμής στη συστοιχία.
Έτσι, το στοιχείο θα αλλάξει σε 2, αλλά ο πίνακας ['a'] θα εξακολουθεί να είναι 1.
Ή τι θα γίνει αν το κάνω αυτό;
Τώρα στοιχείο στέλνεται ως ένα αντίγραφο baz.
Έτσι, το αντίγραφο του επιχειρήματος θα αυξάνεται σε 2,
αλλά το ίδιο το στοιχείο δεν ήταν ποτέ αυξάνεται σε 2.
Και το στοιχείο είναι το ίδιο πράγμα με οποιαδήποτε σειρά βραχίονα,
έτσι ώστε η σειρά ποτέ δεν αυξάνεται.
Έτσι, τα δύο αυτά σημεία χρειάζονται.
>> PHP είναι συνήθως αρκετά έξυπνος για αυτό.
Θα μπορούσε κανείς να σκεφτεί θέλω να περάσει από αναφορά -
Αυτό ήταν πραγματικά μια ερώτηση σε έναν από τους psets.
Ήταν μια questions.txt πράγμα που είπε,
Γιατί μπορεί να θέλετε να περάσει αυτό το struct με αναφορά;
Ποια ήταν η απάντηση σε αυτό;
[Φοιτητής] Έτσι, δεν έχετε να αντιγράψετε κάτι μεγάλο. Ναι >>.
Ένα struct μπορεί να είναι αυθαίρετα μεγάλη, και όταν περάσει το struct στην ως επιχείρημα
που χρειάζεται για να αντιγράψετε ότι ολόκληρο το struct να περάσει στη λειτουργία,
ενώ αν περάσει μόνο το struct με αναφορά
τότε θα πρέπει απλά να αντιγράψετε ένα 4-byte διεύθυνση ως επιχείρημα για τη λειτουργία.
PHP είναι λίγο πιο έξυπνη από αυτό.
Αν έχω κάποια λειτουργία και να περνώ αυτό μια σειρά από 1.000 τα πράγματα,
δεν σημαίνει ότι πρόκειται να πρέπει να αντιγράψετε όλα τα 1.000 από αυτά τα πράγματα
να περάσει σε λειτουργία; Δεν χρειάζεται να το κάνουμε αυτό αμέσως.
Αν μέσα από αυτή τη λειτουργία, δεν τροποποιεί πραγματικά foo,
οπότε αν ($ foo === «γεια») επιστρέφουν αλήθεια.?
Σημειώστε ότι ποτέ δεν τροποποιηθεί ουσιαστικά το εσωτερικό επιχείρημα αυτής της λειτουργίας,
πράγμα που σημαίνει πως ό, τι ψηφίστηκε ως foo ποτέ δεν πρέπει να αντιγραφούν
επειδή είναι δεν είναι τροποποίηση.
Έτσι, ο τρόπος που λειτουργεί PHP είναι τα επιχειρήματα τα πάντα περνούν από αναφορά
μέχρι να προσπαθήσουμε πραγματικά να το τροποποιήσετε.
Τώρα, αν πω $ foo + +? Θα κάνει τώρα ένα αντίγραφο του αρχικού foo και να τροποποιήσετε το αντίγραφο.
Αυτό εξοικονομεί κάποιο χρόνο.
Αν δεν πρόκειται να αγγίξει αυτό το τεράστιο πίνακα, μπορείτε να τροποποιήσετε ποτέ πραγματικά,
δεν χρειάζεται να κάνει το αντίγραφο,
ενώ αν βάλουμε απλά αυτό το εμπορικό και το οποίο σημαίνει ότι δεν αντιγράφει ακόμη
ακόμα κι αν δεν το τροποποιήσετε.
Αυτή η συμπεριφορά ονομάζεται copy-on-write.
Θα το δείτε και σε άλλα μέρη, ειδικά αν λάβει μια σειρά μαθημάτων του λειτουργικού συστήματος.
Copy-on-write είναι ένα αρκετά συνηθισμένο μοτίβο, όπου δεν χρειάζεται να δημιουργήσετε ένα αντίγραφο του κάτι
εκτός και αν αυτό είναι στην πραγματικότητα αλλάζει. Ναι.
[Φοιτητής] Τι θα συμβεί αν είχατε την αύξηση στο εσωτερικό της δοκιμής,
οπότε μόνο 1 από το στοιχείο 1000 θα πρέπει να αλλάξει;
Δεν είμαι σίγουρος.
Νομίζω ότι θα αντιγράψετε ολόκληρο το πράγμα, αλλά είναι πιθανό να είναι αρκετά έξυπνος ώστε -
Στην πραγματικότητα, αυτό που σκέφτομαι είναι να φανταστεί είχαμε μια σειρά που μοιάζει με αυτό: $ array2 = [
Στη συνέχεια, «a» δείκτης είναι μια σειρά από [1 2 3 4], και ο δείκτης «β», είναι μια σειρά από οτιδήποτε άλλο.
Χρειάζομαι κόμματα μεταξύ όλων αυτών. Φανταστείτε ότι υπάρχουν κόμματα.
Στη συνέχεια, «γ», είναι το 3 αξία.
Εντάξει.
Τώρα ας πούμε ότι κάνουμε baz $ ($ array2)?
baz όπου δεν λαμβάνει αυτό με αναφορά.
Έτσι, $ foo ['c'] + +?
Αυτό είναι ένα τέτοιο παράδειγμα, όπου περνάμε array2 ως επιχείρημα
και στη συνέχεια τροποποιεί ένα ειδικό δείκτη της συστοιχίας με προσαύξηση αυτή.
Ειλικρινά δεν έχω καμία ιδέα για το τι PHP πρόκειται να κάνει.
Μπορεί εύκολα να κάνουν ένα αντίγραφο του το όλο πράγμα, αλλά αν είναι έξυπνος,
θα κάνει ένα αντίγραφο αυτών των πλήκτρων, όταν αυτό θα έχει ξεχωριστή αξία του
αλλά αυτό μπορεί να εξακολουθεί να οδηγεί στην ίδια συστοιχία 1,2,3,4
και αυτό μπορεί να εξακολουθεί να οδηγεί στην ίδια συστοιχία.
Εγώ θα το iPad.
Περνάμε σε αυτή την σειρά, όπου αυτός ο τύπος σε 3 σημεία, αυτά τα σημεία άντρα να [1,2,3,4],
αυτός ο τύπος με τα σημεία [34 ...]
Τώρα που είμαστε το πέρασμα στον baz, έχουμε την τροποποίηση αυτή.
Αν η PHP είναι έξυπνος, μπορεί απλά να κάνουμε -
Θα έπρεπε ακόμα να αντιγράψετε κάποια μνήμη, αλλά αν δεν υπήρχαν αυτά τα τεράστια ένθετα subarrays
εμείς δεν πρέπει να αντιγράψετε αυτά.
Δεν ξέρω αν αυτό είναι ό, τι κάνει, αλλά μπορώ να φανταστώ ότι το κάνουν.
Αυτό είναι επίσης ένα πολύ μεγάλο πλεονέκτημα του C πάνω από την PHP.
>> PHP κάνει τη ζωή τόσο πολύ ευκολότερη για πολλά πράγματα,
αλλά κατά κάποιο τρόπο δεν έχουν απολύτως καμία ιδέα για το πόσο καλά θα εκτελέσει
επειδή δεν έχω ιδέα κάτω από το καπό όταν αυτό είναι κάνοντας αυτά τα αντίγραφα των πραγμάτων,
Ω, είναι ότι πρόκειται να είναι μια σταθερή αντίγραφο του χρόνου,
είναι ακριβώς πρόκειται να αλλάξει δείκτη 1, είναι αυτό πρόκειται να είναι μια γελοία δύσκολη γραμμική αντίγραφο;
Τι θα συμβεί αν δεν μπορεί να βρει χώρο;
Μήπως τότε πρέπει να εκτελέσετε τη συλλογή σκουπιδιών για να πάρει λίγο περισσότερο χώρο;
Και συλλογής απορριμμάτων μπορεί να πάρει πολύ αυθαίρετα.
Στην C δεν έχετε να ανησυχείτε για αυτά τα πράγματα.
Κάθε γραμμή που μπορείτε να γράψετε λίγο πολύ λόγος για το πώς πρόκειται να εκτελέσει.
>> Ας κοιτάξουμε πίσω σε αυτά.
Πόσο ωραίο είναι ότι δεν έχετε να ασχοληθεί με hash λειτουργίες,
συνδεδεμένες λίστες, ή κάτι τέτοιο;
Δεδομένου ότι η εργασία με πίνακες κατακερματισμού είναι τόσο εύκολο τώρα, εδώ είναι ένα διασκεδαστικό παζλ για να εργαστούν.
Ανοίξτε ένα αρχείο που ονομάζεται unique.php και να το γράψετε ένα πρόγραμμα PHP
(Επίσης γνωστό ως "σενάριο").
Έχουμε την τάση να τους αποκαλούμε σενάρια αν είναι σύντομο πράγματα που τρέχουν στη γραμμή εντολών.
Βασικά, κάθε γλώσσα που δεν συγκεντρώνουν, αλλά θα πάμε για να τρέξει το εκτελέσιμο
στη γραμμή εντολών, μπορείτε να καλέσετε αυτό το σενάριο εκτελέσιμο.
Θα μπορούσα κάλλιστα γράψετε ένα πρόγραμμα C που το κάνει αυτό,
αλλά εγώ δεν το ονομάσουμε ένα σενάριο από τότε που συγκεντρώνουν για πρώτη φορά και στη συνέχεια να εκτελέσετε το δυαδικό.
Αλλά αυτό το πρόγραμμα PHP θα πάμε να καλέσετε ένα σενάριο.
Ή αν το έγραψε σε Python ή Perl ή Node.js ή οποιαδήποτε από αυτά τα πράγματα,
είχαμε καλέσει τους όλα τα σενάρια, γιατί να τρέξουν στη γραμμή εντολών
αλλά εμείς δεν τα συγκεντρώνουν.
Θα μπορούσαμε να το κάνουμε αυτό πολύ γρήγορα.
Εμείς δεν πρόκειται να χρησιμοποιήσετε argv. Ας φυσήξει μέσα από αυτό.
Καλέστε το μοναδικό, να γράψει ένα πρόγραμμα.
Μπορείτε να υποθέσετε ότι η είσοδος θα περιέχει μία λέξη ανά γραμμή.
Στην πραγματικότητα, argv θα είναι πολύ ασήμαντο για να χρησιμοποιήσετε.
unique.php.
Το πρώτο πράγμα πρώτα, θέλουμε να ελέγξουμε εάν έχει περάσει 1 εντολή στη γραμμή εντολών.
Ακριβώς όπως θα περίμενε κανείς argc και argv σε C, εξακολουθούμε να έχουμε αυτά στην PHP.
Έτσι, εάν ($ argc! == 2) τότε δεν θα ασχοληθεί με την εκτύπωση ενός μηνύματος ή οτιδήποτε.
Εγώ απλώς θα βγείτε, κωδικός σφάλματος 1.
Θα μπορούσα επίσης να επιστρέψουν 1.
Σπάνια σε PHP είστε σε αυτή την κατάσταση που είμαστε στο -
Συνήθως είστε σε μια λειτουργία που ονομάζεται από μια συνάρτηση καλείται από μια συνάρτηση καλείται από μια λειτουργία.
Και αν κάτι πάει στραβά και απλά θέλετε να βγείτε εντελώς τα πάντα,
εξόδου τελειώνει μόνο το πρόγραμμα.
Αυτό ισχύει επίσης σε C.
Αν είστε σε μια λειτουργία σε μια συνάρτηση σε μια συνάρτηση σε μια συνάρτηση
και θέλετε να σκοτώσει μόνο το πρόγραμμα, μπορείτε να καλέσετε την έξοδο και αυτό ακριβώς θα βγείτε.
Αλλά στην PHP είναι ακόμα πιο σπάνιο ότι είμαστε σε αυτό το κορυφαίο επίπεδο.
Συνήθως είμαστε μέσα σε κάποιο είδος της λειτουργίας, έτσι καλούμε την έξοδο
έτσι ώστε να μην χρειάζεται να επιστρέψει το 1 πράγμα που τότε συνειδητοποιεί ότι υπάρχει ένα σφάλμα
έτσι ώστε να επιστρέφει μέχρι και αν αναγνωρίζει ότι υπήρξε σφάλμα.
Δεν θέλουμε να ασχοληθεί με αυτό, έτσι έξοδο (1)?
επιστροφή (1)? στην περίπτωση αυτή θα είναι ισοδύναμη.
>> Στη συνέχεια, ό, τι θέλουμε να ανοίξουμε θέλουμε να fopen.
Τα επιχειρήματα που πρόκειται να φαίνονται αρκετά παρόμοια.
Θέλουμε να fopen ($ argv [1], και θέλουμε να το ανοίξετε για ανάγνωση.
Αυτό επιστρέφει έναν πόρο που θα πάμε να καλέσετε στ.
Αυτό φαίνεται αρκετά παρόμοιο με το πώς το κάνει C εκτός δεν έχουμε να πούμε * ΑΡΧΕΙΟ.
Αντί να λέμε μόνο $ f. Εντάξει.
Στην πραγματικότητα, νομίζω ότι αυτό μας δίνει ακόμη μια υπόδειξη ως προς τη λειτουργία PHP που ονομάζεται αρχείο. PHP αρχείου.
Αυτό πρόκειται να κάνετε είναι να διαβάσετε ένα ολόκληρο αρχείο σε μια σειρά.
Δεν χρειάζεται καν να το fopen. Είναι πρόκειται να το κάνει αυτό για σας.
Έτσι γραμμές $ = αρχείο ($ argv [1])?
Τώρα, όλες οι γραμμές του αρχείου είναι σε γραμμές. Τώρα θέλουμε να ταξινομήσετε τις γραμμές.
Πώς μπορούμε να ταξινομήσετε τις γραμμές;
Εμείς ταξινομήσετε τις γραμμές.
Και τώρα μπορούμε να τις εκτυπώσετε ή οτιδήποτε άλλο.
Πιθανώς ο ευκολότερος τρόπος είναι foreach ($ $ γραμμές ως γραμμή) echo $ γραμμή?
[Φοιτητής] Δεν θα περάσουμε ακόμα και γραμμές με αναφορά σε κάτι τέτοια;
Αυτό είναι το είδος που θα μπορούσε να οριστεί ως είδος λειτουργία (& $ array).
Όταν καλείτε τη λειτουργία δεν θα περάσει από την αναφορά.
Είναι η λειτουργία που ορίζει ως τη λήψη του ως σημείο αναφοράς.
Αυτό είναι πραγματικά ακριβώς τι πήγε στραβά
όταν βάζουμε τα πάντα για να τους διακομιστές μας όταν πήγαμε 5,3 - 5,4.
Μέχρι 5,4, αυτό ήταν απολύτως λογικό.
Μια συνάρτηση δεν αναμένει να λάβει ως σημείο αναφοράς, αλλά μπορείτε να το δώσετε ως αναφορά
οπότε αν η λειτουργία δεν συμβεί για να το τροποποιήσετε, είναι ακόμα τροποποιηθεί.
Από το 5,4, δεν είστε υποτίθεται για να γίνει αυτό.
Μέχρι τώρα ο μόνος τρόπος για να περάσει από την αναφορά αυτή, αν η λειτουργία το κάνει ρητά.
Αν δεν θέλετε να το τροποποιήσετε, τότε θα πρέπει να κάνετε $ $ = αντίγραφο γραμμές και αντίγραφο περάσει.
Έτσι τώρα γραμμές θα διατηρηθούν και αντίγραφο θα πρέπει να αλλάξει.
php.unique.php. Θα μπορούσα να έχω κάτι μπέρδεμα πάνω.
Απροσδόκητη «είδος».
Υπάρχει πρόκειται να είναι κάτι που το κάνει αυτό για εμάς.
Δεν είναι ακόμα εκεί.
Ειδοποίηση όταν έχετε διαβάσει το εγχειρίδιο ότι το πρώτο επιχείρημα, αναμένεται να είναι ένας πίνακας
και αυτό έχει ληφθεί με αναφορά.
Γιατί είναι αυτό διαμαρτύρονται για μένα; Επειδή έχω αυτό το είδος της λειτουργίας ακόμα εδώ ότι δεν θέλω.
Εντάξει, php.unique.php. Δεν είχα περάσει το επιχείρημα γιατί δεν έχω ένα αρχείο.
Είναι php.unique.php για test.php.
Εδώ είναι όλα test.php εκτυπώνονται σε ένα ταξινομημένο ωραία σειρά.
Σημειώστε ότι η σειρά ταξινόμησης είναι το είδος της παράξενο για ένα αρχείο κώδικα
επειδή όλα κενές γραμμές μας πρόκειται να έρθει πρώτα
τότε πρόκειται να έρθουν όλοι από 1 εγκοπές επίπεδο μας
τότε ελάτε όλοι μας δεν εσοχές.
Ναι. >> [Φοιτητής] Έτσι, για τον πηγαίο κώδικα δεν ψηφίστηκε από αναφορά;
Είναι ότι γενικά πέρασε από την τιμή;
[Bowden] Όταν καλείτε μια συνάρτηση, δεν προσδιορίζει αν πέρασε με αναφορά.
Είναι ο ορισμός της λειτουργίας που καθορίζει το αν πέρασε από την αναφορά.
Και κοιτάζοντας τον ορισμό της συνάρτησης του είδους ή απλά κοιτάζοντας αυτό,
παίρνει το επιχείρημα της αναφοράς.
Έτσι, ανεξάρτητα από το αν θέλετε να το πάρετε από την αναφορά, που κάνει το πάρετε με αναφορά.
Επίσης, τροποποιεί τον πίνακα στη θέση του.
Αυτό είναι απλά δεν επιτρέπεται. Δεν σας επιτρέπεται να το κάνετε αυτό. >> [Φοιτητής] Ω, εντάξει.
[Bowden] Αυτό το είδος πρόκειται να πάρει τις γραμμές με αναφορά και να το τροποποιήσετε.
Και πάλι, αν δεν θέλετε να το κάνετε αυτό, θα μπορούσατε να κάνετε ένα αντίγραφο του είδους.
Ακόμη και σε αυτή την περίπτωση, αντίγραφο δεν είναι στην πραγματικότητα ένα αντίγραφο των γραμμών.
Επισημαίνει ακριβώς το ίδιο πράγμα, μέχρι να παίρνει πρώτη τροποποιημένη,
όπου είναι πρώτος πρόκειται να πάρει τροποποιηθεί στη λειτουργία του είδους,
όπου, επειδή είναι copy-on-write, τώρα ένα αντίγραφο του αντιγράφου πρόκειται να γίνει.
Μπορείτε επίσης να κάνετε αυτό. Αυτό είναι το άλλο μέρος μπορείτε να δείτε ampersand.
Μπορείτε να το δείτε σε foreach βρόχους, μπορείτε να το δείτε σε δηλώσεις λειτουργία,
και μπορείτε να το δείτε μόνο κατά την ανάθεση μεταβλητών.
Τώρα έχουμε καταφέρει τίποτα με τον τρόπο αυτό
επειδή αντίγραφο γραμμές και είναι κυριολεκτικά το ίδιο πράγμα.
Μπορείτε να χρησιμοποιήσετε και να αντιγράψετε γραμμές εναλλάξ.
Μπορείτε να κάνετε unset ($ αντίγραφο)? Και ότι δεν unset γραμμές,
χάνετε μόνο την αναφορά σας για το ίδιο πράγμα.
Έτσι, από αυτό το σημείο, τώρα γραμμές είναι ο μόνος τρόπος που μπορείτε να αποκτήσετε πρόσβαση σε γραμμές.
>> Ερωτήσεις;
Ναι.
[Φοιτητής] Εντελώς εκτός θέματος, αλλά δεν έχετε να κλείσει με την PHP - >> Δεν κάνουμε.
Εντάξει.
[Bowden] Θα έφτανα στο σημείο να πω ότι είναι κακή πρακτική να τους κλείσει.
Αυτό είναι πιθανώς μια υπερβολή, ειδικά σε ένα σενάριο,
αλλά ας δούμε τι θα συμβεί αν το κάνω αυτό.
Αυτό δεν έκανε τίποτα. Τι θα συμβεί αν ήθελα - [αναστενάζει]
Πρέπει να περάσει ένα επιχείρημα.
Shoot. Κάλεσα λάθος.
Έτσι php.unique.php με ένα επιχείρημα.
Τώρα δεν χρειάζεται καν αυτό.
Θα δώσετε ένα έγκυρο επιχείρημα.
Αυτό το έντυπο ό, τι είναι η εκτύπωση.
Είμαι εκτύπωση και αντιγραφή αντίγραφο δεν υπάρχει. Έτσι γραμμές.
Είναι τυπωμένα τα πάντα, και στη συνέχεια να παρατηρήσετε όλα αυτά τα σκουπίδια εδώ κάτω,
επειδή σε τίποτα PHP που είναι έξω από την PHP tags
είναι ακριβώς πρόκειται να εκτυπωθούν κυριολεκτικά.
Αυτός είναι ο λόγος HTML, είναι τόσο ωραίο που μπορώ να κάνω div μπλα, μπλα, μπλα τάξη ή οτιδήποτε άλλο,
μπλα, μπλα, μπλα και στη συνέχεια να κάνουμε κάποιες PHP κώδικα και στη συνέχεια κάντε div τέλος.
Και τώρα αυτή η εκτύπωση να πάρω ωραία div μου επάνω στην κορυφή, ό, τι τυπωμένα PHP, div στο κάτω μέρος.
Καταστροφική όταν συμβαίνει κάτι τέτοιο, το οποίο είναι αρκετά κοινό,
απλά μια αδέσποτη newline στο κάτω μέρος του αρχείου.
Δεν θα πιστεύετε ότι θα είναι ότι μεγάλο ζήτημα
μέχρι να εξετάσει το γεγονός ότι με τα προγράμματα περιήγησης -
>> Πώς ανακατευθύνει την εργασία ή οποιαδήποτε εργασία βασικά κεφαλίδες,
όταν κάνετε τη σύνδεσή σας σε μια ιστοσελίδα και να στέλνει πίσω όλα αυτά τα πράγματα και κεφαλίδες
σαν απάντηση 200 ή απάντηση ανακατευθύνουν ή οτιδήποτε άλλο,
κεφαλίδες ισχύουν μόνο μέχρι το πρώτο byte των δεδομένων που αποστέλλονται.
Μπορείτε να ανακατευθύνετε χιλιάδες φορές, αλλά μόλις το πρώτο byte των δεδομένων που αποστέλλονται
δεν είστε υποτίθεται για να ανακατευθύνει πάλι.
>> Εάν έχετε ένα αδέσποτο αλλαγή γραμμής στο κάτω μέρος ενός αρχείου
και ας πούμε ότι χρησιμοποιείτε αυτή τη λειτουργία και στη συνέχεια θέλετε να -
Ας πούμε ότι είναι ένα άλλο αρχείο που είναι index.php και εσείς κάτι require_once -
Δεν μπορώ να σκεφτώ ένα καλό παράδειγμα αυτού.
Το ζήτημα συμβαίνει όταν αυτή η γραμμή στο κάτω μέρος παίρνει απήχηση.
Δεν θέλω τίποτα να έχουν απήχηση ακόμα.
Ακόμα κι αν δεν είχε την πρόθεση για να πάρει κάτι επαναλαμβάνεται, κάτι που είχε πάρει αντανακλάται
και έτσι τώρα δεν είστε υποτίθεται για να στείλετε πια κεφαλίδες
και θα πάμε για να πάρει καταγγελίες.
Απλά δεν χρειάζεται αυτές τις ετικέτες κλεισίματος.
Αν σκοπεύετε να κάνετε κάτι με την HTML -
και είναι απόλυτα λογικό να κάνει εδώ κάτω div ανεξαρτήτως
και στη συνέχεια, σε αυτό το σημείο μπορείτε ή δεν μπορείτε να τους συμπεριλάβει.
Δεν έχει τόση σημασία.
Αλλά σε ένα PHP script είναι σπάνιο να το κλείσετε.
Όταν όλα είναι η PHP, απολύτως τα πάντα,
που πραγματικά δεν χρειάζεται να το κλείσετε / δεν πρέπει να κλείσει.
>> Η ενασχόληση με χορδές είναι πολύ καλύτερο από ό, τι σε C.
Στην PHP, μπορείτε να καθορίσετε μια σειρά με μονά ή διπλά εισαγωγικά.
Με μονά εισαγωγικά δεν μπορείτε να χρησιμοποιήσετε "απόδραση" ακολουθίες.
Συνεχώς ξεφύγει, μπλα, μπλα, μπλα.
Έτσι printf είναι πολύ σπάνια σε PHP.
Υποθέτω ότι θα χρησιμοποιήσετε printf αν ήθελα να κάνω ένα είδος του πράγματος - σε PSET 5 που χρησιμοποιούνται sprintf ή οτιδήποτε άλλο.
Αλλά θέλετε να κάνετε 001.jpg 002.jpg και.
Έτσι για αυτό το είδος του πράγματος όπου πραγματικά θέλετε να μορφοποιήσετε το κείμενο θα ήθελα να χρησιμοποιούν printf.
Αλλά αλλιώς θα χρησιμοποιούσα μόνο αλφαριθμητικό.
Ποτέ δεν χρησιμοποιούν printf.
Είμαστε διαφοροποίηση απλώς τις λεπτομέρειες μεταξύ μονά εισαγωγικά και διπλά εισαγωγικά.
Η μεγαλύτερη διαφορά είναι ότι μονά εισαγωγικά, θα εκτυπωθεί κυριολεκτικά.
Δεν υπάρχει char τύπος δεδομένων σε PHP, σε αντίθεση με C, έτσι αυτό είναι ισοδύναμο με αυτό.
Είναι και οι δύο χορδές.
Και το ωραίο πράγμα για το ενιαίο χορδές απόσπασμα είναι θα μπορούσα να πω "Γειά σου Κόσμε!" μπλα, μπλα, μπλα,
$ $ Wooo.
Τι συμβαίνει όταν μπορώ να εκτυπώσω αυτό είναι ότι θα το εκτυπώσετε κυριολεκτικά.
Ας απαλλαγούμε από όλα τα πράγματά μας.
Έτσι echo $ str1?
Είναι τυπωμένα κυριολεκτικά όλα αυτά τα πράγματα: σύμβολα δολαρίου,
backslash n, η οποία θα έλεγε κανείς ότι θα είναι νέες γραμμές -
όλα αυτά τα πράγματα που εκτυπώνει κυριολεκτικά.
Το μόνο πράγμα που πρέπει να ξεφύγουν από τα μονά εισαγωγικά
γιατί αλλιώς θα νομίζετε ότι είναι το κλείσιμο των μονά εισαγωγικά.
Διπλά εισαγωγικά, εντελώς διαφορετική.
Έχουμε ήδη δει το τονισμό σύνταξης είναι cluing μας για να το τι είναι έτοιμος να πάει τρομερά λάθος.
php.unique. Undefined variable: wooo επειδή αυτό είναι ερμηνεύεται ως μια μεταβλητή που ονομάζεται wooo.
Διπλά εισαγωγικά σας επιτρέπει να εισαγάγετε μεταβλητές σε -
Ας πούμε $ name = "Rob"?
Έτσι echo "Γεια, το όνομά μου είναι $ όνομα!"?
Αυτό το αναγνωρίζει αυτό ως μια μεταβλητή.
Όταν τρέχω ότι - και εγώ θα εισάγει μια νέα γραμμή - Γεια σου, το όνομά μου είναι Rob! γειά σου και τον κόσμο!
Αυτό οφείλεται στο γεγονός ότι ποτέ δεν έχω αφαιρέσει την εκτύπωση του wooo παραπάνω.
Υπάρχει 1 ακόμη βήμα που μπορείτε να κάνετε.
$ = Array [1, 2, 3],?
Τι γίνεται αν θέλω να εκτυπώσετε την πρώτη δείκτης του πίνακα;
Μπορείτε να το κάνετε $ array [0].
Τα επισήμανση σύνταξης είναι μια ένδειξη. Τι είναι αυτό που πηγαίνει να κάνει;
php.unique.
Γεια, το όνομά μου είναι 1! το οποίο δεν είναι αυτό που ήθελα.
Σύνταξη επισήμανση ψέματα για μένα.
Ας προσπαθήσουμε "ένα" -> 1, 'b' -> 2.
Αυτό είναι το πώς θα πρέπει να το γράψω.
Απροσδόκητη απλό εισαγωγικό (T_ENCAPSED μπλα, μπλα, μπλα, μπλα, μπλα).
Η ιδέα είναι ότι δεν είναι αναγνωρίζει αυτό ως μέρος της συστοιχίας.
Δεν είναι αυτό που αναγνωρίζει ως ευρετήριο σειρά με την επιστολή ενός.
Θέλετε να το κάνουμε αυτό μέσα σε άγκιστρα,
και τώρα ό, τι είναι σε αυτό το στήριγμα σγουρά θα παρεμβληθούν,
η οποία είναι η λέξη που χρησιμοποιούμε για μαγικά εισαγωγή αυτών των μεταβλητών στις σωστές θέσεις.
Τώρα το κάνετε αυτό, php.unique, και Γεια σου, το όνομά μου είναι 1! όπως αναμένεται
ή Γεια σου, το όνομά μου είναι Rob!
Ένα πράγμα που είναι είδος της Νίκαιας για μονά εισαγωγικά είναι ότι -
Υπάρχει κάποιο κόστος για την παρεμβολή.
Εάν χρησιμοποιείτε διπλά εισαγωγικά, ο διερμηνέας θα πρέπει να πάει πέρα ​​από αυτή τη σειρά,
να διασφαλίσουμε ότι, "Ω, εδώ είναι μια μεταβλητή. Τώρα πρέπει να πάω να πάρει αυτή τη μεταβλητή και να την τοποθετήσετε εδώ."
Ακόμα κι αν δεν χρησιμοποιείτε μεταβλητές,
τίποτα μέσα από αυτά τα διπλά εισαγωγικά θα πρέπει να παρεμβληθούν,
αλλά θα εξακολουθεί να είναι αργή, διότι πρέπει να πάει πέρα ​​από τα διπλά εισαγωγικά
ψάχνουν για πράγματα που πρέπει να παρεμβληθούν.
Έτσι μονά εισαγωγικά μπορεί να είναι λίγο πιο γρήγορα, αν δεν χρειάζεται να παρεμβληθούν,
και έχω την τάση να χρησιμοποιούν ακόμη και μονά εισαγωγικά για «Γεια σου, το όνομά μου είναι». $ Array ['a'] ούτως ή άλλως.
Αυτό πρόκειται να είναι ισοδύναμο με αυτό που είχαμε πριν.
Αλλά αυτό είναι ένα θέμα προτίμησης.
Αν χρησιμοποιείτε PHP, τότε μάλλον δεν νοιάζονται για την ταχύτητα διαφορά.
Δεν είναι αρκετό για να αιτιολογήσει τους για να αρχίσει με.
>> Οι τελικές ερωτήσεις;
>> Εμείς πραγματικά δεν πάρετε ακόμη και μέσα από όλα αυτά, αλλά αυτά τα πράγματα ήταν βαρετό.
Το τελευταίο πράγμα που είναι είδος της Νίκαιας στην PHP είναι όταν έχεις να κάνεις με HTML,
θα χρησιμοποιήσετε ένα κομμάτι, έτσι ώστε το ωραίο σύνταξη συντόμευσης για την εκτύπωση μιας μεταβλητής.
Χωρίς να PHP εδώ, αυτό ονομάζεται short tags.
Επισήμως από την PHP 5.4, αυτό έχει καταργηθεί.
Σας συνιστούμε να βάλει php.
Αυτό εξακολουθεί να υποστηρίζεται, τόσο σύντομη ετικέτες με το <? = Εξακολουθούν να είναι απολύτως εντάξει.
Είναι υποστηρίζεται από προεπιλογή, ώστε να μπορείτε να τα χρησιμοποιήσετε όπως θέλετε, και είναι πολύ βολικό.
>> Οποιεσδήποτε ερωτήσεις;
Εντάξει.
>> Μείνετε αριστοκρατικό, Σαν Ντιέγκο.
[Συγκρατημένα γέλια]
Αντίο. [Γέλια]
[Χειροκροτήματα] [γέλια]
>> [CS50.TV]