مجموعة نصائح للمستجدين في PHP

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

ومع أن الوضع قد تحسن بشكل كبير مع الإصدارات الأخيرة منها، إلا أنها لم تنفض ذلك الغبار بشكل كامل، وذلك قد يؤدي إلى بعض المشاكل وحالات الارتباك خصوصاً مع المستجدين في التعامل مع هذه اللغة.

نقدم لكم هنا مجموعة نصائح قد توفر عليكم عناء ساعات من البحث عن حلول لمشاكل قد تكون أبسط مما تتوقعونها.

مجموعة نصائح للمستجدين في PHP

فعّل الإعلام بالأخطاء بأعلى مستوياته

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

لتفعيل الإعلام بالأخطاء بأعلى مستوى يمكنك ببساطة استخدام السطر التالي في بداية البرنامج:

error_reporting(E_ALL);

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

تعلم الفرق بين علامات التنصيص المفردة والمزدوجة (Single vs. Double Quotes)

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

علامات التنصيص المفردة (Single Quotes)

الطريقة الأبسط للتعامل مع السلاسل المحرفية (Strings) هي إدراجها بين علامتي تنصيص مفردتين ( المحرف ‘ ).

يمكن استخدام محرف Backslash (\) لتهريب علامة تنصيص مفردة ضمن النص، ولتهريب محرف Backslash تتم مضاعفته.

echo 'this is a simple string';

echo 'You can also have embedded newlines in
strings this way as it is
okay to do';

// Outputs: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';

// Outputs: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';

// Outputs: You deleted C:\*.*?
echo 'You deleted C:\*.*?';

// Outputs: This will not expand: \n a newline
echo 'This will not expand: \n a newline';

// Outputs: Variables do not $expand $either
echo 'Variables do not $expand $either';

علامات التنصيص المزدوجة (Double Quotes)

تستخدم بنفس الطريقة مع بعض الفروق. حيث تسمح بتمرير مجال أكبر من السلاسل محرفية، مثل السطر الجديد (n\) أو علامة الجدولة (t\) (القائمة الكاملة موجودة هنا).

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

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


echo "this is a simple string";

echo "You can also have embedded newlines in
strings this way as it is
okay to do";

// Outputs: Arnold once said: "I'll be back"
echo "Arnold once said: \"I'll be back\"";

// Outputs: This will expand:
// a newline
echo "This will expand: \n a newline";

// Outputs: Variables do expand too!
$expand = "expand too!";
echo "Variables do $expand";

استعمل علامات تنصيص لتحديد عناصر مصفوفة

عند التعامل مع المصفوفات في PHP، قد تمر بحالة مشابهة لما يلي:

echo $user[name];

ومع ان هذا السطر قد ينفذ بشكل صحيح، إلا أنه تقنياً خاطئ، والسبب في ذلك أنه عند تمرير دليل المصفوفة دون علامات تنصيص فإن محرك اللغة يعتبره ثابتاً (Constant) في البداية ويحاول البحث عن القيمة المعرفة له، وعند عدم إيجاده يقوم برده بشكله النصي مما قد يوهمك بأنه يعمل بشكل صحيح، لكن المشاكل تبدأ في حال قمت، أو قام أحد زملائك، بتعريف ثابت بهذا الاسم. تخيل ما قد يحدث.

كما أن هذه الطريقة تؤثر على الأداء بشكل ملحوظ نتيجة الحاجة للبحث عن قيمة ثابت ثم الاستعاضة عنها بالقيمة النصية، في حين أن محرك اللغة يستعمل القيمة النصية مباشرة عند وجود علامات التنصيص (يفضل أن تكون مفردة استناداً للنقطة السابقة) كما في في المثال التالي:


echo $user['name'];

لا تستعمل وسم البداية المختصر

في حال علمك أحد ما أن استعمال وسم البداية المختصر (?>) قد يسهل حياتك فتجاهل ذلك تماماً، إنها من الميزات القديمة التي أصبحت تولد مشاكل أكثر من حلول، حيث أنها تسبب تضارباً مع XML. وقد أدى ذلك لإلغاء هذه الميزة بشكل افتراضي، واستعمالك لها قد يزعج الكثيرين عند محاولتهم تشغيل نصك البرمجي على مخدماتهم.

كل ما عليك فعله هو استعمال وسم البداية الكامل (php?>).

لا تعتمد على register_globals و magic quotes

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

لا تستعمل التوابع ضمن الحلقات

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


// BAD
for ($i = 0; $i < count($array); $i++) {
//stuff
}

// GOOD
$count = count($array);
for($i = 0; $i < $count; $i++) {
//stuff
}

نصائح سريعة لزيادة الاحترافية

  • تعود أن تحدد قيمة ابتدائية لجميع المتحولات، فكما ذكرنا من سهولة PHP أنها لا تحاسبك على تعريف المتحولات، لكن ذلك قد يدخلك في مشاكل منطقية أنت بغنى عنها.
  • قم بإدراج معلومات عن نصك البرمجي بالتعليقات، قد يكون هذا متطلباً وظيفياً للعمل في بعض الشركات. ويمكنك أن تأخذ ذلك خطوة للأمام باستخدام محرك لتوليد ملفات الدعم من التعليقات الموجودة ضمن النص البرمجي مثل phpDocumentor.
  • استخدم مجموعة من القواعد لكتابة النصوص البرمجية وحافظ عليها ضمن فريقك، يمكنك أن تطورها بنفسك، أو أن تعتمد مجموعة قواعد جاهزة كالتي تقدمها PEAR أو Zend.
  • حاول أن تتعلم على المكتبات البرمجية الجاهزة مثل Zend Framework أو Symfony أو CakePHP، لا داعي لأن تعيد اختراع العجلة. ليس من الضروري أن تتقنها كلها، لكن شكل فكرة وافية عن كل منها وحاول أن تتبنى المكتبة المفضلة لديك لتستخدمها في مشاريعك.

كلمة أخيرة

عالم البرمجة محيط واسع، وخصوصاً في عالم الويب اليوم، وهذا ما يجعله ممتعاً (مع أنه قد يكون محبطاً أحياناً).

ابق نفسك على اطلاع بكل جديد عبر متابعة أهم المواقع التي تهتم بالموضوع مثل Smashing Magazine و NetTuts+ و Noupe.

من المؤسف طبعاً أن نرى النقص المخيف في المراجع العربية ذات النوعية الجيدة، لكن يمكنكم متابعتنا على أمل أن نكوّن معاً نواة التطوير العالي النوعية في العالم العربي.

هل لديكم أي نصائح أو مراجع أخرى؟ التعليقات مفتوحة لكم.

المصادر

محمود الدعاس

من مواليد دمشق. ابتدأ بعد التخرج كمبرمج ويب عام 2005 مع شركة إيميا، انتقل بعدها إلى شركة تكنوليد للأتمتة المتكاملة ومنها إلى شقيقتها أتمتة للحلول المتقدمة كمصمم غرافيك ومصمم ومطور ويب. أسس مع مجموعة من زملاء الدراسة موقع HOMELESS-PRO.com لنشر قصص مصورة باللغة العربية للشباب، و Guestra كوكالة تصميم وتطوير.

مواضيع الكاتبموقع الكاتب

لمتابعة الكاتب:
TwitterFacebookPinterest

3 thoughts on “مجموعة نصائح للمستجدين في PHP

  1. شكرا على هذه النصائح والتلميحات المهمة أخي محمود، ومعك حق فهناك شح كبير في المحتوى العربي بهذا الخصوص للأسف، لكن فلنتفاءل خيرا بمواقع قيمة من قبيل مدونتكم هذه..
    يبدو أنه وقع خطأ سهوا أخي محمود في هذا الموضوع، وبالضبط في الفقرة الخاصة بعلامات التنصيص المزدوجة (Double Quotes)، حيث تم كتابة سطر بعلامات تنصيص مفردة:
    // Outputs: This will expand:
    // a newline
    echo ‘This will expand: \n a newline’;
    أجدد شكري لك، ومع تحياتي الخالصة..

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *