كما ذكرنا من قبل، يدير PEAR قاعدة كود تطبيق PEAR وفقًا لفئات معينة. يمكن تنظيم كود PEAR الخاص بك في الدلائل المناسبة، ويمكن للأشخاص الآخرين استرداد نتائجك ومشاركتها بسهولة. PEAR ليس مجرد مستودع للأكواد، بل هو أيضًا معيار. سيؤدي استخدام هذا المعيار لكتابة كود PHP الخاص بك إلى تحسين إمكانية قراءة برنامجك وإعادة استخدامه وتقليل احتمالية حدوث أخطاء. يبني PEAR إطارًا لك من خلال توفير فئتين تنفذان وظائف مثل المدمرات واكتشاف الأخطاء. يمكنك استخدام هذه الوظائف من خلال الميراث.
تتضمن قواعد ترميز PEAR قواعد المسافة البادئة، وهياكل التحكم، واستدعاءات الوظائف، وتعريفات الوظائف، والتعليقات، والتعليمات البرمجية المضمنة، وعلامات PHP، وكتل تعليق رأس الملف، وعلامات CVS، وعينات URL، والتسمية الثابتة. وهنا مقدمة موجزة:
قواعد المسافة البادئة:
يتطلب PEAR 4 مسافات لوضع مسافة بادئة للكود، ولا يتم استخدام TAB. إذا كنت تستخدم VIM، فضع الإعدادات التالية في ~/.vimrc الخاص بك: اضبط توسيع علامة التبويب
تعيين عرض التحول = 4
تعيين علامة التبويب = 4
إذا كنت تستخدم Emacs/XEmacs، فستحتاج إلى ضبط وضع indent-tabs على القيمة 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);
تعريف الوظيفة:
يتبع تعريف الدالة اصطلاح "قوس حقيقي واحد": functionconnect(&$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 الخاص بك في جميع الأوقات، بدلاً من مجرد استخدامه، مما يضمن توافق 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] حتى نتمكن من إرسال نسخة إليك عبر البريد على الفور |
// +---------------------------------------------- --- -----------------------+
// |. المؤلفون: المؤلف الأصلي |
// |. اسمك |
// +---------------------------------------------- --- -----------------------+
//
// $المعرف$
بالنسبة للملفات غير الموجودة في قاعدة التعليمات البرمجية الأساسية لـ 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 الذي يمكننا إلقاء نظرة عليه كود مصدر الكمثرى: الدالة PEAR() {
إذا (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 وإعادته. فيما يلي مثال بسيط: الدالة 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()."n"
}
كما هو موضح في الكود أعلاه، بعد تنفيذ جزء من التعليمات البرمجية الذي قد ينتج عنه خطأ، تحتاج إلى استخدام isError الخاص بـ PEAR لاكتشاف ما إذا كان هناك خطأ، ويمكنك استخدام getMessage الخاص بـ PEAR_Error للحصول على أحدث رسالة خطأ.
و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 مباشرةً. userinfo );
$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 العديد من وحدات التطبيق الممتازة، مثل: PHPDoc وCache وHTML.