PHP అపరాధ ప్రాసెసింగ్

异常(Exception)用于在指定的错误发生时改变脚本的正常流程。

什么是异常?

PHP 5 提供了一种新的面向对象的错误处理方法。

异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。

అన్యాయం ప్రారంభించబడితే, సాధారణంగా ఈ కింది సంఘటనలు జరుగుతాయి:

  • ప్రస్తుత కోడ్ స్టేట్ సేవ్ చేయబడుతుంది
  • కోడ్ ప్రాసెసింగ్ ప్రివియుట్ ప్రాసెసర్ ఫంక్షన్ కు మార్చబడుతుంది
  • పరిస్థితిని బట్టి, ప్రాసెసర్ సేవ్ చేసిన కోడ్ స్టేట్ నుండి కొనసాగించవచ్చు, స్క్రిప్ట్ యొక్క ప్రాసెసింగ్ ని ముగించవచ్చు లేదా కోడ్ లో మరొక స్థానం నుండి కొనసాగవచ్చు

మేము వివిధ తప్పు ప్రాసెసింగ్ పద్ధతులను ప్రదర్శించండి:

  • అన్యాయం యొక్క ప్రాథమిక ఉపయోగం
  • పరిశీలనాత్మక అన్యాయం ప్రాసెసర్ రాయండి
  • అనేక అసాధారణతలు
  • అసాధారణతను మళ్ళీ ఫలించడం
  • టాప్ లెవల్ అన్యాయం ప్రాసెసర్ సెట్ చేయండి

అన్యాయం యొక్క ప్రాథమిక ఉపయోగం

అన్యాయం ప్రారంభించబడితే, తరువాతి కోడ్ కొనసాగకపోతుంది, PHP సరిపోలే 'catch' కోడ్ బ్లాక్ ను శోధించగలదు.

అన్యాయం పరిగణించబడకపోతే మరియు set_exception_handler() తో సంబంధించిన సంభావ్య ప్రాసెసర్ ఉపయోగించకపోతే, ఒక గమననీయమైన తప్పు (ఫాటల్ ఎరర్) సంభవించబడుతుంది మరియు 'అనికట్టని అన్యాయం' (Uncaught Exception) తప్పు సందేశాన్ని అవుట్పుట్ చేయబడుతుంది.

మాకు అన్యాయాన్ని ప్రారంభించండి మరియు అది పరిగణించకపోవచ్చు ప్రయత్నించండి:


పైన ఉన్న కోడ్ ఇలాంటి తప్పును పొందుతుంది:

ఫాటల్ ఎరర్: అనికట్టని అన్యాయం 'Exception' 
సందేశం 'విలువ మూడికి లేదా తక్కువగా ఉండాలి' తో సి:\webfolder\test.php:6 లో 
స్టాక్ ట్రేస్: #0 సి:\webfolder\test.php(12): 
checkNum(28) #1 {main} సి:\webfolder\test.php లోను లైన్ 6 పై ప్రారంభించబడింది

ప్రయత్నించండి, ప్రారంభించండి మరియు కాచ్

పైన ఉన్న ప్రకటనలో ఉన్న తప్పును నివారించడానికి, మాకు అన్యాయాలను నిర్వహించడానికి సరైన కోడ్ రాయడం అవసరం.

సరైన ప్రాసెసర్ కు కలిగిన ఉండాలి:

  1. ప్రయత్నించండి - అన్యాయం పద్ధతిని ఉపయోగించడానికి "ప్రయత్నించండి" కోడ్ బ్లాక్ లో ఉండాలి. ఎందుకంటే అన్యాయం ప్రారంభించకపోతే కోడ్ సాధారణంగా కొనసాగుతుంది. కానీ అన్యాయం ప్రారంభించబడితే, అన్యాయం ప్రారంభించబడుతుంది.
  2. Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
  3. ప్రసరించు - ఇక్కడ ఎక్స్పెషన్ ప్రసరించడానికి నియమాలను నిర్దేశిస్తారు. ప్రతి "throw" కు కనీసం ఒక "catch" ఉండాలి

ఎక్స్పెషన్ - "catch" కోడ్ బ్లాక్ ఎక్స్పెషన్ ను అదుకుంటుంది మరియు ఎక్స్పెషన్ సమాచారాన్ని కలిగివున్న ఒక ఆబ్జెక్ట్ ను సృష్టిస్తుంది


పైని కోడ్ ఈ విధమైన దోషాన్ని పొందుతుంది:

సందేశం: విలువ వేరు లేదా కంటే తక్కువగా ఉండాలి

ఉదాహరణ వివరణ:

పైని కోడ్ ఎక్స్పెషన్ ప్రసరించింది మరియు దానిని అదుకుంది:

  1. checkNum() కార్యకలాపాన్ని సృష్టించండి. ఇది సంఖ్య మీదనుగుణంగా 1 కంటే పెద్దది కాకపోతే ఒక ఎక్స్పెషన్ ప్రసరిస్తుంది.
  2. "try" కోడ్ బ్లాక్ లో checkNum() కార్యకలాపాన్ని కాల్ చేస్తాము.
  3. checkNum() కార్యకలాపంలో ఎక్స్పెషన్ ప్రసరించబడింది
  4. "catch" కోడ్ బ్లాక్ ఈ ఎక్స్పెషన్ ను అందుకుంటుంది మరియు ఎక్స్పెషన్ సమాచారాన్ని కలిగివున్న ఒక ఆబ్జెక్ట్ ($e) ను సృష్టిస్తుంది
  5. exception ఆబ్జెక్ట్ నుండి $e->getMessage() అనేది ఈ ఎక్స్పెషన్ నుండి దోషాన్ని తెలుపుతుంది

అయితే, 'ప్రతి throw కు కాస్తున్నది ఒక catch' సూత్రాన్ని పాటించడానికి, లోపాలుగా మిగిలిపోయిన దోషాలను నిర్వహించడానికి ఒక పైని ఎక్స్పెషన్ హాండలర్ నిర్మించవచ్చు.

పరిమితమైన Exception క్లాస్ నిర్మించండి

పరిమితమైన ఎక్స్పెషన్ హాండలర్ నిర్మించడం చాలా సులభం. మేము ఒక ప్రత్యేక క్లాస్ నిర్మించాము, PHP లో ఎక్స్పెషన్ జరగించినప్పుడు దాని కార్యకలాపాలను కాల్ చేయవచ్చు. ఈ క్లాస్ exception క్లాస్ యొక్క విస్తరణగా ఉండాలి.

ఈ పరిమితమైన exception క్లాస్ PHP యొక్క exception క్లాస్ యొక్క అన్ని లక్షణాలను వారిస్తుంది, మీరు దానిలో పరిమితమైన కార్యకలాపాలను జోడించవచ్చు.

మేము exception క్లాస్ నిర్మించడానికి మొదలుపెడతాము:


ఈ కొత్త క్లాస్ పాత exception క్లాసును నకిలీ చేసింది, errorMessage() ఫంక్షన్ను జోడించింది. ఇది పాత క్లాసును నకిలీ చేసినందున, ఇది పాత క్లాసు లోని గుణాలు మరియు మంథనాలను ఉంచుకుంది, మరియు అసాధారణత క్లాసు యొక్క మంథనాలను వినియోగించవచ్చు, ఉదాహరణకు getLine() , getFile() మరియు getMessage() .

ఉదాహరణ వివరణ:

పైని కోడ్ అనేది ఒక అసాధారణతను ఫలించింది మరియు ఒక స్వతంత్ర అసాధారణత క్లాసును కాప్చింది:

  1. customException() క్లాస్ పాత exception క్లాస్ యొక్క విస్తరణగా సృష్టించబడింది. అలాగే ఇది పాత క్లాస్ యొక్క అన్ని గుణాత్మకాలు మరియు మార్గదర్శకాలను ఉంటుంది。
  2. errorMessage() ఫంక్షన్ను సృష్టించండి. ఇమెయిల్ అడ్రెస్స్ అసాధారణం అయితే, ఈ ఫంక్షన్ ఒక అపరిచ్చిన సందేశాన్ని తిరిగి ఇస్తుంది
  3. $email వేరియబుల్ను అసాధారణ ఇమెయిల్ అడ్రెస్స్ స్ట్రింగ్గా సెట్ చేయండి
  4. "try" కోడ్ బ్లాక్ నిర్వహించడం, ఇమెయిల్ అడ్రెస్స్ అసాధారణం కావడంతో అసాధారణత ఫలించింది
  5. "catch" కోడ్ బ్లాక్ అసాధారణతను కాప్చి, అపరిచ్చిన సందేశాన్ని చూపిస్తుంది

అనేక అసాధారణతలు

ఒక స్క్రిప్ట్కు అనేక అసాధారణతలను వినియోగించవచ్చు, వివిధ పరిస్థితులను పరిశీలించడానికి.

ఒకటికి అనేక అనునాయిక కోడ్ బ్లాక్లు, లేదా ఒక స్విచ్ కోడ్ బ్లాక్, లేదా అనేక అసాధారణతలను నిర్వహించడానికి నిర్వహించవచ్చు. ఈ అసాధారణతలు వివిధ exception క్లాసులను వినియోగించవచ్చు మరియు వివిధ అపరిచ్చిన సందేశాలను అందిస్తాయి:


ఉదాహరణ వివరణ:

పైని కోడ్ అనేది రెండు పరిస్థితులను పరీక్షించింది, ఏది పరిస్థితి సరిగ్గా లేకపోయినప్పుడు అసాధారణతను ఫలించింది:

  1. customException() క్లాస్ పాత exception క్లాస్ యొక్క విస్తరణగా సృష్టించబడింది. అలాగే ఇది పాత క్లాస్ యొక్క అన్ని గుణాత్మకాలు మరియు మార్గదర్శకాలను ఉంటుంది。
  2. errorMessage() ఫంక్షన్ సృష్టించబడింది. మెయిల్ చిరునామా వినియోగదారికి చెడు అయితే, ఈ ఫంక్షన్ ఒక దోష సందేశాన్ని తిరిగి ఇవ్వబడుతుంది。
  3. "try" కోడ్ బ్లాక్ నిర్వహించడం, మొదటి పరిస్థితిలో అసాధారణత ఫలించదు
  4. e-mail లో "example" స్ట్రింగ్ ఉన్నప్పుడు, రెండవ పరిస్థితి అసాధారణతను ప్రేరేపిస్తుంది
  5. "catch" కోడ్ బ్లాక్ అసాధారణతను కాప్చి, సరిగ్గాని అపరిచ్చిన విషయాన్ని చూపిస్తుంది

customException అనేది కాప్చకుండా, base exception మాత్రమే కాప్చబడినప్పుడు, అక్కడ అసాధారణతను నిర్వహించండి.

అసాధారణతను మళ్ళీ ఫలించడం

కొన్నిసార్లు, అసాధారణతలు ఫలించినప్పుడు, మీరు అసాధారణతను ప్రామాణిక రీతికి వ్యతిరేకంగా నిర్వహించాలని కోరుకుంటున్నారు. "catch" కోడ్ బ్లాక్లో మళ్ళీ అసాధారణతను ఫలించవచ్చు.

script should hide system errors from users. System errors may be important for programmers, but users are not interested in them. To make it easier for users, you can re-throw exceptions with user-friendly messages:


ఉదాహరణ వివరణ:

పైని కోడ్ మెయిల్ చిరునామాలో "example" పదం ఉన్నాక పరిశీలిస్తుంది. ఉన్నాక పరిశీలిస్తుంది అనియంత్రిత పరిస్థితిని మళ్ళీ ప్రసరింపచేస్తుంది:

  1. customException() క్లాస్ పాత exception క్లాస్ యొక్క విస్తరణగా సృష్టించబడింది. అలాగే ఇది పాత క్లాస్ యొక్క అన్ని గుణాత్మకాలు మరియు మార్గదర్శకాలను ఉంటుంది。
  2. errorMessage() ఫంక్షన్ సృష్టించబడింది. మెయిల్ చిరునామా వినియోగదారికి చెడు అయితే, ఈ ఫంక్షన్ ఒక దోష సందేశాన్ని తిరిగి ఇవ్వబడుతుంది。
  3. $email వేరియబుల్ ను ఒక విజయవంతమైన మెయిల్ చిరునామాగా సెట్ చేయబడింది, కానీ "example" పదం ఉంది。
  4. "try" కోడ్ బ్లాక్ మరొక "try" కోడ్ బ్లాక్ ని కలిగివుంది, అలాగే అనియంత్రిత పరిస్థితిని మళ్ళీ ప్రసరింపచేసేందుకు ఉపయోగించబడింది。
  5. e-mail లో "example" పదం ఉండటంతో అనియంత్రిత పరిస్థితి జరిగింది。
  6. "catch" ఈ అనియంత్రిత పరిస్థితిని పక్కించింది మరియు "customException" ను మళ్ళీ ప్రసరింపచేసింది。
  7. సిగ్నల్ "customException" పక్కించబడింది మరియు ఒక దోష సందేశాన్ని ప్రదర్శించబడింది。

如果在其目前的 "try" 代码块中异常没有被捕获,则它将在更高层级上查找 catch 代码块。

设置顶层异常处理器 (Top Level Exception Handler)

set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。

Exception: " , $exception->getMessage();
}
set_exception_handler('myException');
throw new Exception('Uncaught Exception occurred');
?>

以上代码的输出应该类似这样:

Exception: Uncaught Exception occurred

在上面的代码中,不存在 "catch" 代码块,而是触发顶层的异常处理程序。应该使用此函数来捕获所有未被捕获的异常。

异常的规则

  • 需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
  • 每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
  • 使用多个 catch 代码块可以捕获不同种类的异常。
  • 可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。

简而言之:如果抛出了异常,就必须捕获它。