Η PHP προσανατολίζεται καλά στην επεξεργασία πληροφοριών. Η σύνταξη της γλώσσας αντιπροσωπεύεται από ένα πλήρες σύνολο λειτουργιών σύγκρισης, επεξεργασίας συμβολοσειρών και τελεστών σύγκρισης.
Οποιοσδήποτε αλγόριθμος είναι μια ακολουθία επιλογών καιδράση. Αλλά πριν κάνετε μια επιλογή, πρέπει να συγκρίνετε κάτι με κάτι. Οι χορδές είναι ο πιο ικανός, αποτελεσματικός και πρακτικός μηχανισμός για τον έλεγχο του αλγορίθμου. Οι συμβολοσειρές είναι μια παραλλαγή της παρουσίασης δεδομένων. Και τα δεδομένα είναι η κύρια «ανησυχία» οποιουδήποτε αλγορίθμου.
Συμβατική λογική σύγκρισης-δράσης
Σε γενικές γραμμές, μια δυναμική γλώσσα πληκτρολόγησης δεν είναικάνει ειδικές διαφορές στα δεδομένα, για παράδειγμα, στην PHP η σύγκριση μιας συμβολοσειράς και ενός αριθμού δεν είναι πολύ διαφορετική. Ένας αριθμός είναι επίσης μια συμβολοσειρά, όταν περιέχει μόνο αριθμούς, ένα σημείο και δεν υπάρχει ούτε ένας χαρακτήρας που δεν χρησιμοποιείται για την αναπαράσταση ενός αριθμού σε οποιαδήποτε από τις μορφές του (μαθηματική σημειογραφία).
Στην περίπτωση περιεχομένου, ο αριθμός συγχωνεύεται αυτόματα με τη συμβολοσειρά χωρίς περιττές ερωτήσεις και χωρίς κρυφά σφάλματα, ακόμη και αν η συνάρτηση gettype () δίνει "ακέραιο" ή "διπλό".
Ωστόσο, υπάρχει μια διαφορά μεταξύ της χρήσης της συνάρτησηςis_int () και is_numeric (). Το πρώτο ισχύει όταν η παράμετρος είναι μόνο ακέραιος, ο δεύτερος όταν είναι οποιοσδήποτε αριθμός ή αριθμητική συμβολοσειρά (η μεταβλητή είναι τύπου "string", αλλά περιέχει όλα όσα παρέχονται από μαθηματική σημειογραφία).
Αυτό το απλό παράδειγμα είναι ένα καλό παράδειγμα, όπως στην PHPΟι τελεστές σύγκρισης συμβολοσειρών ("==", "===", "! =", ...) μπορούν να σας δώσουν πολλές εκπλήξεις. Οι μεταβλητές μπορούν να αλλάξουν τον τύπο τους, δεν είναι πάντα αριθμοί, αλλά σχεδόν πάντα μπορούν να μετατραπούν σε συμβολοσειρά. Ως έσχατη λύση, θα είναι μια κενή χορδή.
Με βάση αυτό, η λειτουργία σύγκρισης συμβολοσειρών της PHP είναι μακράν η πιο δημοφιλής. Ποιο να επιλέξει εξαρτάται από τον προγραμματιστή. Υπάρχουν τόνοι διαθέσιμων επιλογών έως κανονικές εκφράσεις.
Τα όρια της διαθέσιμης λειτουργικότητας
Η PHP που συγκρίνει δύο χορδές "κάνει" καλά τη λειτουργίαΤο strpos () είναι η φθηνότερη, ασφαλέστερη και πιο πρακτική επιλογή. Εάν το αποτέλεσμα αυτής της συνάρτησης είναι ένας αριθμός, τότε μια συμβολοσειρά είναι μοναδικά ίση με μια άλλη ή μία περιλαμβάνεται σε μια άλλη.
Μια ριζικά αντίθετη, αλλά και απολύτως σωστή, προσέγγιση είναι η χρήση κανονικών εκφράσεων.
Εάν η συνάρτηση καλέστε $ cResult =Το scCheckFileName ($ cStr) θα δώσει το "true", που σημαίνει ότι η συμβολοσειρά είναι το όνομα του αρχείου Word. Θα έχει μόνο μία παραλλαγή της επέκτασης ".docx" και χωρίς χαρακτήρες στο όνομα: μόνο γράμματα, αριθμοί και σύμβολα "_", "-".
Η λειτουργία μπορεί εύκολα να μετατραπεί σε άλλητύποι αρχείων: $ cPtr = "/ ^ ([a-zA-Z ... 0-9 -_> [4,239]]). (html | js | css | png | jpg | docx | txt) * u" . Αυτή η επιλογή ελέγχου της συμβολοσειράς επεκτείνει το εύρος των μεταφορτωμένων (για παράδειγμα, σε PHP, εφαρμόζεται σύγκριση συμβολοσειρών "για να ανεβάσετε αρχεία στο διακομιστή, χωρίς καμία πιθανότητα σφάλματος εισόδου") σε html, js, css, ...
Χρησιμοποιώντας strpos () και preg_match () -άκρα. Δεν σχετίζονται άμεσα με το ζήτημα της σύγκρισης όρων. Αλλά το ζήτημα του αλγορίθμου είναι το ζήτημα της εφαρμογής ενός συνδυασμού στυλ, χρησιμοποιώντας όλες τις δυνατότητες για να επιτευχθεί ένα αξιόπιστο και σωστό αποτέλεσμα.
Λειτουργικότητα PHP: σύγκριση συμβολοσειρών
Το οπλοστάσιο της γλώσσας έναντι των χορδών δεν είναι μόνοκαθαρές λειτουργίες σύγκρισης, αλλά και συνδυασμός με εύρεση ή αντικατάσταση απευθείας. Η δράση δεν πρέπει πάντα να συμπίπτει με τη σύγκριση, καθώς η τελευταία δεν οδηγεί απαραίτητα σε αλλαγή σε οποιαδήποτε σειρά. Συχνά είναι απαραίτητο να επιλέξετε έναν ή έναν άλλο κλάδο του αλγορίθμου.
Η συνήθης έκδοση PHP: η σύγκριση συμβολοσειρών εκτελείται από τη συνάρτηση int strcmp (s1, s2).
Αποτέλεσμα λειτουργίας:
- 0 - οι χορδές είναι ίσες.
- -1 - η πρώτη γραμμή είναι μικρότερη από τη δεύτερη.
- 1 - η πρώτη γραμμή είναι μεγαλύτερη από τη δεύτερη.
Στην πράξη, αυτό σημαίνει ότι μπαίνει το πρώτοσυμβολοσειρά στο δεύτερο, από το οποίο η συνάρτηση PHP (σύγκριση συμβολοσειρών) λαμβάνει μια απόφαση. Μια πιο περιορισμένη έκδοση του strpos (), καθώς στην τελευταία περίπτωση μπορείτε να γνωρίζετε τη θέση του συμβάντος.
Η συνάρτηση strcmp () είναι πεζά. Εάν πρέπει να συγκρίνετε συμβολοσειρές με τρόπο που δεν είναι ευαίσθητος σε περίπτωση, η PHP προτείνει τη χρήση strcasecmp (). Η σύνταξη είναι η ίδια.
Στην πράξη, συχνά απαιτείται να μην δουλεύετε με όλουςμια χορδή, αλλά μόνο με ένα μέρος της. Για να γίνει αυτό, το σετ συνάρτησης PHP (σύγκριση συμβολοσειρών) περιλαμβάνει strncmp (s1, s2, N). Η τρίτη παράμετρος δίνει εντολή να εκτελέσει τη σύγκριση μόνο N-bytes. Το αποτέλεσμα είναι το ίδιο με το strcmp ().
Πίνακες, χορδές και σύγκριση
Τα δεδομένα αντιπροσωπεύονται σχεδόν πάντα ως συμβολοσειρές. Εάν εξετάσουμε πίνακες, αντικείμενα ή δομές πληροφοριών, τότε αυτοί είναι απλώς διαφορετικοί συνδυασμοί απλούστερων δομών συμβολοσειρών.
Οι συστοιχίες και οι χορδές μπορούν να είναιπαρουσιάζονται με συμπληρωματικό τρόπο. Μετατροπή πίνακα σε συμβολοσειρά χρησιμοποιώντας τη συνάρτηση implode (πίνακας, σύμβολο), για παράδειγμα: $ margins1 = implode (",", $ style-> getInnerMargin ()); ... το έργο του αλγορίθμου / χρήστη ...; Το $ margins2 = implode (",", $ style-> getInnerMargin ()) σας επιτρέπει να συγχωνεύσετε όλες τις θέσεις αντικειμένων σε μια συμβολοσειρά θέσης.
Στη συνέχεια, μπορείτε να κάνετε μια σύγκριση συμβολοσειράς PHP και στομία φορά: $ check = strcmp ($ margins1, $ margins2) και ελέγξτε αν ο αλγόριθμος ή ο χρήστης άλλαξε κάτι (ή όχι). Εάν εκτελέσετε τη σύγκριση με τον συνηθισμένο τρόπο, θα πρέπει να επαναλάβετε τα στοιχεία του πίνακα. Χρειάζεται περισσότερο και φαίνεται πιο δυσκίνητο.
Αντικείμενα και χορδές
Μια ακόμη πιο θεαματική χρήση της PHP (σύγκριση συμβολοσειρών) μπορεί να πραγματοποιηθεί μέσω αντικειμενοστρεφών ιδεών.
Σύγχρονη κατανόηση των αντικειμένωνυποθέτει ότι έχουν ιδιότητες και μεθόδους. Τα πρώτα αντιπροσωπεύονται συνήθως από αριθμούς, χορδές, πίνακες και άλλα αντικείμενα. Το τελευταίο περιλαμβάνει συχνά μεθόδους για τη σύνταξη (put) σε μια συμβολοσειρά και την επαναφορά από μια συμβολοσειρά (get).
Σε αντίθεση με τις συστοιχίες, ένα αντικείμενο λειτουργείτις ιδιότητές του και αλληλεπιδρά με άλλα αντικείμενα. Το αντικείμενο είναι «ικανό» σε ό, τι οι ιδιότητές του έχουν πραγματική σημασία για τον αλγόριθμο, το πρόγραμμα στο σύνολό του.
Αυτή η στιγμή παρέχει μια βάση και μια ευκαιρία γιακαταγράψτε μόνο τις απαραίτητες πληροφορίες στη συμβολοσειρά και κατά την επαναφορά από τη συμβολοσειρά, επαναφέρετε όλες τις ιδιότητες εργασίας στην επιθυμητή κατάσταση. Συνήθως σε οποιοδήποτε αντικείμενο υπάρχουν σημαντικές πληροφορίες και λειτουργικές (προσωρινές). Η εφαρμογή μιας τέτοιας ιδέας εξοικονομεί όχι μόνο μνήμη, χώρο στο δίσκο, εγγραφές βάσης δεδομένων, αλλά και καθιστά δυνατή τη σύγκριση συμβολοσειρών με απλούστερα και πιο ακριβή μέσα.
Σύνταξη και σημασιολογία
Η PHP αναπτύσσεται δυναμικά και η λειτουργικότητά της είναι και οι δύοτόσο από άποψη σύγκρισης συμβολοσειρών όσο και από άποψη επεξεργασίας τους βελτιώνεται συνεχώς Ωστόσο, τίποτα δεν εμποδίζει τον προγραμματιστή να μετατοπίσει το κέντρο βάρους στην περιοχή της σημασιολογίας.
Αναμφίβολα, η λειτουργικότητα είναι καλή, αλλά είναιΗ χρήση μπορεί να μεταφερθεί στο σημασιολογικό μέρος του κώδικα, σε αντικείμενα. Όταν ένας αλγόριθμος παρουσιάζεται ως σύστημα αλληλεπίδρασης αντικειμένων, φαίνεται πολύ καλύτερο από μια ακολουθία συγκρίσεων και ενεργειών σε ένα απλό, διαδοχικό, κλασικό στυλ.