أرسلت بواسطة ShiningRay في 3 أبريل 2006
إدوين مارتن < [email protected] >
الترجمة بواسطة: ShiningRay @ Nirvana Studio
لقد قمت بتطوير تطبيقات PHP على مدى السنوات الأربع الماضية. لغة PHP سهلة الكتابة حقًا. لكن PHP بها أيضًا بعض العيوب الخطيرة جدًا.
سأقدم أدناه الأسباب التي تجعل PHP غير مناسب لمواقع الويب الأكبر من مواقع الهواة الصغيرة.
1. ضعف دعم العودية العودية هي آلية للوظائف لتسمية نفسها. هذه ميزة قوية يمكنها تحويل شيء معقد إلى شيء بسيط للغاية. مثال على استخدام العودية هو الفرز السريع. لسوء الحظ، PHP ليست جيدة جدًا في التكرار. قال Zeev، أحد مطوري PHP: "يستخدم PHP 4.0 (Zend) أسلوب المكدس للبيانات الكثيفة بدلاً من أسلوب الكومة. وهذا يعني أن عدد الوظائف العودية التي يمكنه تحملها أقل محدودية بكثير من اللغات الأخرى." . وهذا عذر سيء للغاية. يجب أن توفر كل لغة برمجة دعمًا جيدًا للتكرار.
2. العديد من وحدات PHP ليست آمنة لسلاسل العمليات منذ بضع سنوات، أصدر Apache الإصدار 2.0 من خادم الويب. يدعم هذا الإصدار وضع الخيوط المتعددة، حيث يمكن لجزء واحد من البرنامج تشغيل أجزاء متعددة في نفس الوقت. يقول مخترع PHP أن جوهر PHP آمن لسلسلة العمليات، ولكن الوحدات غير الأساسية قد لا تكون كذلك. لكن تسع مرات من أصل عشرة، تريد استخدام هذه الوحدة في برنامج PHP النصي، ولكن هذا يجعل البرنامج النصي الخاص بك غير متوافق مع وضع Apache متعدد الخيوط. ولهذا السبب لا يوصي فريق PHP بتشغيل PHP في الوضع متعدد الخيوط في Apache 2. غالبًا ما يُشار إلى الدعم الضعيف للوضع متعدد الخيوط في PHP كأحد الأسباب وراء عدم شعبية Apache 2.
يرجى قراءة هذه المناقشة: Slashdot: المواقع التي ترفض Apache 2؟.
3. PHP معطلة لأسباب تجارية باستخدام التخزين المؤقت، يمكن زيادة أداء PHP بنسبة 500% [راجع المعيار]. فلماذا لا يتم تضمين التخزين المؤقت في PHP؟ نظرًا لأن Zend، الشركة المصنعة لـ PHP، تبيع Zend Accelerator الخاص بها، لذا فهي بالطبع لا تريد التخلص من منتجها التجاري.
ولكن هناك بديل آخر: APC (أطلقت Zend لاحقًا Zend Optimizer، وهو مسرع - مترجم مجاني)
4. لا توجد مساحة اسم تخيل أن شخصًا ما قام بإنشاء وحدة PHP لقراءة الملفات. إحدى الوظائف في الوحدة تسمى القراءة. ثم يمكن لوحدة شخص آخر قراءة صفحة الويب، والتي تحتوي أيضًا على وظيفة القراءة. إذن لا يمكننا استخدام هاتين الوحدتين في نفس الوقت، لأن PHP لا تعرف الوظيفة التي تريد استخدامها.
ولكن هناك حل بسيط للغاية، وهو مساحات الأسماء. اقترح أحدهم ذات مرة إضافة هذه الميزة إلى PHP5، لكنه للأسف لم يفعل ذلك. الآن، بدون مساحات الأسماء، يجب أن تكون كل وظيفة مسبوقة باسم الوحدة لتجنب تعارض الأسماء. وينتج عن ذلك أسماء وظائف طويلة جدًا، مثل xsl_xsltprocessor_transform_to_xml، مما يجعل من الصعب كتابة التعليمات البرمجية وفهمها.
5. أحرف تنسيق التاريخ غير القياسية يعرف العديد من المبرمجين أحرف تنسيق التاريخ، والتي تأتي من لغات UNIX وC. اعتمدت العديد من لغات البرمجة الأخرى هذا المعيار، ولكن الغريب أن PHP لديها مجموعتها الخاصة من أحرف تنسيق التاريخ غير المتوافقة تمامًا. في لغة C، يمثل "%j" اليوم من السنة، وفي PHP يمثل اليوم من الشهر. ومع ذلك، لجعل الأمور أكثر إرباكًا: تستخدم الدالة strftime ووظيفة date_format في Smarty (محرك قوالب PHP شائع) أحرف تنسيق C/UNIX.
6. الترخيص المربك قد تعتقد أن PHP مجاني، وكذلك جميع وحدات PHP المذكورة في الدليل. خطأ! على سبيل المثال، إذا كنت تريد إنشاء ملفات PDF بلغة PHP، فستجد وحدتين في الدليل: PDF وClibPDF. ولكن كلاهما مرخص تجاريا. لذلك، بالنسبة لكل وحدة تستخدمها، عليك التأكد من موافقتك على ترخيصها.
7. قواعد تسمية الوظائف غير متناسقة تتكون بعض أسماء الوظائف من كلمات متعددة. هناك بشكل عام ثلاث عادات لتركيبات الكلمات:
الربط المباشر: getnumberoffiles
افصل باستخدام الشرطة السفلية: get_number_of_files
قانون الجمل: getNumberOfFiles
بالنسبة لمعظم اللغات، اختر واحدة منها. ولكن يتم استخدام PHP.
على سبيل المثال، إذا كنت تريد تحويل بعض الأحرف الخاصة إلى كيانات HTML، فيمكنك استخدام الدالة htmlentities (ربط الكلمات مباشرة). إذا كنت تريد استخدام الوظيفة المعاكسة، فأنت بحاجة إلى استخدام أخيها الصغير html_entity_decode. لسبب خاص، يحتوي اسم الوظيفة هذا على كلمات مفصولة بشرطات سفلية. كيف يمكن أن يكون هذا؟ أنت تعلم أن هناك وظيفة تسمى strpad. أم أنه str_pad؟ في كل مرة يتعين عليك التحقق من الرمز أو مجرد انتظار حدوث خطأ. الوظائف غير حساسة لحالة الأحرف، لذلك بالنسبة لـ PHP لا يوجد فرق بين Rawurldecode وRawUrlDecode. وهذا أيضًا أمر سيئ لأنه يتم استخدام كليهما ويبدو شكلهما مختلفًا، مما يربك القارئ.
8. جحيم الاقتباسات السحرية يمكن للاقتباسات السحرية حماية نصوص PHP من هجمات حقن SQL. هذا جيد. ولكن لبعض الأسباب، يمكنك إيقاف تشغيل هذا التكوين في php.ini. لذلك، إذا كنت تريد كتابة برنامج نصي مرن، فأنت بحاجة دائمًا إلى التحقق مما إذا كانت المراجع السحرية قيد التشغيل أم لا. من المفترض أن تجعل مثل هذه "الميزة" البرمجة أسهل، ولكنها في الواقع تجعلها أكثر تعقيدًا.
9. عدم وجود إطار عمل قياسي إن موقع الويب المتنامي بدون إطار شامل سيصبح في النهاية كابوسًا للصيانة. يمكن للإطار أن يجعل العديد من المهام أسهل. نموذج إطار العمل الأكثر شيوعًا الآن هو نموذج MVC، حيث يتم فصل طبقة العرض التقديمي ومنطق الأعمال والوصول إلى قاعدة البيانات.
لا تستخدم العديد من مواقع PHP نموذج MVC. ليس لديهم حتى إطار. حتى الآن توجد بعض أطر عمل PHP ويمكنك كتابة واحدة بنفسك. المقالات والأدلة المتعلقة بـ PHP لا تحسن إطار العمل ولو كلمة واحدة. في حين أن مطوري JSP يستخدمون أطر عمل مثل Struts ومطوري ASP يستخدمون .Net، يبدو أن هذه المفاهيم مفهومة على نطاق واسع من قبل مطوري PHP. يوضح هذا مدى احترافية PHP.
تلخيص
ما هي المشكلة؟
بالنسبة للمشاريع الصغيرة جدًا، يمكن أن تكون لغة برمجة مرضية للغاية. لكن بالنسبة للمشاريع الأكبر والأكثر تعقيدًا، تظهر لغة PHP ضعفها. ومع استمرارك في الاستكشاف، ستجد حلولًا لبعض المشكلات التي ذكرتها. لذا، بمجرد معرفة الحل، لماذا لا يتم إصلاحه؟ ولماذا لم يتم ذكر هذه الإصلاحات في الدليل؟
من الجيد أن تحظى اللغة مفتوحة المصدر بشعبية كبيرة. لكن لسوء الحظ، إنها ليست لغة رائعة. آمل أن يتم حل جميع المشكلات يومًا ما (ربما في PHP6؟)، وبعد ذلك سيكون لدينا لغة مفتوحة المصدر تكون مفتوحة المصدر وسهلة الاستخدام.
الآن، عندما تريد بدء مشروع بأكثر من 5 صفحات نصية، فمن الأفضل أن تفكر في C#/ASP.Net أو Java/JSP أو ربما تكون Python خيارًا أفضل أيضًا.
مصدر هذه المقالة: http://workgroup.cn/CS/blogs/php/archive/2006/06/29/1354.aspx