php / php/php-src

Allow catching as ParseError "Non-abstract method C::foo() must contain a body"

Aperta
#9,333 5 commenti 3 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Feature Status: Needs Triage
Lingua principale
C
Stelle
40.4k
Fork
8.1k
Merge medio
2g 13h
PR unite (30g)
96

Descrizione

Description

Since PHP 7 it is possible to catch syntax errors in PHP files during inclusion, which is a very nice feature, such as:

try {
  eval("class C { function foo() }");
}
catch (\Throwable $e) {
  print "CAUGHT [" . get_class($e) . "]: " . $e->getMessage() . "\n";
}
// prints: CAUGHT [ParseError]: syntax error, unexpected token "}", expecting ";" or "{"
// execution continues

Unfortunately, the same is not possible in case the error is a non-abstract method without body:

try {
  eval("class C { function foo(); }");
}
catch (\Throwable $e) {
  print "CAUGHT [" . get_class($e) . "]: " . $e->getMessage() . "\n";
}
// prints: Fatal error: Non-abstract method C::foo() must contain body in /in/YY0Wu(13) : eval()'d code on line 1
// execution terminates

Would it be possible to implement a throw also for this case?

https://3v4l.org/YY0Wu

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia dal percorso eval() nell’interprete PHP e confronta il modo in cui l’errore di sintassi mostrato diventa un ParseError con il modo in cui il controllo del metodo non astratto termina attualmente l’esecuzione. Usa i due esempi eval() dell’issue come reproducer; il lavoro è completato quando il secondo caso può essere intercettato come ParseError e l’esecuzione continua.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
php
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.