بغض النظر عن مدى حرصنا عند كتابة البرامج، فإن الأخطاء أمر لا مفر منه. عادة ما تربك هذه الأخطاء مترجم PHP. رسائل خطأ المترجم ليست عديمة الفائدة فحسب، بل غالبًا ما تكون محبطة إذا لم يفهم المطورون ما يقصدونه.
عند تجميع برنامج PHP النصي، يبذل مترجم PHP قصارى جهده للإبلاغ عن المشكلة الأولى التي يواجهها. وهذا يخلق مشكلة: لا يمكن لـ PHP التعرف على الخطأ إلا عند حدوثه (يتم وصف هذه المشكلة بالتفصيل لاحقًا في هذه المقالة). ولهذا السبب يشير المترجم إلى أن السطر المخطئ قد يبدو ظاهريًا صحيحًا نحويًا، أو قد يكون سطرًا غير موجود على الإطلاق!
يمكن أن يؤدي الفهم الأفضل لرسائل الخطأ إلى تقليل الوقت المستغرق في تحديد الأخطاء وتصحيحها بشكل كبير. لذلك، سأحاول في هذه المقالة توضيح الأنواع العديدة المختلفة لرسائل خطأ PHP وكيفية فهم معنى رسائل الخطأ المختلفة بشكل صحيح أثناء عملية التطوير.
المحتوى الموصوف في هذه المقالة ليس له علاقة بإصدار PHP الذي تستخدمه، لأن الأخطاء المتنوعة الموضحة في هذه المقالة لا تقتصر على أخطاء محددة في إصدار معين. بالإضافة إلى ذلك، نفترض أنك مبرمج مبتدئ أو متوسط وأنك منخرط في البرمجة لمدة نصف عام أو عام.
كيف يعمل المترجم
لفهم سبب قيام المترجم بالإبلاغ عن خطأ في سطر معين، يجب عليك أولاً فهم الآلية التي يقوم المترجم من خلالها بتوزيع كود PHP. لن أخوض في التفاصيل حول هذا الأمر في هذه المقالة، لكننا سنناقش بعض المفاهيم البسيطة التي من المرجح أن تؤدي إلى الأخطاء.
إعلان المتغير
إذا قمت بتعريف متغير في عبارة، فإن الطريقة المحددة هي كما يلي:
$variable = 'value'؛
يقوم المترجم أولاً بالعثور على قيمة النصف الأيمن من العبارة (أي كل شيء على الجانب الأيمن من يساوي لافتة). في بعض كتب البرمجة، يتم تمثيل ذلك على أنه RHS (النصف الأيمن) من العبارة. هذا الجزء من البيان هو الذي يسبب الأخطاء غالبًا. إذا كنت تستخدم بناء جملة غير صحيح، فسوف تحصل على خطأ في التحليل.
خطأتحليل
: خطأ تحليل، T_WHILE غير متوقع في c:\program files\Apache group\Apache\htdocs\script.php على السطر 19
تأتي أخطاء التحليل واحدًا تلو الآخر في كل مرة يتم فيها تحديد الخطأ السابق، استمر في الظهور. نظرًا لأن PHP يتوقف عن تنفيذ البرنامج النصي بعد خطأ التحليل الأول، فإن تصحيح الأخطاء وتصحيح هذه السلسلة من الأخطاء غالبًا ما يكون مرهقًا بشكل خاص.
بالإضافة إلى ذلك، تحتوي أخطاء التحليل على معلومات قليلة جدًا، مع عدم وجود أي تقارير تقريبًا عن رقم السطر الذي حدث فيه الخطأ. السبب المحدد هو أنه عند حدوث خطأ، يحدد المترجم أن بناء جملة عدة أسطر يجب أن يبدو صالحًا حتى يواجه بناء جملة غير صالح. الحالة الأكثر احتمالًا هي استخدام كلمات محددة مسبقًا في التعبير، على سبيل المثال
while = 10 ؛ / Bad ? while هي كلمة محددة مسبقًا ولا يمكن تعيينها لقيمة.
تتضمن الكلمات المحددة مسبقًا while والوظيفة وما إلى ذلك. إذا كانت PHP تستخدم لتقييم التعليمات البرمجية الخاصة بك، فلا يمكنك استخدام هذه الكلمات المحددة مسبقًا لتسمية المتغيرات هذا، PHP سوف يبلغ عن المزيد من الأخطاء، والتي لا يمكنك تحملها.
فيما يتعلق بهذه المشكلة، المثال التالي قد يساعدك. يرجى مراجعة وقراءة كود PHP الموضح أدناه:
<?php
$b = بعض القيمة
إذا($ب == بعض القيمة){
طباعة مرحبا بالعالم!;
}
?>
الخطأ موجود في السطر $b = (فاصلة منقوطة مفقودة في نهاية العبارة)، لذلك يجب أن يكون الخطأ خطأ تحليل: فاصلة منقوطة مفقودة في السطر 3، أليس كذلك؟ لا ينبغي تحديده بناءً على المحلل اللغوي:
خطأ في التحليل: خطأ في التحليل، T_IF غير متوقع في ملفات c:\program\Apache
group\Apache\htdocs\ereg2.php في السطر 4
في السطر 4، بناء جملة عبارة if() صحيح. إذًا، ما الذي يربك المترجم؟ الدليل هو جزء T_IF غير المتوقع. عند حدوث خطأ غير متوقع T_؟؟؟، فهذا يعني: وجد المترجم أن كلمة محددة مسبقًا تظهر في موضع لا ينبغي أن تظهر فيه. يمثل T_IF if()، ويمثل T_WHILE while()، ويمثل T_FOR for()، وما إلى ذلك.
ولحسن الحظ، فإن سبب بعض الأخطاء بسيط أيضًا:
لا يتم إنهاء العبارة بفاصلة منقوطة (؛)، مثل المثال أعلاه. علامات الاقتباس مفقودة في السلسلة.
بعض الأخطاء الشائعة الأخرى
الخطأ الأكثر شيوعًا الذي أراه هو عدم إغلاق دالة أو حلقة باستخدام قوس ( } ) ربما يكون هذا هو الخطأ الأكثر شيوعًا وإزعاجًا.
الكود المحدد هو كما يلي:
function UselessFunction() {
ل($i < 0; $i < 10; $i++){
}
سيتم إنشاء الخطأ التالي:
خطأ في التحليل: خطأ في التحليل، $ غير متوقع في c:\program files\Apache
group\Apache\htdocs\ereg2.php في السطر 9
نظرًا لأن الدالة UselessFunction لا تنتهي بقوسين (})، فإن مترجم PHP يستمر في البحث عن قوس الإغلاق حتى يصل إلى نهاية الملف. نظرًا لأن المترجم لم يعثر على قوس مطابق، فإنه يُبلغ عن خطأ في نهاية الملف.
إذا انعكس التسلسل الهرمي للتعليمات البرمجية بشكل صحيح، فستصبح رسائل الخطأ واضحة جدًا. إذا لم يتم تحديد البنية الهرمية للكود، فسيكون من المستحيل تقريبًا معرفة ما تم نسيانه في النهاية. لذا، تذكر، تأكد من الإشارة إلى التسلسل الهرمي للتعليمات البرمجية الخاصة بك. مفتاح Tab يجعل هذا الأمر سهلاً. سيكون من الأسهل أيضًا على المطورين اللاحقين فهم إطار عمل التعليمات البرمجية وتعديله.
أخطاء MySQL
هناك رسالة خطأ أخرى مزعجة للغاية وهي خطأ MySQL الأكثر شيوعًا، والذي غالبًا ما يسبب صداعًا لمستخدمي PHP الجدد: تحذير: الوسيطة المقدمة ليست مورد نتائج MySQL صالحًا في...
السطر الذي يحتوي على الخطأ المذكور أعلاه قد يكون:
while ($row = mysql_fetch_array($result)) {
المعلمة $result ليست موردًا صالحًا. باللغة الإنجليزية يعني ذلك أنه لا يمكن معالجة mysql_fetch_array بسبب فشل الاستعلام. بناء جملة أي من الاستعلامين غير صالح (يجب عليك نسخ الاستعلام ولصقه في مرجع وحدة تحكم MySQL للاختبار)، أو فشل الاتصال بقاعدة البيانات (وفي هذه الحالة يجب عليك التحقق مرة أخرى من اسم المستخدم وكلمة المرور وما إلى ذلك).
منع الأخطاء
كخطوة أولى، يمكن للمبرمجين الأذكياء اتخاذ الخطوات التالية لإزالة الأخطاء التالية:
· لا تفكر في إضافة فاصلة منقوطة في نهاية كل عبارة - فهذا يجب أن يصبح عادة.
· قم دائمًا بالإشارة إلى التسلسل الهرمي للتعليمات البرمجية الخاصة بك كلما أمكن ذلك، مما يتيح لك معرفة ما إذا كنت قد نسيت إضافة الأقواس في أماكن مثل المكالمات أو في نهاية الوظائف.
· الرجاء استخدام محرر مع تسليط الضوء على بناء الجملة (مثل HTML-Kit). بمساعدة هذا المحرر، يمكنك تحديد ما إذا كنت قد نسيت إضافة اقتباس، أو إذا كنت تفتقد فاصلة منقوطة، وما إلى ذلك.
الاستنتاج
في هذه المقالة، لدينا فهم معين لبعض الأخطاء التي تبدو بلا معنى والتي يمكن لمترجم PHP الإبلاغ عنها. وعلينا أن نطبق ما تعلمناه على كيفية تجنب الأخطاء وكيفية تصحيحها عند حدوثها. يعد تصحيح الأخطاء أحد أهم أجزاء عمل المطور. يمكن أن يؤدي تحسين كفاءة تصحيح الأخطاء إلى تسريع تقدم العمل بأكمله بشكل كبير وتقصير الوقت الذي يستغرقه إكمال المشروع، ويمكنه أيضًا تقليل الضغط العقلي الناجم عن فشل التعليمات البرمجية بشكل كبير.