Σφάλματα ανάλυσης/συντακτικού της PHP και πώς να τα λύσετε;
Όλοι αντιμετωπίζουν συντακτικά λάθη. Ακόμη και έμπειροι προγραμματιστές κάνουν τυπογραφικά λάθη. Για τους νεοεισερχόμενους, είναι απλά μέρος της διαδικασίας εκμάθησης. Ωστόσο, είναι συχνά εύκολο να ερμηνεύσουμε μηνύματα λάθους όπως: PHP Parse error: syntax error, unexpected '{' in index.php on line 20 Το απροσδόκητο σύμβολο δεν είναι'πάντα ο πραγματικός ένοχος. Αλλά ο αριθμός γραμμής δίνει μια γενική ιδέα για το πού πρέπει να αρχίσετε να ψάχνετε. Πάντα να εξετάζετε το πλαίσιο του κώδικα. Το συντακτικό λάθος συχνά κρύβεται στις αναφερόμενες ή σε προηγούμενες γραμμές κώδικα. Συγκρίνετε τον κώδικά σας με παραδείγματα σύνταξης από το εγχειρίδιο. Αν και δεν ταιριάζει κάθε περίπτωση με την άλλη. Ωστόσο, υπάρχουν κάποια γενικά βήματα για την επίλυση συντακτικών λαθών. Αυτές οι αναφορές συνοψίζουν τις συνήθεις παγίδες:
- T_STRING](https://stackoverflow.com/a/18092277)
- Unexpected T_VARIABLE
Unexpected '$varname' (T_VARIABLE) - Αναπάντεχο T_CONSTANT_ENCAPSED_STRING
Αναπάντεχο T_ENCAPSED_AND_WHITESPACE - Αναπάντεχο $end
- Αναπάντεχο T_FUNCTION...
- Αναπάντεχο
{
Αναπάντεχο}
Αναπάντεχο(
Αναπάντεχο)
- [Unexpected
[
Unexpected]
]](https://stackoverflow.com/a/29505827) - Αναπάντεχο T_IF <br>- Αναπάντεχο T_FOREACH <br>- Αναπάντεχο T_FOR <br>- Αναπάντεχο T_WHILE <br>- Αναπάντεχο T_DO <br>- Αναπάντεχο T_PRINT <br>- Αναπάντεχο T_ECHO
- Αναπάντεχο T_LNUMBER
- Αναπάντεχο ?
- Μη αναμενόμενη συνέχεια (T_CONTINUE)
Μη αναμενόμενη συνέχεια (T_BREAK)
Μη αναμενόμενη συνέχεια (T_RETURN) - Unexpected '='
- Αναπάντεχο T_INLINE_HTML...
- Αναπάντεχο T_PAAMAYIM_NEKUDOTAYIM...
- Αναπάντεχο T_OBJECT_OPERATOR...
- Αναπάντεχο T_DOUBLE_ARROW...
Ποια είναι τα συντακτικά σφάλματα;
Η PHP ανήκει στις γλώσσες προγραμματισμού [C-style][1] και [imperative][2]. Διαθέτει άκαμπτους γραμματικούς κανόνες, από τους οποίους δεν μπορεί να ανακάμψει όταν συναντά λανθασμένα σύμβολα ή αναγνωριστικά. Δεν μπορεί'να μαντέψει τις προθέσεις σας για την κωδικοποίηση. ![Σύνταξη ορισμού συνάρτησης αφηρημένη][3]
Σημαντικότερες συμβουλές
Υπάρχουν μερικές βασικές προφυλάξεις που μπορείτε πάντα να λαμβάνετε:
Πώς να ερμηνεύετε τα σφάλματα του αναλυτή
Ένα τυπικό μήνυμα συντακτικού σφάλματος έχει ως εξής: '
;
' in file.php on line 217. Το οποίο απαριθμεί την πιθανή θέση ενός συντακτικού λάθους. Δείτε το αναφερόμενο όνομα αρχείου και τον αριθμό γραμμής. Ένα [moniker][7] όπως τοT_STRING
εξηγεί ποιο σύμβολο δεν μπόρεσε τελικά να επεξεργαστεί ο parser/tokenizer. Ωστόσο, αυτό δεν είναι απαραίτητα η αιτία του συντακτικού λάθους. Είναι σημαντικό να εξετάσετε και τις προηγούμενες γραμμές κώδικα**. Συχνά τα συντακτικά λάθη είναι απλώς ατυχίες που συνέβησαν νωρίτερα. Ο αριθμός γραμμής σφάλματος είναι απλώς το σημείο όπου ο αναλυτής εγκατέλειψε οριστικά να τα επεξεργαστεί όλα.Επίλυση συντακτικών σφαλμάτων
Υπάρχουν πολλές προσεγγίσεις για να περιορίσετε και να διορθώσετε συντακτικά προβλήματα.
;
ημικύκλιοι που λείπουν στα άκρα της προηγούμενης γραμμής/δήλωσης. (Τουλάχιστον από υφολογική άποψη. ){
μπλοκ κώδικα `}`` είναι εσφαλμένα κλειστά ή φωλιασμένα, ίσως χρειαστεί να ερευνήσετε ακόμα πιο ψηλά στον πηγαίο κώδικα. Χρησιμοποιήστε σωστή εσοχή κώδικα για να το απλοποιήσετε αυτό.+-*/.
θα πρέπει επίσης να έχουν διαφορετικό χρωματισμό. Διαφορετικά μπορεί να βρίσκονται σε λάθος πλαίσιο."
ή'
.++
,--
, ή παρενθέσεις που ακολουθούν έναν τελεστή. Δύο συμβολοσειρές/αναγνωριστικά που ακολουθούν απευθείας το ένα το άλλο είναι λανθασμένα στα περισσότερα περιβάλλοντα.if
σε ξεχωριστές ή εμφωλευμένες συνθήκεςif
.? :
μπορεί να συμπιέσει τον κώδικα και είναι πράγματι χρήσιμος. Αλλά δεν βοηθάει την αναγνωσιμότητα σε όλες τις περιπτώσεις. Προτιμήστε τις απλές δηλώσειςif
όσο δεν έχετε διαβάσει.if:
/elseif:
/endif;
) είναι κοινή για πρότυπα, αλλά αναμφισβήτητα λιγότερο εύκολη στην παρακολούθηση από τα κανονικά μπλοκ{
κώδικα}
.;
για τον τερματισμό δηλώσεων/γραμμών."
ή'
και εισαγωγικά χωρίς εισαγωγικά εντός..
.(
παρενθέσεις)
. Μετρήστε τους στην αναφερόμενη γραμμή. Υπάρχει ίσος αριθμός τους;diff
της χαλασμένης και της τελευταίας λειτουργικής έκδοσης. Το οποίο μπορεί να είναι διαφωτιστικό ως προς το ποιο είναι το συντακτικό πρόβλημα.Μη αναμενόμενο T_VARIABLE
Ένα "απροσδόκητο
T_VARIABLE
" σημαίνει ότι υπάρχει ένα κυριολεκτικό όνομα$variable
, το οποίο δεν ταιριάζει στην τρέχουσα δομή της έκφρασης/διατύπωσης.![σκόπιμα αφηρημένο/ακριβές διάγραμμα τελεστή+$μεταβλητή][1]
Λείπει η άνω και κάτω τελεία
Μη αναμενόμενο T_STRING
Το
T_STRING
είναι λίγο λανθασμένη ονομασία. Δεν αναφέρεται σε μια συμβολοσειρά σε εισαγωγικά"string"
. Σημαίνει ότι συναντήθηκε ένα ακατέργαστο αναγνωριστικό. Αυτό μπορεί να κυμαίνεται απόφθαρμένες
λέξεις μέχρι εναπομείναντα ονόματαCONSTANT
ή συναρτήσεων, ξεχασμένες μη παρατιθέμενες συμβολοσειρές ή οποιοδήποτε απλό κείμενο.Συμβολοσειρές με λάθος εισαγωγικά'`](https://stackoverflow.com/questions/6507796/troubleshooting-parse-error-unexpected-error) για μη παρατιθέμενο κυριολεκτικό HTML.
Μη προγραμματιστικά εισαγωγικά συμβολοσειρών