سؤال

أنا أقوم بتطوير بعض المشروع. وأريد التحكم في أخطاء مختلفة. أعلم أنه في جميع الأطر الشائعة ومشاريع PHP هناك استثناءات مختلفة. لكنني أعتقد أن هذا غير مطلوب من العمل. في حالة حدوث الخطأ ، يمكننا أن نموت () مع رسالتنا. 1. ما هي الإيجابيات الرئيسية للاستثناءات؟ 2. هل يمكنني التحكم في أخطائي مع Die ()؟

شكرًا لك.

هل كانت مفيدة؟

المحلول

حسنًا ، يمكنك استخدام die(). ولكن هذا يجعل كل الأخطاء قاتلة. وهذا يعني أنه لا يمكنك محاولة التعافي من الخطأ على الإطلاق. في بعض الحالات ، هذا جيد.

ولكن في معظم الحالات ، قد ترغب في القدرة على "التنظيف" بعد الخطأ ، أو تجربة طريقة أخرى. هذا هو المكان الذي تأتي فيه الاستثناءات ... يتيحون لك اختيار أين وإذا كنت تريد التعامل مع الخطأ. يتيحون لك محاولة التعافي بأمان من الأخطاء.

على سبيل المثال ، لنفترض أن لديك طريقة تقوم بتنزيل ملف من خادم بعيد: downloadFromRemoteServer($address);

إذا كنت تستخدم die(), ، إذا فشل التنزيل ، ينتهي البرنامج النصي. نهاية القصة.

ولكن إذا كنت تستخدم استثناءات ، فيمكنك تجربة خادم آخر أو حتى تجربة طريقة مختلفة (HTTP مقابل FTP ، إلخ):

try {
    $file = downloadFromRemoteServer('http://example.com/foo');
} catch (DownloadFailedException $e) {
    try {
        $file = downloadFromRemoteServer('http://secondtry.example.com/foo');
    } catch (DownloadFailedException $e2) {
        die('Could not download file');
    }
}
return $file;

ولكن تذكر أن الاستثناءات مفيدة فقط للظروف الاستثنائية. لا يُقصد استخدامها لأي خطأ محتمل. على سبيل المثال ، إذا لم يتحقق المستخدم من عنوان بريده الإلكتروني بشكل صحيح ، فهذا ليس استثنائيًا. ولكن إذا لم تتمكن من الاتصال بخادم قاعدة البيانات ، أو لديك تعارض في DB ، فسيكون ذلك ظرفًا استثناءً ...

نصائح أخرى

ألكساندر ،

يموت () والاستثناءات تنجز أشياء مختلفة.

تقوم بنية اللغة "Die" بإيقاف تنفيذ البرنامج النصي وربما يخرج المعلمات إذا تم تسميتها كدالة.

من ناحية أخرى ، فإن الاستثناءات هي هياكل أكثر تقدماً يتم استخدامها في سياقات OOP لمنح المطور مزيدًا من المرونة فيما إذا كان هناك حاجة إلى إيقاف البرنامج النصي وإذا كان الأمر كذلك ، بأي طريقة ، ما هو الإخراج الذي سيتم عرضه على المستخدم وما إلى ذلك.

الاستثناءات أكثر تعقيدًا قليلاً من هذا ، لذا ربما يجب عليك توثيق نفسك مع بعض OOP أولاً أو لهذه المسألة اقرأ عن Zend Framework وستفهم ماهية الاستثناءات.

بالنسبة لأشياء بسيطة ، يمكنك دائمًا استخدام الخروج (أو الموت ، وهو نفس الشيء).

آمل أن يساعد هذا ، السلافية

1 ما هي الإيجابيات الرئيسية للاستثناءات؟

المزايا الرئيسية هي:

  • الوظائف الفاشلة لا يجب تلويث عودتها مع ظروف الخطأ
  • يمكن التعامل مع الاستثناءات المكتوبة في المستويات المناسبة في الكود ، أنت حدد أي جزء من الكود يمكنه التعامل مع الأخطاء
  • يمكنك تخزين المزيد من المعلومات حول حالة الخطأ في الاستثناء نفسه ، وجعل التعامل معها ، وربما التعافي منه ، أسهل.

2 هل يمكنني التحكم في أخطائي مع Die ()؟

بالكاد أسميها التحكم ، أود أن أسميها التخلي عن التعامل مع الخطأ فعليًا. في أي وقت من الأوقات في مشاريعي die() في الواقع سهلة الاستخدام ، وكل هؤلاء die('...some error condition...'); أمثلة رمز PHP هي IMHO فقط مناسبة للمشاريع في التطوير. في الإنتاج ، سترغب في أن يكون المستخدمون قادرين على متابعة مهامهم / برامجهم أسهل طريقة ممكنة ، لذلك "حاول مرة أخرى" (إذا لم يكن من المحتمل أن يتم الوفاء بالشرط مرة أخرى) ، "آسف لا يعمل هذا ' / أنواع أخرى من الرسائل والنماذج / الصفحات أكثر مرغوبًا بعد ذلك die().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top