ما هو PEAR؟
PEAR هو اختصار لملحق PHP ومستودع التطبيقات. إنه مستودع رموز لملحقات وتطبيقات PHP. ببساطة، PEAR هو CPAN الخاص بـ PHP.
لماذا استخدام الكمثرى؟
PHP هي لغة برمجة نصية ممتازة جدًا وموجزة وفعالة. مع إصدار 4.0، يستخدمها المزيد والمزيد من الأشخاص لتطوير مواقع الويب الديناميكية. ويمكن القول أن PHP أصبحت واحدة من أفضل لغات تطوير الإنترنت، وخاصة لغة PHP اللغة المفضلة لمطوري مواقع الويب الذين يحتاجون إلى أن يكونوا قادرين على تطوير تطبيقات الأعمال الصغيرة والمتوسطة الحجم بسرعة وكفاءة. ومع ذلك، مع العدد المتزايد من تطبيقات PHP، هناك نقص في المعايير الموحدة والإدارة الفعالة لهذه التطبيقات. لذلك، من الصعب على مجتمع PHP مشاركة رموز وتطبيقات بعضهم البعض بشكل ملائم مثل الأشخاص في مجتمع PERL، لأنه تفتقر PHP إلى نفس معايير CPAN، وهي قاعدة تعليمات برمجية موحدة لتصنيف وحدات تعليمات برمجية التطبيق وإدارتها (أي شخص مطلع على PERL يعرف أن CPAN عبارة عن مستودع ضخم لوحدات امتداد PERL. يمكن وضع وحدات التطبيق المكتوبة ضمن دليل التصنيف المناسب ضمن CPAN، ويمكن للأشخاص الآخرين إعادة استخدامها بسهولة. بالطبع، تحتاج أيضًا إلى اتباع الإرشادات عند كتابة وحدات التطبيق.)
لهذا السبب، ظهر PEAR وتم توزيعه باستخدام PHP الأساسي بدءًا من 4.04.
ما هي الفوائد التي يمكن أن تجلبها لي الكمثرى؟
1. كما هو مذكور أعلاه، يدير PEAR قاعدة كود تطبيق PEAR وفقًا لفئات معينة. يمكن تنظيم كود PEAR الخاص بك في الدلائل المناسبة، ويمكن للأشخاص الآخرين استرداد نتائجك ومشاركتها بسهولة.
2. PEAR ليس مجرد مستودع للأكواد، بل هو أيضًا معيار. سيؤدي استخدام هذا المعيار لكتابة كود PHP الخاص بك إلى تحسين إمكانية قراءة برنامجك وإعادة استخدامه وتقليل احتمالية حدوث أخطاء.
3. يبني PEAR إطارًا لك من خلال توفير فئتين لتنفيذ وظائف مثل المدمرات واكتشاف الأخطاء. يمكنك استخدام هذه الوظائف من خلال الميراث.
قواعد ترميز PEAR
تتضمن قواعد ترميز PEAR قواعد المسافة البادئة، وهياكل التحكم، واستدعاءات الوظائف، وتعريفات الوظائف، والتعليقات، والتعليمات البرمجية المضمنة، وعلامات PHP، وكتل تعليق رأس الملف، وعلامات CVS، وعينات URL، وتسمية الثوابت. فيما يلي مقدمة مختصرة:
قواعد المسافة البادئة:
يتطلب PEAR 4 مسافات لوضع مسافة بادئة للكود، ولا يتم استخدام TAB. إذا كنت تستخدم VIM، فضع الإعدادات التالية في ~/.vimrc الخاص بك: اضبط توسيع علامة التبويب
تعيين عرض التحول = 4
set tabstop=4
إذا كنت تستخدم Emacs/XEmacs، فستحتاج إلى ضبط indent-tabs-mode على nil.
ولكن إذا كنت ترغب في استخدام (X)Emacs لتحرير ملفات PHP مثلي، فإنني أوصيك بشدة بتثبيت PHP-MODE بحيث أنه عندما تكتب كود PEAR، فإنه سيقوم تلقائيًا بضبط نمط المسافة البادئة لديك. بالطبع، هناك العديد من PHP-. الوضع ميزة جيدة جدًا، يمكنك تنزيل أحدث إصدار من PHP-MODE من قائمة الموارد.
هيكل التحكم:
تتضمن هياكل التحكم المذكورة هنا: if for while Switch، وما إلى ذلك. بالنسبة لهياكل التحكم، يجب أن تكون هناك مسافة بعد الكلمة الأساسية (مثل if for ..) ثم أقواس التحكم، بحيث لا يتم الخلط بينها وبين استدعاءات الوظائف، بالإضافة إلى ذلك، يجب أن تحاول استخدام الأقواس المتعرجة {}. على أكمل وجه ممكن، حتى لو كان اختياريًا من الناحية النحوية. سيؤدي هذا إلى منع حدوث أي ارتباك منطقي أو أخطاء عندما تحتاج إلى إضافة أسطر جديدة من التعليمات البرمجية في المستقبل. إليك مثال: إذا ((الشرط1) && (الشرط2)) {
البيان 1؛
}esleif ((الشرط 3) || (الشرط 4)) {
البيان 2؛
}آخر {
البيان 3؛
}
استدعاء الوظيفة:
بالنسبة لاستدعاءات الوظائف، يجب ألا تكون هناك مسافة بين اسم الوظيفة وقوس الفتح ( ()، وبالنسبة لمعلمات الوظيفة، يجب أن يكون هناك نفس المسافة الفاصلة بين الفاصلة المحددة والمعلمة التالية، ويجب ألا تكون هناك مسافة بين الأخير المعلمة وقوس الإغلاق يوجد أدناه استدعاء دالة قياسي $result = foo($param1, $param2, $param3);
الكتابة غير المنتظمة:
$result=foo ($param1,$param2,$param3);
$result=foo( $param1,$param2, $param3 );
بالإضافة إلى ذلك، إذا كنت تريد تعيين نتيجة الإرجاع للدالة، فيجب أن تكون هناك مسافة بين علامة المساواة والمتغير المعين. وفي الوقت نفسه، إذا كانت سلسلة من عبارات التعيين ذات الصلة، فيمكنك إضافة مسافات مناسبة للمحاذاة لهم، مثل هذا :$result1 = $foo($param1, $param2, $param3);
$var2 = $foo($param3);
$var3 = $foo($param4, $param5);
تعريف الوظيفة:
يتبع تعريف الدالة اصطلاح "قوس واحد حقيقي": function Connect(&$dsn, $persistent = false)
{
إذا (is_array($dsn)) {
$dsninfo = &&dsn;
} آخر {
$dsninfo = DB::parseDSN($dsn);
}
إذا (!$dsninfo || !$dsninfo['phptype']) {
إرجاع $this->raiseError();
}
عودة صحيحة؛
}
كما هو موضح أعلاه، يجب أن تكون المعلمات الاختيارية في نهاية قائمة المعلمات، وتحاول دائمًا إرجاع قيم دالة ذات معنى.
بخصوص التعليقات:
بالنسبة لتوثيق الفئات عبر الإنترنت، يجب أن يكون من الممكن تحويلها بواسطة PHPDoc، تمامًا مثل JavaDoc. PHPDoc هو أيضًا تطبيق PEAR للحصول على مقدمة أكثر تفصيلاً، يمكنك الذهاب إلى http://www.phpdoc.de/ لمشاهدته. بالإضافة إلى التوثيق عبر الإنترنت للفصول الدراسية، يوصى باستخدام التعليقات غير الموثقة لشرح التعليمات البرمجية الخاصة بك. عندما ترى جزءًا من التعليمات البرمجية، تعتقد: أوه، لا أعتقد أنك بحاجة إلى وصفه بعناية في الوثائق . فمن الأفضل أن تعطي هذا الرمز تعليقًا بسيطًا حتى لا تنسى كيفية عمله. بالنسبة لنماذج التعليقات، يعد كل من /* */ و// من لغة C أمرًا جيدًا، ومع ذلك، لا تستخدم طريقة التعليق الخاصة بـ Perl أو Shell.
يحتوي على الكود:
عندما تحتاج إلى تضمين ملف فئة بشكل غير مشروط، يجب عليك استخدام require_once؛ وعندما تحتاج إلى تضمين ملف فئة بشكل مشروط، يجب عليك استخدام include_once؛ وهذا يضمن أن الملف الذي تريد تضمينه سيتم تضمينه مرة واحدة فقط، وكلا العبارتين مشاركة نفس قائمة الملفات، لذلك لا داعي للقلق بشأن الخلط بين الاثنين. بمجرد أن يتضمن require_once ملفًا، لن يتضمن include_once نفس الملف مرة أخرى، والعكس صحيح.
ترميز كود PHP:
استخدم دائمًا <?php ?> لتعريف كود php الخاص بك بدلاً من استخدام <?> ببساطة. وهذا يضمن توافق PEAR ويسهل النقل عبر الأنظمة الأساسية.
إعلان التعليق في رأس الملف:
بالنسبة لجميع ملفات تعليمات PHP البرمجية التي يلزم تضمينها في الإصدار الأساسي لـ PEAR، يجب عليك إضافة عبارة التعليق التالية في بداية الملف: /* vim: set exploretab tabstop=4 Shiftwidth=4: */
// +---------------------------------------------- --- -----------------------+
// |. PHP الإصدار 4.0 |
// +---------------------------------------------- --- -----------------------+
// |. حقوق النشر (ج) 1997، 1998، 1999، 2000، 2001 مجموعة PHP |
// +---------------------------------------------- --- -----------------------+
// |. يخضع هذا الملف المصدر للإصدار 2.0 من ترخيص PHP، |
// |.المضمن مع هذه الحزمة في ملف LICENSE، وهو |
// | متاح على شبكة الإنترنت العالمية على |
// | http://www.php.net/license/2_02.txt
// |. إذا لم تستلم نسخة من ترخيص PHP ولم تتمكن من |
// |. احصل عليه من خلال شبكة الإنترنت العالمية، يرجى إرسال ملاحظة إلى |
// |. [email protected] حتى نتمكن من إرسال نسخة إليك عبر البريد على الفور |
// +---------------------------------------------- --- -----------------------+
// |. المؤلفون: المؤلف الأصلي |
// |. اسمك |
// +---------------------------------------------- --- -----------------------+
//
// $Id$
بالنسبة للملفات غير الموجودة في قاعدة كود PEAR الأساسية، فمن المستحسن أن يكون لديك أيضًا كتلة تعليق مماثلة في بداية الملف، تشير إلى حقوق الطبع والنشر والاتفاقية والمؤلف وما إلى ذلك. في الوقت نفسه، أضف MODELINE الخاص بـ VIM في السطر الأول، بحيث يمكن الحفاظ على نمط كود PEAR في VIM.
ترميز CVS:
كما هو موضح أعلاه، قم بإضافة علامة معرف CVS إلى كل ملف إذا كان الملف الذي تقوم بتحريره أو تعديله لا يحتوي على هذه العلامة، فيرجى إضافتها أو استبدالها بتعبير مماثل في الملف الأصلي (مثل "آخر تعديل" وما إلى ذلك). )
نموذج عنوان URL:
يمكنك اتباع RFC 2606 واستخدام " www.example.com " كأمثلة على عناوين URL.
التسمية الثابتة:
ينبغي كتابة الثوابت بأحرف كبيرة عندما يكون ذلك ممكنًا، ولتسهيل فهمها، استخدم الشرطة السفلية للفصل بين كل كلمة. وفي الوقت نفسه، يجب عليك وضع بادئة لاسم الحزمة أو اسم الفئة حيث يوجد الثابت. على سبيل المثال، يجب أن تبدأ الثوابت في فئة Bug بـ Bug_. ما ورد أعلاه هو قواعد ترميز PEAR. للحصول على قواعد ترميز تفصيلية، يرجى الرجوع إلى وصف ملف CODING_STANDDARD في PEAR. لفهم قواعد الترميز هذه بشكل أفضل، يمكنك أيضًا الرجوع إلى كود وحدة PEAR الأساسية الموجودة.
ابدأ مع الكمثرى
كُمَّثرَى
يعد استخدام PEAR أمرًا بسيطًا للغاية، ما عليك سوى تحديد برنامج PEAR الخاص بك مثل هذا: require_once "PEAR.php";
فئة your_class_name تمتد الكمثرى {
تعريف الصف الخاص بك...
}
بالطبع، تحتاج إلى الالتزام بقواعد ترميز PEAR المذكورة أعلاه، وبعد ذلك يمكنك تنفيذ ما تريد القيام به داخل فصلك. بعد ذلك، دعونا نناقش الأمر في الواقع، توفر لنا PEAR فئتين محددتين مسبقًا: PEAR: هذه هي الفئة الأساسية لـ PEAR، ويجب أن ترثها جميع امتدادات PEAR وتشتق منها. PEAR_Error: فئة معالجة الأخطاء الأساسية لـ PEAR، يمكنك اختيار اشتقاق فئة معالجة الأخطاء الخاصة بك.
بشكل عام، لا ينبغي عليك إنشاء مثيل PEAR مباشرة، ولكن اشتق فئة جديدة بنفسك ثم قم بإنشاء مثيل لهذه الفئة الجديدة. كفئة أساسية، توفر لنا PEAR بعض الوظائف المفيدة، وأهمها المدمرات
ومدمرات معالجة الأخطاء.
تدعم PHP المنشئات، ولكنها لا تدعم المدمرات، ومع ذلك، توفر PHP وظيفة Register_shutdown_function()، والتي يمكنها إعادة استدعاء الوظيفة المسجلة قبل انتهاء البرنامج النصي، لذلك، يستخدم PEAR هذه الميزة لتوفير محاكاة للمدمر. إذا كان لديك فئة فرعية من PEAR تسمى mypear، فيمكنك في فئة mypear تحديد وظيفة. اسم الوظيفة هو الشرطة السفلية بالإضافة إلى اسم الفئة الخاصة بك، _mypear(). ومع ذلك، فإن هذا المدمر يختلف عن المدمر في C++، ولن يتم تنفيذه عند حذف الكائن، ولكن بعد كل شيء، هذه مجرد محاكاة. نظرًا لاستخدام Register_shutdown_function()، فلن يتم إرجاع المعلومات المطبوعة إلى المتصفح في جهاز التدمير الخاص بك. بالإضافة إلى ذلك، في المنشئ الخاص بك، تحتاج إلى استدعاء مُنشئ الفئة الأصلية، لأن PHP لن تستدعي مُنشئ الفئة الأصلية تلقائيًا، ويجب تسجيل المدمر في مُنشئ PEAR الذي يمكننا إلقاء نظرة عليه الكمثرى كود المصدر: <code>
وظيفة الكمثرى () {
إذا (method_exists($this, "_".get_class($this))) {
$_PEAR_destructor_object_list العالمية؛
$_PEAR_destructor_object_list[] = &this;
}
إذا ($هذا->_debug) {
printf("تم استدعاء مُنشئ PEAR، الفئة=%sn"،
get_class($this));
}
.....
وظيفة _PEAR_call_destructors() {
$_PEAR_destructor_object_list العالمية؛
إذا (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) {
إعادة تعيين($_PEAR_destructor_object_list);
بينما (list($k, $objref) = every($_PEAR_destructor_object_list)) {
$destructor = "_".get_class($objref);
إذا (method_exists($objref, $destructor)) {
$objref->$destructor();
}
}
// امسح قائمة الكائنات المسجلة،
// منع المكالمات المتكررة
$_PEAR_destructor_object_list = array();
}
}
....
Register_shutdown_function("_PEAR_call_destructors");
</كود>
يوضح الكود أعلاه كيفية تنفيذ PEAR للمدمر في وظيفة المكون، وسوف يتحقق مما إذا كان هناك مدمر في الفئة الحالية. إذا كان الأمر كذلك، فسيتم وضع مرجع الفئة الحالية في قائمة عامة، في _ In PEAR_call_destructors. وتحقق مما إذا كان كل عنصر في القائمة العامة يحتوي على أداة تدمير مقابلة، إذا كان الأمر كذلك، فاتصل به، وأخيرًا امسح القائمة العامة.
في السطر الأخير من التعليمات البرمجية في PEAR.php، قم باستدعاء Register_shutdown_function("_PEAR_call_destructors") لتسجيل _PEAR_call_destructors، بحيث أنه عند تنفيذ البرنامج النصي، ستقوم PHP باستدعاء هذه الوظيفة مرة أخرى. باستخدام أداة التدمير، يمكنك القيام ببعض أعمال "الرعاية اللاحقة" الضرورية قبل الخروج بعد معالجة طلب المستخدم، ومن الأمثلة النموذجية أنه يمكنك إغلاق الملفات المفتوحة، وقطع الاتصال بقاعدة البيانات، وتخزين بيانات معينة على القرص وما إلى ذلك.
معالجة الأخطاء
يسمح لك PEAR بمعالجة الأخطاء بعدة طرق. لا يقتصر الأمر على إرجاع رمز خطأ أو معلومات خطأ فحسب، بل يمكنك أيضًا إرجاع كائن PEAR_Error أو كائن خطأ جديد مشتق من PEAR_Error.
لا يحد كائن الخطأ في PEAR من نموذج الإخراج المحدد، بل يمكنه فقط التقاط الخطأ دون إرجاع الكثير من المعلومات إلى المستخدم، أو يمكنه إعادة استدعاء وظيفة خاصة لمعالجة الأخطاء في نفس الوقت، حتى لو قام بإخراج معلومات الخطأ قد تضطر أيضًا إلى استخدام تنسيق HTML. يمكنك إخراج تنسيق XML أو CSV أو التنسيقات الأخرى التي تحددها بنفسك، ما عليك سوى اشتقاق فئة جديدة من PEAR_Error، ثم إنشاء هذه الفئة الجديدة و"رميها". الوقت المناسب عليه.
معالجة الأخطاء البسيطة:
في PEAR، أبسط معالجة للخطأ هي "رمي" الخطأ، ما عليك سوى إنشاء كائن PEAR_Error وإعادته. إليك مثال بسيط: <code>
الدالة myconnect($host = "localhost"، $port = 1080)
{
$fp = fsockopen($host, $port, $errno, $errstr);
إذا (!is_resource($fp)) {
إرجاع PEAR_Error جديد($errstr, $errno);
}
إرجاع $FP؛
}
$sock = myconnect();
إذا (الكمثرى::isError($sock)) {
طباعة "خطأ في الاتصال: ".$sock->getMessage()."<BR>n"
}
</code>
كما هو موضح في الكود أعلاه، بعد تنفيذ جزء من التعليمات البرمجية الذي قد ينتج عنه خطأ، تحتاج إلى استخدام isError الخاص بـ PEAR لاكتشاف ما إذا كان هناك خطأ، ويمكنك استخدام getMessage الخاص بـ PEAR_Error للحصول على أحدث رسالة خطأ.
ملاحظة: تأكد من استخدام PEAR::isErrorوriseError
في الأماكن الرئيسية.
بعد PHP4.0.5، أصبح لدى PEAR وظيفتان إضافيتان:
setErrorHandling($mode, $options = null)
riseError($message = null, $code = null, $mode = null,$options = null, $userinfo = null)
يمكن للأول تعيين وضع معالجة الأخطاء الافتراضي لـ PEAR، والأخيرة عبارة عن دالة مجمعة تُرجع كائن PEAR_Error ، وهو يختلف قليلاً عن إنشاء كائن PEAR_Error وإرجاعه مباشرةً. إذا حذفت معلمات مثل $mode و$options، فسوف تستخدم القيم الافتراضية لإنشاء كائن PEAR_Error. يمكنك استخدام setErrorHandling() لتخصيص هذه القيم الافتراضية. .
PEAR_Error
PEAR_Error هي فئة أساسية لكائن خطأ PEAR، على عكس PEAR، بشكل عام، يمكنك إنشاء مثيل PEAR_Error مباشرةً. );
$message هي رسالة الخطأ الخاصة بك، و$code هو رقم الخطأ، والمعلمات الثلاثة الأخيرة مرتبطة ارتباطًا وثيقًا:
الوضع $: هو وضع معالجة الأخطاء، والذي يمكن أن يكون الثوابت التالية:
PEAR_ERROR_RETURN: إرجاع كائن الخطأ فقط (الوضع الافتراضي)
PEAR_ERROR_PRINT: اطبع رسالة الخطأ هذه في وظيفة الإنشاء، لكن البرنامج الحالي سيستمر في التشغيل.
PEAR_ERROR_TRIGGER: استخدم ``'''''''''''''' في PHP لإثارة خطأ. إذا قمت بإعداد وظيفة معالجة الأخطاء، أو قمت بتعيين مستوى معالجة الأخطاء في PHP إلى E_USER_ERROR، فسيتم إنهاء البرنامج الحالي.
PEAR_ERROR_DIE: قم بطباعة الخطأ والخروج، وينتهي البرنامج.
PEAR_ERROR_CALLBACK: استخدم وظيفة أو أسلوب رد اتصال لمعالجة الخطأ الحالي وإنهاء البرنامج.
$options: تعمل هذه المعلمة فقط عندما يكون $mode هو PEAR_ERROR_TRIGGER وPEAR_ERROR_CALLBACK إذا كان PEAR_ERROR_TRIGGER، فيجب أن تكون $options أحد الثوابت الثلاثة E_USER_NOTICE أو E_USER_WARNING أو E_USER_ERROR، وهو ما يتوافق مع قيمة المشغل_خطأ في PHP. إذا كان $mode هو PEAR_ERROR_CALLBACK، فيمكن أن تكون $options عبارة عن سلسلة تحتوي على اسم الوظيفة التي سيتم استدعاؤها مرة أخرى، أو مصفوفة من عنصرين، على التوالي، متغير كائن وسلسلة (تشير إلى الطريقة التي سيتم استدعاؤها).
$userinfo: يخزن معلومات إضافية للمستخدم، ويمكنك وضع معلومات تصحيح الأخطاء ذات الصلة هنا.
هناك بعض الطرق شائعة الاستخدام في PEAR_Error، والتي لم يتم وصفها في وثائق PHP وهي مدرجة هنا:
int getMode: يُرجع وضع معالجة الأخطاء الحالي، عددًا صحيحًا.
سلسلة getMessage: إرجاع رسالة الخطأ الكاملة الحالية، string.
getCallback المختلط: يقوم بإرجاع معلومات رد الاتصال الحالية، والتي قد تكون اسم الوظيفة التي يتم استدعاؤها مرة أخرى، أو مجموعة من (الكائنات، الأساليب).
int getCode: إرجاع رمز خطأ عدد صحيح.
سلسلة getType: تُرجع النوع الخاطئ، وهو اسم الفئة الحالية، string.
سلسلة getUserInfo: إرجاع معلومات المستخدم الإضافية، سلسلة.
سلسلة getDebugInfo: المحتوى هو نفسه كما هو مذكور أعلاه.
سلسلة إلى سلسلة: إرجاع وصف سلسلة تفصيلي للكائن الحالي، بما في ذلك وضع معالجة الأخطاء والمستوى ومعلومات الخطأ ورمز الخطأ ووظائف رد الاتصال ذات الصلة وما إلى ذلك.
باختصار
، انتهت مقدمة PEAR. باختصار، إذا كنت تريد إنشاء تطبيق ملحق PEAR، فأنت بحاجة إلى القيام بذلك:
require_once "PEAR.php"
استخدم الفئة your_pear_extend Extends PEAR{} لتحديد فئتك الجديدة.
في مُنشئ الفصل الخاص بك، اتصل بمنشئ الفصل الأصلي PEAR: function your_pear_extend{
$this->PEAR();
...
}
إذا لزم الأمر، قم بتعريف أداة التدمير الخاصة بك _your_pear_extend
إذا لزم الأمر، قم باشتقاق فئة معالجة الأخطاء الخاصة بك من PEAR_Error لتعيين وضع معالجة الأخطاء الخاص بك وإطلاق الأخطاء عندما يكون ذلك مناسبًا.
بعد تنفيذ التعليمات البرمجية التي قد تؤدي إلى حدوث أخطاء، استخدم PEAR::isError($obj) لالتقاط الأخطاء المقابلة.
تنفيذ الوظائف الخاصة بك.
في أحدث إصدار أساسي من PEAR لـ PHP4.05، يوجد بالفعل العديد من وحدات التطبيق الممتازة، مثل: PHPDoc، وCache، وHTML... بالطبع، بالمقارنة مع CPAN، فإن PEAR بدأت للتو وتحتاج إلى أشخاص من مجتمع PHP. ومن خلال جهودنا المشتركة لتحسينها وتعزيزها، ستصبح PHP أكثر قوة.
المواد المرجعية
صفحة Pear الرئيسية
صفحة PHP الرئيسية
صفحة PHPDoc الرئيسية، والتي يمكنها إنشاء مستندات API تشبه JAVADOC من الكود المصدري لتطبيق PEAR الخاص بك،
PHP-Mode لـ XEmacs/Emacs، توفر دعمًا لبناء جملة php لـ emacs/xemacs، ويمكن أن تدعم بشكل جيد صفحة Vim الرئيسية لنمط كود الكمثرى
. محرر جيد جدًا ويدعم لغة PHP بشكل جيد
عن المؤلف
بان فان (الإبحار الليلي): مهندس في شركة Beijing Saadi Data Co., Ltd. تعمل بشكل رئيسي في تحليل البيانات وتحويلها، بالإضافة إلى أعمال التطوير ذات الصلة. جيد في استخدام VB، PERL، PHP للتطوير والعمل باللغة الصينية على Linux. اهتماماتي الأخيرة هي تطبيق Perl وPhp وXML ونموذج تطوير MVC الخاص بـ PHP واستخدام PERL-GTK. يمكنكم التواصل معه عبر البريد الإلكتروني:[email protected].