Σφάλματα ανάλυσης/συντακτικού της PHP και πώς να τα λύσετε;

Όλοι αντιμετωπίζουν συντακτικά λάθη. Ακόμη και έμπειροι προγραμματιστές κάνουν τυπογραφικά λάθη. Για τους νεοεισερχόμενους, είναι απλά μέρος της διαδικασίας εκμάθησης. Ωστόσο, είναι συχνά εύκολο να ερμηνεύσουμε μηνύματα λάθους όπως: PHP Parse error: syntax error, unexpected '{' in index.php on line 20 Το απροσδόκητο σύμβολο δεν είναι'πάντα ο πραγματικός ένοχος. Αλλά ο αριθμός γραμμής δίνει μια γενική ιδέα για το πού πρέπει να αρχίσετε να ψάχνετε. Πάντα να εξετάζετε το πλαίσιο του κώδικα. Το συντακτικό λάθος συχνά κρύβεται στις αναφερόμενες ή σε προηγούμενες γραμμές κώδικα. Συγκρίνετε τον κώδικά σας με παραδείγματα σύνταξης από το εγχειρίδιο. Αν και δεν ταιριάζει κάθε περίπτωση με την άλλη. Ωστόσο, υπάρχουν κάποια γενικά βήματα για την επίλυση συντακτικών λαθών. Αυτές οι αναφορές συνοψίζουν τις συνήθεις παγίδες:

Λύση

Ποια είναι τα συντακτικά σφάλματα;

Η PHP ανήκει στις γλώσσες προγραμματισμού [C-style][1] και [imperative][2]. Διαθέτει άκαμπτους γραμματικούς κανόνες, από τους οποίους δεν μπορεί να ανακάμψει όταν συναντά λανθασμένα σύμβολα ή αναγνωριστικά. Δεν μπορεί'να μαντέψει τις προθέσεις σας για την κωδικοποίηση. ![Σύνταξη ορισμού συνάρτησης αφηρημένη][3]

Σημαντικότερες συμβουλές

Υπάρχουν μερικές βασικές προφυλάξεις που μπορείτε πάντα να λαμβάνετε:

  • Χρησιμοποιήστε τη σωστή εσοχή του κώδικα, ή υιοθετήστε οποιοδήποτε υψηλών τόνων στυλ κωδικοποίησης. Η αναγνωσιμότητα αποτρέπει τις παρατυπίες.
  • Χρησιμοποιήστε ένα [IDE ή έναν επεξεργαστή για PHP][4] με συντακτική επισήμανση. Τα οποία βοηθούν επίσης στην εξισορρόπηση παρενθέσεων/αγκυλών. ![Αναμενόμενο: άνω τελεία][5]
  • Διαβάστε [την αναφορά της γλώσσας][6] και τα παραδείγματα στο εγχειρίδιο. Δύο φορές, για να γίνετε κάπως έμπειροι.

    Πώς να ερμηνεύετε τα σφάλματα του αναλυτή

    Ένα τυπικό μήνυμα συντακτικού σφάλματος έχει ως εξής: ';' in file.php on line 217. Το οποίο απαριθμεί την πιθανή θέση ενός συντακτικού λάθους. Δείτε το αναφερόμενο όνομα αρχείου και τον αριθμό γραμμής. Ένα [moniker][7] όπως το T_STRING εξηγεί ποιο σύμβολο δεν μπόρεσε τελικά να επεξεργαστεί ο parser/tokenizer. Ωστόσο, αυτό δεν είναι απαραίτητα η αιτία του συντακτικού λάθους. Είναι σημαντικό να εξετάσετε και τις προηγούμενες γραμμές κώδικα**. Συχνά τα συντακτικά λάθη είναι απλώς ατυχίες που συνέβησαν νωρίτερα. Ο αριθμός γραμμής σφάλματος είναι απλώς το σημείο όπου ο αναλυτής εγκατέλειψε οριστικά να τα επεξεργαστεί όλα.

    Επίλυση συντακτικών σφαλμάτων

    Υπάρχουν πολλές προσεγγίσεις για να περιορίσετε και να διορθώσετε συντακτικά προβλήματα.

  • Ανοίξτε το αναφερόμενο αρχείο πηγαίου κώδικα. Κοιτάξτε την αναφερόμενη γραμμή κώδικα.
    • Για τις ανεξέλεγκτες συμβολοσειρές και τους λανθασμένους τελεστές, συνήθως εδώ βρίσκετε τον ένοχο.
    • Διαβάστε τη γραμμή από αριστερά προς τα δεξιά και φανταστείτε τι κάνει κάθε σύμβολο.
  • Πιο τακτικά πρέπει να κοιτάξετε και τις προηγούμενες γραμμές.
    • Συγκεκριμένα, λείπουν οι ; ημικύκλιοι που λείπουν στα άκρα της προηγούμενης γραμμής/δήλωσης. (Τουλάχιστον από υφολογική άποψη. )
    • Αν τα {μπλοκ κώδικα `}`` είναι εσφαλμένα κλειστά ή φωλιασμένα, ίσως χρειαστεί να ερευνήσετε ακόμα πιο ψηλά στον πηγαίο κώδικα. Χρησιμοποιήστε σωστή εσοχή κώδικα για να το απλοποιήσετε αυτό.
  • Κοιτάξτε τον χρωματισμό του συντακτικού!
    • Οι συμβολοσειρές, οι μεταβλητές και οι σταθερές θα πρέπει να έχουν όλα διαφορετικά χρώματα.
    • Οι τελεστές +-*/. θα πρέπει επίσης να έχουν διαφορετικό χρωματισμό. Διαφορετικά μπορεί να βρίσκονται σε λάθος πλαίσιο.
    • Αν δείτε τον χρωματισμό συμβολοσειρών να εκτείνεται πολύ μακριά ή πολύ κοντά, τότε έχετε βρει έναν μη συνθηματοποιημένο ή ελλιπή τελικό δείκτη συμβολοσειράς " ή '.
    • Το να έχετε δύο χαρακτήρες στίξης ίδιου χρώματος ο ένας δίπλα στον άλλο μπορεί επίσης να σημαίνει πρόβλημα. Συνήθως, οι τελεστές είναι μοναχικοί, αν δεν είναι ++, --, ή παρενθέσεις που ακολουθούν έναν τελεστή. Δύο συμβολοσειρές/αναγνωριστικά που ακολουθούν απευθείας το ένα το άλλο είναι λανθασμένα στα περισσότερα περιβάλλοντα.
  • Το λευκό διάστημα είναι ο φίλος σας. Ακολουθήστε οποιοδήποτε στυλ κωδικοποίησης. Ας μην ενοχλήσουμε τους αρχάριους με το PSR-x εδώ, ωστόσο, K? --&gt,
  • Σπάστε προσωρινά τις μεγάλες γραμμές.
    • Μπορείτε ελεύθερα να προσθέσετε νέες γραμμές μεταξύ τελεστών ή σταθερών και συμβολοσειρών. Ο αναλυτής θα συγκεκριμενοποιήσει στη συνέχεια τον αριθμό γραμμής για σφάλματα ανάλυσης. Αντί να εξετάζετε τον πολύ μακροσκελή κώδικα, μπορείτε να απομονώσετε το σύμβολο σύνταξης που λείπει ή έχει τοποθετηθεί λάθος.
    • Χωρίστε πολύπλοκες δηλώσεις if σε ξεχωριστές ή εμφωλευμένες συνθήκες if.
    • Αντί για μακροσκελείς μαθηματικούς τύπους ή λογικές αλυσίδες, χρησιμοποιήστε προσωρινές μεταβλητές για να απλοποιήσετε τον κώδικα. (Πιο ευανάγνωστο = λιγότερα λάθη).
    • Προσθέστε νέες γραμμές μεταξύ:
      1. Τον κώδικα που μπορείτε εύκολα να αναγνωρίσετε ως σωστό,
      2. Τα μέρη για τα οποία δεν είστε σίγουροι,
      3. Και τις γραμμές για τις οποίες παραπονιέται ο αναλυτής, Η κατάτμηση μεγάλων τμημάτων κώδικα πραγματικά βοηθά στον εντοπισμό της προέλευσης των συντακτικών σφαλμάτων.
  • Σχολιάστε τον παραβατικό κώδικα.
    • Αν δεν μπορείτε να απομονώσετε την πηγή του προβλήματος, αρχίστε να σχολιάζετε (και έτσι να αφαιρείτε προσωρινά) τμήματα κώδικα.
    • Μόλις απαλλαγείτε από το σφάλμα ανάλυσης, έχετε βρει την πηγή του προβλήματος. Κοιτάξτε πιο προσεκτικά εκεί.
    • Μερικές φορές θέλετε να αφαιρέσετε προσωρινά ολόκληρα μπλοκ συναρτήσεων/μεθόδων. (Στην περίπτωση των αταίριαστων αγκύλων και του κώδικα με λανθασμένη εσοχή).
    • Όταν δεν μπορείτε να επιλύσετε το συντακτικό πρόβλημα, προσπαθήστε να επαναγράψετε τα σχολιασμένα τμήματα από την αρχή.
  • Ως νεοεισερχόμενος, αποφύγετε κάποιες από τις συγκεχυμένες συντακτικές δομές.
    • Ο τελεστής συνθήκης ? : μπορεί να συμπιέσει τον κώδικα και είναι πράγματι χρήσιμος. Αλλά δεν βοηθάει την αναγνωσιμότητα σε όλες τις περιπτώσεις. Προτιμήστε τις απλές δηλώσεις if όσο δεν έχετε διαβάσει.
    • Η εναλλακτική σύνταξη της PHP's (if:/elseif:/endif;) είναι κοινή για πρότυπα, αλλά αναμφισβήτητα λιγότερο εύκολη στην παρακολούθηση από τα κανονικά μπλοκ { κώδικα }.
  • Τα πιο διαδεδομένα λάθη των νεοεισερχομένων είναι:
    • Λείπουν οι άνω και κάτω τελεία ; για τον τερματισμό δηλώσεων/γραμμών.
    • Ακατάλληλα εισαγωγικά συμβολοσειράς για " ή ' και εισαγωγικά χωρίς εισαγωγικά εντός.
    • Ξεχασμένοι τελεστές, ιδίως για τη συνένωση συμβολοσειρών ..
    • Μη ισορροπημένες ( παρενθέσεις ). Μετρήστε τους στην αναφερόμενη γραμμή. Υπάρχει ίσος αριθμός τους;
  • Μην ξεχνάτε ότι η επίλυση ενός συντακτικού προβλήματος μπορεί να αποκαλύψει το επόμενο.
    • Αν εξαφανίσετε το ένα πρόβλημα, αλλά κάποιο άλλο εμφανιστεί σε κάποιο κώδικα παρακάτω, είστε κυρίως στο σωστό δρόμο.
    • Αν μετά την επεξεργασία εμφανιστεί ένα νέο συντακτικό σφάλμα στην ίδια γραμμή, τότε η αλλαγή που επιχειρήσατε ήταν ενδεχομένως αποτυχημένη. (Όχι πάντοτε όμως.)
  • Επαναφέρετε ένα αντίγραφο ασφαλείας του κώδικα που λειτουργούσε προηγουμένως, αν δεν μπορείτε'να το διορθώσετε.
    • Υιοθετήστε ένα σύστημα έκδοσης του πηγαίου κώδικα. Μπορείτε πάντα να βλέπετε ένα diff της χαλασμένης και της τελευταίας λειτουργικής έκδοσης. Το οποίο μπορεί να είναι διαφωτιστικό ως προς το ποιο είναι το συντακτικό πρόβλημα.
Σχόλια (2)

Μη αναμενόμενο T_VARIABLE

Ένα "απροσδόκητο T_VARIABLE" σημαίνει ότι υπάρχει ένα κυριολεκτικό όνομα $variable, το οποίο δεν ταιριάζει στην τρέχουσα δομή της έκφρασης/διατύπωσης.

![σκόπιμα αφηρημένο/ακριβές διάγραμμα τελεστή+$μεταβλητή][1]

  1. Λείπει η άνω και κάτω τελεία

Σχόλια (0)

Μη αναμενόμενο T_STRING

Το T_STRING είναι λίγο λανθασμένη ονομασία. Δεν αναφέρεται σε μια συμβολοσειρά σε εισαγωγικά "string". Σημαίνει ότι συναντήθηκε ένα ακατέργαστο αναγνωριστικό. Αυτό μπορεί να κυμαίνεται από φθαρμένες λέξεις μέχρι εναπομείναντα ονόματα CONSTANT ή συναρτήσεων, ξεχασμένες μη παρατιθέμενες συμβολοσειρές ή οποιοδήποτε απλό κείμενο.

  1. Συμβολοσειρές με λάθος εισαγωγικά'`](https://stackoverflow.com/questions/6507796/troubleshooting-parse-error-unexpected-error) για μη παρατιθέμενο κυριολεκτικό HTML.

  2. Μη προγραμματιστικά εισαγωγικά συμβολοσειρών

Σχόλια (0)