Τι είναι μια εξαίρεση;
Ένα σφάλμα είναι ένα μη αναμενόμενο αποτέλεσμα προγράμματος που δεν μπορεί να αντιμετωπιστεί από το ίδιο το πρόγραμμα.
Τα σφάλματα επιλύονται διορθώνοντας το πρόγραμμα. Ένα παράδειγμα σφάλματος θα ήταν ένας άπειρος βρόχος που δεν σταματά ποτέ να εκτελείται.
Εξαίρεση είναι μη αναμενόμενο αποτέλεσμα προγράμματος που μπορεί να αντιμετωπιστεί από το ίδιο το πρόγραμμα.
Παραδείγματα εξαίρεσης περιλαμβάνουν την προσπάθεια ανοίγματος ενός αρχείου που δεν υπάρχει.
Αυτή η εξαίρεση μπορεί να αντιμετωπιστεί είτε δημιουργώντας το αρχείο είτε παρουσιάζοντας στον χρήστη μια επιλογή αναζήτησης του αρχείου.
Σε αυτό το σεμινάριο, θα μάθετε-
- Γιατί να χειριστείτε την εξαίρεση;
- Χειρισμός σφαλμάτων PHP
- Σφάλμα χειρισμού παραδειγμάτων
- Διαφορά μεταξύ σφαλμάτων και εξαίρεσης
- Πολλαπλές εξαιρέσεις
- Δοκιμή του κωδικού
Γιατί να χειριστείτε την εξαίρεση;
- Αποφύγετε απροσδόκητα αποτελέσματα στις σελίδες μας που μπορεί να είναι πολύ ενοχλητικά ή ενοχλητικά για τους τελικούς χρήστες μας
- Βελτιώστε την ασφάλεια των εφαρμογών μας, μη αποκαλύπτοντας πληροφορίες που ενδέχεται να χρησιμοποιούν κακόβουλοι χρήστες για να επιτεθούν στις εφαρμογές μας
- Οι εξαιρέσεις Php χρησιμοποιούνται για να αλλάξουν την κανονική ροή ενός προγράμματος εάν προκύψει οποιοδήποτε προβλέψιμο σφάλμα.
Χειρισμός σφαλμάτων PHP
Όταν παρουσιαστεί σφάλμα, ανάλογα με τις ρυθμίσεις διαμόρφωσης, η PHP εμφανίζει το μήνυμα σφάλματος στο πρόγραμμα περιήγησης στο Web με πληροφορίες σχετικά με το σφάλμα που προέκυψε.
Η PHP προσφέρει μια σειρά από τρόπους αντιμετώπισης σφαλμάτων.
Θα εξετάσουμε τρεις (3) κοινές μεθόδους.
- Δηλώσεις Die - η λειτουργία die συνδυάζει τη λειτουργία echo και exit σε μία. Είναι πολύ χρήσιμο όταν θέλουμε να βγάλουμε ένα μήνυμα και να σταματήσουμε την εκτέλεση του σεναρίου όταν παρουσιάζεται σφάλμα.
- Προσαρμοσμένοι χειριστές σφαλμάτων - αυτές είναι λειτουργίες καθορισμένες από τον χρήστη που καλούνται κάθε φορά που παρουσιάζεται σφάλμα
- Αναφορά σφαλμάτων PHP - το μήνυμα σφάλματος ανάλογα με τις ρυθμίσεις αναφοράς σφαλμάτων PHP. Αυτή η μέθοδος είναι πολύ χρήσιμη σε περιβάλλον ανάπτυξης όταν δεν έχετε ιδέα τι προκάλεσε το σφάλμα. Οι πληροφορίες που εμφανίζονται μπορούν να σας βοηθήσουν να εντοπίσετε σφάλματα στην εφαρμογή σας.
Σφάλμα χειρισμού παραδειγμάτων
Ας δούμε τώρα μερικά απλά παραδείγματα με ρουτίνες χειρισμού σφαλμάτων.
Ας υποθέσουμε ότι έχουμε αναπτύξει μια εφαρμογή που χρησιμοποιεί αρχεία κειμένου για την αποθήκευση δεδομένων. Ίσως θέλουμε να ελέγξουμε την ύπαρξη του αρχείου προτού επιχειρήσουμε να διαβάσουμε δεδομένα από αυτό.
Ο παρακάτω κώδικας εφαρμόζει το παραπάνω παράδειγμα.
Υποθέτοντας ότι έχετε αποθηκεύσει το αρχείο simple_error.php στο φάκελο phptuts, ανοίξτε τη διεύθυνση URL http: //localhost/phptuts/simple_error.php
Θα λάβετε τα ακόλουθα αποτελέσματα
Όπως μπορείτε να δείτε από τα παραπάνω αποτελέσματα, κάνει την εφαρμογή μας να φαίνεται μη επαγγελματική και μπορεί να είναι ενοχλητική για τον χρήστη.
Θα τροποποιήσουμε τον παραπάνω κώδικα και θα γράψουμε ένα πρόγραμμα χειρισμού σφαλμάτων για την εφαρμογή
Υποθέτοντας ότι έχετε αποθηκεύσει τον παραπάνω κώδικα ως error_handling.php, ανοίξτε τη διεύθυνση URL http: //localhost/phptuts/error_handling.php
Σημείωση: είναι καλή πρακτική ασφάλειας να εμφανίζετε ένα μήνυμα όπως αυτό που εμφανίζεται παραπάνω αντί να εμφανίζεται το μήνυμα όπως "Το αρχείο δεν βρέθηκε".
Ας δούμε ένα άλλο παράδειγμα που χρησιμοποιεί ένα προσαρμοσμένο πρόγραμμα χειρισμού λάθους
Ο προσαρμοσμένος χειριστής σφαλμάτων θα οριστεί ως η προεπιλεγμένη λειτουργία χειρισμού σφαλμάτων PHP και θα εμφανίσει βασικά έναν αριθμό σφάλματος και ένα μήνυμα.
Ο παρακάτω κώδικας απεικονίζει την εφαρμογή του παραπάνω παραδείγματος
Ανοίξτε τη διεύθυνση URL http: //localhost/phptuts/custom_error_handler.php θα λάβετε τα ακόλουθα αποτελέσματα
.
Όπως μπορείτε να δείτε από το παραπάνω παράδειγμα, οι χειριστές προσαρμοσμένων σφαλμάτων είναι ισχυροί υπό την έννοια ότι
- Μας επιτρέπουν να προσαρμόσουμε τα μηνύματα σφάλματος.
- Ο προσαρμοσμένος χειριστής σφαλμάτων μπορεί επίσης να περιλαμβάνει την καταγραφή σφαλμάτων σε ένα αρχείο / βάση δεδομένων, μέσω ηλεκτρονικού ταχυδρομείου στον προγραμματιστή κ.λπ.
Ας δούμε τώρα τον τρίτο τύπο χειρισμού σφαλμάτων. Θα χρησιμοποιήσουμε την ενσωματωμένη συνάρτηση PHP error_reporting function. Έχει την ακόλουθη βασική σύνταξη
ΕΔΩ,
- "Error_reporting" είναι η λειτουργία αναφοράς σφαλμάτων PHP
- Το "$ report_level" είναι προαιρετικό, μπορεί να χρησιμοποιηθεί για τον καθορισμό του επιπέδου αναφοράς. Εάν δεν έχει καθοριστεί επίπεδο αναφοράς, η PHP θα χρησιμοποιήσει το προεπιλεγμένο επίπεδο αναφοράς σφαλμάτων όπως καθορίζεται στο αρχείο php.ini.
Επίπεδο αναφοράς | Περιγραφή | Παράδειγμα |
---|---|---|
ΠΡΟΕΙΔΟΠΟΙΗΣΗ | Εμφανίζει μόνο προειδοποιητικά μηνύματα. Δεν σταματά την εκτέλεση του σεναρίου | αναφορά_ σφάλματος (E_WARNING); |
E_NOTICE | Εμφανίζει ειδοποιήσεις που μπορούν να προκύψουν κατά την κανονική εκτέλεση ενός προγράμματος ή θα μπορούσαν να είναι σφάλμα. | αναφορά_ σφάλματος (Ε_ ΕΙΔΟΠΟΙΗΣΗ); |
E_USER_ERROR | Εμφανίζει σφάλματα που δημιουργούνται από τον χρήστη, δηλαδή προσαρμοσμένο χειριστή σφαλμάτων | αναφορά_ σφάλματος (E_ USER_ERROR); |
E_USER_WARNING | Εμφανίζει προειδοποιητικά μηνύματα που δημιουργούνται από τον χρήστη | αναφορά_ σφάλματος (E_USER_WARNING); |
E_USER_NOTICE | Εμφανίζει ειδοποιήσεις που δημιουργούνται από τον χρήστη | αναφορά_ σφάλματος (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Εμφανίζει σφάλμα που δεν είναι μοιραίο και μπορεί να αντιμετωπιστεί χρησιμοποιώντας προσαρμοσμένους χειριστές σφαλμάτων | αναφορά_ σφάλματος (E_RECOVERABLE_ERROR); |
E_ALL | Εμφανίζει όλα τα σφάλματα και τις προειδοποιήσεις | αναφορά_ σφάλματος (E_ ALL); |
Διαφορά μεταξύ σφαλμάτων και εξαίρεσης
- Οι εξαιρέσεις ρίχνονται και προορίζονται να συλληφθούν ενώ τα σφάλματα είναι γενικά μη αναστρέψιμα.
-
Οι εξαιρέσεις αντιμετωπίζονται με αντικειμενοστρεφή τρόπο.
Αυτό σημαίνει όταν ρίχνεται μια εξαίρεση. δημιουργείται ένα αντικείμενο εξαίρεσης που περιέχει τις λεπτομέρειες εξαίρεσης.
Ο παρακάτω πίνακας δείχνει τις μεθόδους αντικειμένων εξαίρεσης
Μέθοδος | Περιγραφή | Παράδειγμα |
---|---|---|
getMessage () | Εμφανίζει το μήνυμα της εξαίρεσης |
getMessage();?> |
πάρετε τον κωδικό() | Εμφανίζει τον αριθμητικό κωδικό που αντιπροσωπεύει την εξαίρεση |
getCode();?> |
getFile () | Εμφανίζει το όνομα και τη διαδρομή του αρχείου όπου προέκυψε η εξαίρεση |
getFile();?> |
getLine () | Εμφανίζει τον αριθμό γραμμής όπου προέκυψε η εξαίρεση |
getLine();?> |
getTrace () | Εμφανίζει έναν πίνακα του backtrace πριν την εξαίρεση |
getTrace());?> |
getPre sebelumnya () | Εμφανίζει την προηγούμενη εξαίρεση πριν από την τρέχουσα |
getPrevious();?> |
getTraceAsString () | Εμφανίζει το backtrace της εξαίρεσης ως συμβολοσειρά αντί για πίνακα |
getTraceAsString();?> |
__toString () | Εμφανίζει ολόκληρη την εξαίρεση ως συμβολοσειρά |
__toString();?> |
Ακολουθεί η βασική σύνταξη για την εξαίρεση.
ΕΔΩ,
- «Ρίξτε» είναι η λέξη-κλειδί που χρησιμοποιείται για την εξαίρεση
- Το "new Exception (…)" δημιουργεί ένα αντικείμενο εξαίρεσης και περνά "Αυτό είναι ένα παράδειγμα εξαίρεσης" συμβολοσειρά ως παράμετρος μηνύματος.
Ο παραπάνω κώδικας εξάγει το ακόλουθο μήνυμα.
Τώρα θα δούμε ένα παράδειγμα που εφαρμόζει τις εξαιρέσεις ρίψης και σύλληψης.
Θα τροποποιήσουμε το παραπάνω παράδειγμα και θα συμπεριλάβουμε το try, ρίξτε και πιάστε.
Έχει την ακόλουθη βασική σύνταξη.
ΕΔΩ,
- Το "try {…}" είναι το μπλοκ του κώδικα που θα εκτελεστεί και θα μπορούσε ενδεχομένως να δημιουργήσει μια εξαίρεση
- "Catch (Exception $ e) {…}" είναι το μπλοκ του κώδικα που πιάνει την εξαιρούμενη εξαίρεση και εκχωρεί το αντικείμενο εξαίρεσης στη μεταβλητή $ e.
Ο παρακάτω κώδικας δείχνει το βασικό παράδειγμα εξαίρεσης με την εφαρμογή εξαίρεσης δοκιμής, ρίψης και σύλληψης.
Το πρόγραμμα ρίχνει σκόπιμα μια εξαίρεση την οποία στη συνέχεια αντιλαμβάνεται.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Ανοίξτε τη διεύθυνση URL http: //localhost/phptuts/exception_handling.php Θα λάβετε τα ακόλουθα αποτελέσματα.
Είναι επίσης δυνατή η δημιουργία πολλαπλών εξαιρέσεων για μια δήλωση δοκιμής php ανάλογα με τον τύπο της εξαίρεσης που ρίχνεται.
Δείτε το άρθρο σχετικά με την πρόσβαση δεδομένων MySQL, PHP
… Για παραδείγματα εφαρμογής πολλαπλών εξαιρέσεωνΠολλαπλές εξαιρέσεις
Πολλαπλή εξαίρεση χρησιμοποιήστε μπλοκ πολλαπλών δοκιμών για να χειριστείτε τις εξαιρούμενες ρίψεις. Πολλαπλές εξαιρέσεις είναι χρήσιμες όταν;
- Θέλετε να εμφανίσετε ένα προσαρμοσμένο μήνυμα ανάλογα με την εξαίρεση που ρίχνετε
- Θέλετε να εκτελέσετε μια μοναδική λειτουργία ανάλογα με την εξαίρεση που ρίχνετε
Το διάγραμμα ροής παρακάτω δείχνει τον τρόπο λειτουργίας πολλαπλών εξαιρέσεων
Ας δούμε ένα παράδειγμα που χρησιμοποιεί πολλές εξαιρέσεις.
Θα τροποποιήσουμε τον κωδικό που διαιρεί έναν αριθμό με τον παραχωρητή στον παρονομαστή.
Αναμένουμε να προκύψουν δύο τύποι εξαιρέσεων.
- Διαίρεση με το μηδέν
- Διαίρεση με αρνητικό αριθμό
Για λόγους απλότητας, θα εμφανίζουμε μόνο τον τύπο εξαίρεσης στα μπλοκ αλίευσης.
Η ενσωματωμένη κατηγορία PHP χρησιμοποιείται για εξαίρεση.
Θα δημιουργήσουμε δύο τάξεις που θα επεκτείνουν την κατηγορία εξαίρεσης και θα τις χρησιμοποιήσουμε για την εξαίρεση.
Ο παρακάτω κώδικας δείχνει την εφαρμογή.
Δοκιμή του κωδικού
Θα υποθέσουμε ότι έχετε αποθηκεύσει το multi_exceptions.php στο φάκελο phptuts.
Αναζήτηση στη διεύθυνση URL http: //localhost/phptuts/multiple_exceptions.php
Επιστρέψτε στο αρχείο PHP και περάστε το -1 ως παράμετρο όπως φαίνεται στο παρακάτω διάγραμμα.
Περιηγηθείτε στη διεύθυνση URL http: //localhost/phptuts/multiple_exceptions.php .
Ποια αποτελέσματα παίρνετε; Περάστε το 3 ως παράμετρο.
Ποια αποτελέσματα παίρνετε;
Περίληψη
- Τα σφάλματα είναι μη αναμενόμενα αποτελέσματα που παράγονται από τον κώδικα PHP
- Ο χειρισμός σφαλμάτων βελτιώνει την απόδοση της εφαρμογής
- Η PHP έχει ενσωματωμένες λειτουργίες που μπορούν να χρησιμοποιηθούν για να προσαρμόσουν τον τρόπο με τον οποίο η PHP αναφέρει σφάλματα
- Οι εξαιρέσεις είναι σαν λάθη, αλλά μπορούν να πιαστούν χρησιμοποιώντας το μπλοκ αλιευμάτων όταν ρίχνονται.
- Η εμφάνιση μηνυμάτων σφάλματος που εμφανίζουν πληροφορίες σφάλματος θεωρείται κακή πρακτική ασφάλειας.