الفرق بين المراجعتين لصفحة: «PHP/Topics»

من موسوعة حسوب
< PHP
ط استبدال النص - 'PHP/Errors/php7' ب'PHP/errors'
طلا ملخص تعديل
 
(86 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
== الضبط ==
== [[PHP/configuration|ضبط لغة PHP]] ==
كيفية ضبط لغة PHP عبر مختلف أنواع ملفات الضبط، وطرائق تعديلها.


=== [[PHP/configuration|ملف الإعدادات]] ===
== [[PHP/basic syntax|بنية لغة PHP]] ==
ملف الإعدادات php.ini يحتوي على ضبط لغة PHP، وسيُقرأ عندما تبدأ اللغة بالعمل، وهو موجود في مواضع مختلفة (حسب طريقة استخدام PHP، ونظام التشغيل).
 
=== [[PHP/configuration-per-user|ملفات ‎‎.user.ini]] ===
أصبحت PHP منذ الإصدار 5.3.0 تدعم ملفات INI للإعدادات ولكل مجلد على حدة.
 
=== [[PHP/configuration-modes|أين يمكن تعيين الإعدادات]] ===
تعيّن بعض الإعدادات ضمن شيفرة PHP باستخدام الدالة <code>ini_set()‎</code> في حين يتطلب تعيين إعدادات أخرى استخدام ملف <code>php.ini</code> أو <code>httpd.conf</code>. هذه الصفحة تشرح مكان تعيين كل تعليمة ضبط.
 
=== [[PHP/configuration|كيف تغير إعدادات الضبط]] ===
طرائق تعديل إعدادات الضبط، سواءً كانت PHP تعمل كوحدة Apache، أو عبر سجلات نظام ويندوز.
 
== [[PHP/basic syntax|بنية اللغة]] ==
تبيان أنواع وسوم لغة PHP، وطريقة دمجها مع HTML، وشرح بعض خصائصها البنيوية (ومن بينها التعليقات).
تبيان أنواع وسوم لغة PHP، وطريقة دمجها مع HTML، وشرح بعض خصائصها البنيوية (ومن بينها التعليقات).


== [[PHP/Types|أنواع البيانات]] ==
== [[PHP/Types|أنواع البيانات في لغة PHP]] ==
لا يعيّن المبرمج نوع المتغير عادةً، بل تُعيِّنُه لغة PHP أثناء التنفيذ بالاعتماد على محتوى المتغير المستخدم.
لا يعيّن المبرمج نوع المتغير عادةً، بل تُعيِّنُه لغة PHP أثناء التنفيذ بالاعتماد على محتوى المتغير المستخدم.


=== [[PHP/Types/boolean|القيم المنطقية (boolean)]] ===
=== [[PHP/boolean|القيم المنطقية (boolean)]] ===
القيم المنطقية (boolean) من أبسط الأنواع، فالتعبير المنطقي يُعبِّر عن صحّة تعبيرٍ ما، فإما أن تكون قيمة التعبير صحيحةً <code>TRUE</code> أو خطأً <code>FALSE</code>.
القيم المنطقية (boolean) من أبسط الأنواع، فالتعبير المنطقي يُعبِّر عن صحّة تعبيرٍ ما، فإما أن تكون قيمة التعبير صحيحةً <code>TRUE</code> أو خطأً <code>FALSE</code>.


=== [[PHP/Types/integer|الأعداد الصحيحة (integer)]] ===
=== [[PHP/integer|الأعداد الصحيحة (integer)]] ===
العدد الصحيح هو عدد من المجموعة ℤ = {…, -2, -1, 0, 1, 2, …}‎‎.
العدد الصحيح هو عدد من المجموعة ℤ = {…, -2, -1, 0, 1, 2, …}‎‎.


=== [[PHP/Types/float|الأعداد العشرية (float)]] ===
=== [[PHP/float|الأعداد العشرية (float)]] ===
الأعداد العشرية (تعرف أيضا بالأعداد الحقيقة real number أو doubles أو float) هي الأعداد التي تملك قسمًا عشريًا إضافةً إلى القسم الصحيح.
الأعداد العشرية (تعرف أيضا بالأعداد الحقيقة real number أو doubles أو float) هي الأعداد التي تملك قسمًا عشريًا إضافةً إلى القسم الصحيح.


=== [[PHP/Types/string|السلاسل النصية (string)]] ===
=== [[PHP/string|السلاسل النصية (string)]] ===
السلسلة النصية هي سلسلة من الأحرف، إذ يكون كل حرف ممثلًا ببايت.
السلسلة النصية هي سلسلة من الأحرف، إذ يكون كل حرف ممثلًا ببايت.


=== [[PHP/Types/array|المصفوفات (array)]] ===
=== [[PHP/array|المصفوفات (array)]] ===
المصفوفة في PHP هي خريطة (map) مرتّبة، والخريطة هي نوع ترتبط فيه القيم مع المفاتيح.
المصفوفة في PHP هي خريطة (map) مرتّبة، والخريطة هي نوع ترتبط فيه القيم مع المفاتيح.


=== [[PHP/Types/object|الكائنات (object)]] ===
=== [[PHP/object|الكائنات (object)]] ===
تُنشَأ الكائنات في PHP بتهيئة صنف (class).
تُنشَأ الكائنات في PHP بتهيئة صنف (class).


=== [[PHP/Types/callable|ردود النداء (callables)]] ===
=== [[PHP/callable|ردود النداء (callables)]] ===
يمكن أن الإشارة إلى رد النداء (Callbacks) باستخدام نوع البيانات (callable) منذ إصدار PHP 5.4، وهي الدوال التي تستدعيها دوال أخرى لإجراء عمليات.
يمكن أن الإشارة إلى رد النداء (Callbacks) باستخدام نوع البيانات (callable) منذ إصدار PHP 5.4، وهي الدوال التي تستدعيها دوال أخرى لإجراء عمليات.


=== [[PHP/Types/iterable|المتغيرات التكرارية (iterables)]] ===
=== [[PHP/iterable|المتغيرات التكرارية (iterables)]] ===
إن المتغير التكراري Iterable هو شبه نوع (نوع زائف، pseudo-type) عُرِّفَ في الإصدار 7.1 من PHP وهو يقبل أية مصفوفة أو كائن يستخدم واجهة <code>Traversable</code> (أي Traversable interface)، كلا النوعين يمكن تكراره باستخدام حلقة <code>[[PHP/foreach|foreach]]</code> ويمكن أن يُستخدم مع تعبير yield داخل <nowiki/>[[PHP/Generators|دالة مولِّدة]] (generator).
إن المتغير التكراري Iterable هو شبه نوع (نوع زائف، pseudo-type) عُرِّفَ في الإصدار 7.1 من PHP وهو يقبل أية مصفوفة أو كائن يستخدم واجهة <code>Traversable</code> (أي Traversable interface)، كلا النوعين يمكن تكراره باستخدام حلقة <code>[[PHP/foreach|foreach]]</code> ويمكن أن يُستخدم مع تعبير yield داخل <nowiki/>[[PHP/generators|دالة مولِّدة]] (generator).


=== [[PHP/Types/resource|الموارد (resources)]] ===
=== [[PHP/resource|الموارد (resources)]] ===
المورد هو متغير خاص يحمل مرجعيةً إلى مورد خارجي.
المورد هو متغير خاص يحمل مرجعيةً إلى مورد خارجي.


=== [[PHP/Types/null|NULL]] ===
=== [[PHP/null|NULL]] ===
تمثل القيمة الخاصة <code>NULL</code> متغيرًا دون قيمة، فالقيمة <code>NULL</code> هي القيمة الوحيد الممكنة من نوع البيانات null.
تمثل القيمة الخاصة <code>NULL</code> متغيرًا دون قيمة، فالقيمة <code>NULL</code> هي القيمة الوحيد الممكنة من نوع البيانات null.


=== [[PHP/Types/pseudo-types|أشباه الأنواع (pseudo-types)]] ===
=== [[PHP/pseudo types|أشباه الأنواع (pseudo-types)]] ===
أشباه الأنواع هي كلمات مفتاحيَّة مستخدمة في توثيق PHP لتحديد الأنواع أو القيم التي يمكن أن يمتلكها المعامل ولا يمكن استخدامها في الشيفرات البرمجية.
أشباه الأنواع هي كلمات مفتاحيَّة مستخدمة في توثيق لغة PHP لتحديد الأنواع أو القيم التي يمكن أن يمتلكها المعامل ولا يمكن استخدامها في الشيفرات البرمجية.


=== [[PHP/Types/type-juggling|التعامل مع الأنواع (Type Juggling)]] ===
=== [[PHP/type juggling|التعامل مع الأنواع (Type Juggling)]] ===
وذلك يتضمن طريقة تحويل الأنواع بين بعضها بعضًا.
وذلك يتضمن طريقة تحويل الأنواع بين بعضها بعضًا.


== [[PHP/Variables|المتغيرات]] ==
== [[PHP/variables|المتغيرات]] ==
يكون التعبير عن المتغيرات في PHP باستخدام علامة $ متبوعة باسم المتغير والذي يكون حساسًا لحالة الأحرف.
يكون التعبير عن المتغيرات في لغة PHP باستخدام علامة $ متبوعة باسم المتغير والذي يكون حساسًا لحالة الأحرف.


=== [[PHP/Variables/predefined|المتغيرات المعرفة مسبقًا]] ===
=== [[PHP/predefined variables|المتغيرات المعرفة مسبقًا]] ===
تقدّم PHP عددًا كبيرًا من المتغيرات المعرّفة مسبقًا ضمن الشيفرات العاملة بهذه اللغة.
تقدّم لغة PHP عددًا كبيرًا من المتغيرات المعرّفة مسبقًا ضمن الشيفرات العاملة بهذه اللغة.


=== [[PHP/Variables/scope|نطاق المتغيرات]] ===
=== [[PHP/variables scope|نطاق المتغيرات]] ===
النطاق (scope) هو السياق الذي تعرّف ضمنه المتغيرات.
النطاق (scope) هو السياق الذي تعرّف ضمنه المتغيرات.


=== [[PHP/Variables/variable|المتغيرات المتغيرة]] ===
=== [[PHP/variable variables|المتغيرات المتغيرة]] ===
قد تحتاج في بعض الأحيان إلى استخدام أسماء متغيّرة للمتغيرات، بمعنى أن تعيين اسم المتغيّر واستخدامه يكون بصورة ديناميكية. المتغيّر المتغير (variable variable) يأخذ قيمة متغيّر معين ويستخدمه كاسم لمتغير آخر. 
قد تحتاج في بعض الأحيان إلى استخدام أسماء متغيّرة للمتغيرات، بمعنى أن تعيين اسم المتغيّر واستخدامه يكون بصورة ديناميكية. المتغيّر المتغير (variable variable) يأخذ قيمة متغيّر معين ويستخدمه كاسم لمتغير آخر. 


=== [[PHP/Variables/external|المتغيرات من مصادر خارجية]] ===
=== [[PHP/external variables|المتغيرات من مصادر خارجية]] ===
وتأتي هذه المتغيرات أساسيًا عبر GET و POST (والكعكات).
وتأتي هذه المتغيرات أساسيًا عبر GET و POST (والكعكات).


== [[PHP/constants|الثوابت]] ==
== [[PHP/constants|الثوابت]] ==
الثابت هو معرّف (اسم) لقيمة بسيطة، وكما هو واضح من الاسم فإنّ هذه القيمة غير قابلة للتبديل أثناء تنفيذ الشيفرة
الثابت هو معرّف (اسم) لقيمة بسيطة، وكما هو واضح من الاسم فإنّ هذه القيمة غير قابلة للتبديل أثناء تنفيذ الشيفرة.


=== [[PHP/constants|الصيغة]] ===
== [[PHP/expressions|التعابير (Expressions)]] ==
يمكن تعريف الثابت باستخدام الدالة <code>define()‎</code> أو باستخدام الكلمة المفتاحية <code>const</code> خارج الأصناف منذ الإصدار 5.3.0 من PHP. تتيح <code>define()‎</code> إسناد الثوابت إلى مختلف أنواع القيم والتعبيرات، في حين أن هناك بعض القيود التي تحكم استخدام <code>const</code>. لا يمكن بأيّ حال من الأحوال تغيير قيمة الثابت أو إلغاء القيمة المسندة إليه بعد إجراء عملية الإسناد.
تعدّ التعابير إحدى الوحدات البنائية الأكثر أهمية في لغة PHP، ففي هذه اللغة كل ما تكتبه تقريبًا هو عبارة عن تعبير، لذا فإن أبسط وأدقّ تعريف للتعابير هو: "كلّ ما يمتلك قيمة".


=== [[PHP/constants|الثوابت السحرية]] ===
== [[PHP/Operators|العوامل في لغة PHP]] ==
توفّر PHP عددًا كبيرًا من الثوابت المعرّفة مسبقًا للشيفرات التي تشغلها، ولكن ينشأ العديد من هذه الثوابت بواسطة ملحقات متعددة، وتكون الثوابت متاحة عند توفّر هذه الملحقات إما بواسطة التحميل الديناميكي (dynamic loading) أو بسبب كونها مبنية مع اللغة (compiled in).
 
== [[PHP/Expressions|التعابير (Expressions)]] ==
تعدّ التعابير إحدى الوحدات البنائية الأكثر أهمية في PHP، ففي هذه اللغة كل ما تكتبه تقريبًا هو عبارة عن تعبير، لذا فإن أبسط وأدقّ تعريف للتعابير هو: "كلّ ما يمتلك قيمة".
 
== [[PHP/Operators|العوامل في PHP]] ==
يأخذ العامل (operator) قيمة واحدة أو أكثر (أو تعابير حسب اصطلاحات البرمجة) ويعطي قيمة أخرى (بحيث تتحول البنية نفسها إلى تعبير).
يأخذ العامل (operator) قيمة واحدة أو أكثر (أو تعابير حسب اصطلاحات البرمجة) ويعطي قيمة أخرى (بحيث تتحول البنية نفسها إلى تعبير).


=== [[PHP/Operators/precedence|أولوية العوامل (Operator Precedence)]] ===
=== [[PHP/precedence operators|أولوية العوامل (Operator Precedence)]] ===
المقصود بأولوية العوامل هو تحديد مدى "قوة" ربط العامل لتعبيرين مع بعضهما البعض.
المقصود بأولوية العوامل هو تحديد مدى "قوة" ربط العامل لتعبيرين مع بعضهما البعض.


=== [[PHP/Operators/arithmetic|العوامل الحسابية (Arithmetic Operators)]] ===
=== [[PHP/arithmetic operators|العوامل الحسابية (Arithmetic Operators)]] ===
العوامل الحسابية الرياضية الأساسية (كالجمع والضرب والقسمة ...إلخ.).
العوامل الحسابية الرياضية الأساسية (كالجمع والضرب والقسمة ...إلخ.).


=== [[PHP/Operators/assignment|عوامل الإسناد (Assignment Operators)]] ===
=== [[PHP/assignment operators|عوامل الإسناد (Assignment Operators)]] ===
العامل "=" هو عامل الإسناد الأساسي. قد تظنّ للوهلة الأولى أن هذا العامل يعني "المساواة"، ولكنّه ليس كذلك. وظيفة هذا العامل هي ربط قيمة التعبير الموجود على جانبه الأيمن بالتعبير الموجود على الجانب الأيسر.
العامل "=" هو عامل الإسناد الأساسي. قد تظنّ للوهلة الأولى أن هذا العامل يعني "المساواة"، ولكنّه ليس كذلك. وظيفة هذا العامل هي ربط قيمة التعبير الموجود على جانبه الأيمن بالتعبير الموجود على الجانب الأيسر.


=== [[PHP/Operators/bitwise|عوامل الأعداد الثنائية (Bitwise Operators)]] ===
=== [[PHP/bitwise operators|عوامل الأعداد الثنائية (Bitwise Operators)]] ===
تتيح عوامل الأعداد الثنائية تقدير ومعالجة بتات معينة ضمن العدد الصحيح.
تتيح عوامل الأعداد الثنائية تقدير ومعالجة بتات معينة ضمن العدد الصحيح.


=== [[PHP/Operators/comparison|عوامل المقارنة (Comparison Operators)]] ===
=== [[PHP/comparison operators|عوامل المقارنة (Comparison Operators)]] ===
تتيح عوامل المقارنة -كما هو واضح من اسمها- مقارنة قيمتين مختلفتين.
تتيح عوامل المقارنة -كما هو واضح من اسمها- مقارنة قيمتين مختلفتين.


=== [[PHP/Operators/errorcontrol|عوامل التحكم بالأخطاء (Error Control Operators)]] ===
=== [[PHP/errorcontrol operators|عوامل التحكم بالأخطاء (Error Control Operators)]] ===
تدعم PHP عاملًا واحدًا للتحكّم بالأخطاء وهو علامة (@). تتجاهل PHP جميع الأخطاء الناتجة من أي تعبير تُلحق به هذه العلامة.
تدعم لغة PHP عاملًا واحدًا للتحكّم بالأخطاء وهو علامة (@). تتجاهل لغة PHP جميع الأخطاء الناتجة من أي تعبير تُلحق به هذه العلامة.


=== [[PHP/Operators/execution|عوامل التنفيذ (Execution Operators)]] ===
=== [[PHP/execution operators|عوامل التنفيذ (Execution Operators)]] ===
تدعم PHP عامل تنفيذ واحد هو العلامة (``) ‏backtics، ويجب الانتباه إلى أنها ليست علامة الاقتباس المفردة. ستحاول PHP تنفيذ ما هو مكتوب ضمن هذه العلامتين على أنّه من أوامر الصدفة، وستعيد الناتج.
تدعم لغة PHP عامل تنفيذ واحد هو العلامة (``) ‏backtics، ويجب الانتباه إلى أنها ليست علامة الاقتباس المفردة. ستحاول لغة PHP تنفيذ ما هو مكتوب ضمن هذه العلامتين على أنّه من أوامر الصدفة، وستعيد الناتج.


=== [[PHP/Operators/increment|عوامل الزيادة والنقصان (Incrementing/Decrementing Operators)]] ===
=== [[PHP/increment operators|عوامل الزيادة والنقصان (Incrementing/Decrementing Operators)]] ===
تدعم PHP عوامل الزيادة والنقصان السابقة واللاحقة المماثلة للعوامل المستخدمة في لغة C.
تدعم لغة PHP عوامل الزيادة والنقصان السابقة واللاحقة المماثلة للعوامل المستخدمة في لغة C.


=== [[PHP/Operators/logical|العوامل المنطقية (Logical Operators)]] ===
=== [[PHP/logical operators|العوامل المنطقية (Logical Operators)]] ===
وهي العوامل التي تستعمل في العمليات المنطقية (مثل AND و OR و XOR ...إلخ.).
وهي العوامل التي تستعمل في العمليات المنطقية (مثل AND و OR و XOR ...إلخ.).


=== [[PHP/Operators/string|عوامل السلاسل النصية (String Operators)]] ===
=== [[PHP/string operators|عوامل السلاسل النصية (String Operators)]] ===
هناك عاملان <nowiki/>[[PHP/Types/string|للسلاسل النصية]]. الأول هو عامل الربط ('<code>.</code>') والذي يربط بين المعاملين الموجودين على جانبيه. العامل الثاني هو عامل الربط الإسنادي ('‎<code>.=‎</code>') والذي يُلحق المعامل الموجود في الجهة اليمنى بالمعامل الموجود في الجهة اليسرى.
هناك عاملان <nowiki/>[[PHP/string|للسلاسل النصية]]. الأول هو عامل الربط ('<code>.</code>') والذي يربط بين المعاملين الموجودين على جانبيه. العامل الثاني هو عامل الربط الإسنادي ('‎<code>.=‎</code>') والذي يُلحق المعامل الموجود في الجهة اليمنى بالمعامل الموجود في الجهة اليسرى.


=== [[PHP/Operators/array|عوامل المصفوفات (Array Operators)]] ===
=== [[PHP/array operators|عوامل المصفوفات (Array Operators)]] ===
هي العوامل التي تجرى عملياتها على المصفوفات.
هي العوامل التي تجرى عملياتها على المصفوفات.


=== [[PHP/Operators/type|عوامل الأنواع (Type Operators)]] ===
=== [[PHP/type operators|عوامل الأنواع (Type Operators)]] ===
تستخدم <code>instanceof</code> لتحديد ما إذا كان المتغير كائنًا مهيّئًا من صنف معين.
تستخدم <code>instanceof</code> لتحديد ما إذا كان المتغير كائنًا مهيّئًا من صنف معين.


سطر 124: سطر 107:


=== <code>[[PHP/if|if]]</code> ===
=== <code>[[PHP/if|if]]</code> ===
بنية if هي واحدة من أهم الميزات المتوفّرة في العديد من اللغات البرمجية، ومن ضمنها PHP. إذ تتيح تنفيذ أجزاء من الشيفرة اعتمادًا على شروط معينة.
بنية if هي واحدة من أهم الميزات المتوفّرة في العديد من اللغات البرمجية، ومن ضمنها لغة PHP. إذ تتيح تنفيذ أجزاء من الشيفرة اعتمادًا على شروط معينة.
===<code>[[PHP/else|else]]</code>===
===<code>[[PHP/else|else]]</code>===
قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور <code>else</code>، والتي تعمل على تمديد عبارة <code>[[PHP/if|if]]</code> لتنفيذ عبارة أخرى في حال أدّى حساب عبارة <code>[[PHP/if|if]]</code> إلى النتيجة <code>FALSE</code>.
قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور <code>else</code>، والتي تعمل على تمديد عبارة <code>[[PHP/if|if]]</code> لتنفيذ عبارة أخرى في حال أدّى حساب عبارة <code>[[PHP/if|if]]</code> إلى النتيجة <code>FALSE</code>.
سطر 130: سطر 113:
كما هو واضح من الاسم فإنّ هذه العبارة هي مزيج من <code>[[PHP/if|if]]</code> و <code>[[PHP/else|else]]</code>، وكما هو الحال مع <code>[[PHP/else|else]]</code> يمكن توسيع عبارة <code>[[PHP/if|if]]</code> لتنفيذ عبارة أخرى في حال كانت نتيجة تعبير <code>[[PHP/if|if]]</code> هي <code>FALSE</code>. ولكن، على العكس من <code>[[PHP/else|else]]</code>، فإن <code>elseif</code> تنفذ ذلك التعبير البديل في حالة واحدة فقط وهي أن تكون نتيجة التعبير الشرطي المتعلق بعبارة <code>elseif</code> هي <code>TRUE</code>. 
كما هو واضح من الاسم فإنّ هذه العبارة هي مزيج من <code>[[PHP/if|if]]</code> و <code>[[PHP/else|else]]</code>، وكما هو الحال مع <code>[[PHP/else|else]]</code> يمكن توسيع عبارة <code>[[PHP/if|if]]</code> لتنفيذ عبارة أخرى في حال كانت نتيجة تعبير <code>[[PHP/if|if]]</code> هي <code>FALSE</code>. ولكن، على العكس من <code>[[PHP/else|else]]</code>، فإن <code>elseif</code> تنفذ ذلك التعبير البديل في حالة واحدة فقط وهي أن تكون نتيجة التعبير الشرطي المتعلق بعبارة <code>elseif</code> هي <code>TRUE</code>. 
===<code>[[PHP/while|while]]</code>===
===<code>[[PHP/while|while]]</code>===
تعد حلقات while التكرارية أبسط أنواع الحلقات في PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C.
تعد حلقات while التكرارية أبسط أنواع الحلقات في لغة PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C.
===<code>[[PHP/do-while|do-while]]</code>===
===<code>[[PHP/do-while|do-while]]</code>===
حلقات <code>do-while</code> مشابهة جدًّا لحلقات <code>[[PHP/while|while]]</code>، باستثناء أنّها عملية التحقق من الشرط تحدث في نهاية الدورة بدلًا من بدايتها. ما يميز هذه الحلقات عن حلقات while هو أنّ الدورة الأولى في حلقات <code>do-while</code> ستنفّذ في جميع الأحوال (تحدث عملية التحقق في نهاية الدورة فقط) في حين أن الدورة الأولى في حلقات <code>[[PHP/while|while]]</code> قد لا تنفّذ بالضرورة (تحدث عملية التحقق في بداية كل دورة، وإن كانت النتيجة FALSE منذ البداية تتوقف الحلقة عن العمل مباشرة).
حلقات <code>do-while</code> مشابهة جدًّا لحلقات <code>[[PHP/while|while]]</code>، باستثناء أنّها عملية التحقق من الشرط تحدث في نهاية الدورة بدلًا من بدايتها. ما يميز هذه الحلقات عن حلقات while هو أنّ الدورة الأولى في حلقات <code>do-while</code> ستنفّذ في جميع الأحوال (تحدث عملية التحقق في نهاية الدورة فقط) في حين أن الدورة الأولى في حلقات <code>[[PHP/while|while]]</code> قد لا تنفّذ بالضرورة (تحدث عملية التحقق في بداية كل دورة، وإن كانت النتيجة FALSE منذ البداية تتوقف الحلقة عن العمل مباشرة).
===<code>[[PHP/for|for]]</code>===
===<code>[[PHP/for|for]]</code>===
تعدّ حلقات <code>for</code> النوع الأكثر تعقيدًا من الحلقات في PHP، وهي مشابهة لنظيرتها في لغة C.
تعدّ حلقات <code>for</code> النوع الأكثر تعقيدًا من الحلقات في لغة PHP، وهي مشابهة لنظيرتها في لغة C.
===<code>[[PHP/foreach|foreach]]</code>===
===<code>[[PHP/foreach|foreach]]</code>===
تقدّم بنية foreach طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ.
تقدّم بنية foreach طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ.
سطر 152: سطر 135:
تعمل عبارة include على تضمين ومعالجة الملف المحدّد.
تعمل عبارة include على تضمين ومعالجة الملف المحدّد.
===<code>[[PHP/require-once|require_once]]</code>===
===<code>[[PHP/require-once|require_once]]</code>===
عبارة <code>require_once</code> مطابقة للعبارة <code>[[PHP/require|require]]</code> باستثناء أن PHP ستتحقق مما إذا كان الملف مضمّنًا أم لا، وذلك لتجنّب تضمينه (require) مرة أخرى.
عبارة <code>require_once</code> مطابقة للعبارة <code>[[PHP/require|require]]</code> باستثناء أن لغة PHP ستتحقق مما إذا كان الملف مضمّنًا أم لا، وذلك لتجنّب تضمينه (require) مرة أخرى.
===<code>[[PHP/include-once|include_once]]</code>===
===<code>[[PHP/include-once|include_once]]</code>===
تُضمِّن العبارة <code>include_once</code> الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة <code>[[PHP/include|include]]</code> والفرق الوحيد هنا هو إن كانت شيفرة ذلك الملف مضمّنة من قبل فإنّها لن تُضمِّنَه مرة أخرى، وترجع <code>include_once</code> القيمة <code>TRUE</code>، وهذا السلوك متوقع من اسم العبارة.
تُضمِّن العبارة <code>include_once</code> الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة <code>[[PHP/include|include]]</code> والفرق الوحيد هنا هو إن كانت شيفرة ذلك الملف مضمّنة من قبل فإنّها لن تُضمِّنَه مرة أخرى، وترجع <code>include_once</code> القيمة <code>TRUE</code>، وهذا السلوك متوقع من اسم العبارة.
سطر 159: سطر 142:
== [[PHP/Functions|الدوال]] ==
== [[PHP/Functions|الدوال]] ==


=== [[PHP/Functions/user-defined|الدوال المعرّفة من طرف المستخدم]] ===
=== [[PHP/user defined functions|الدوال المعرّفة من طرف المستخدم]] ===
تتبع أسماء الدوالّ نفس القواعد المتبّعة في اللغة للتسمية. يبدأ الاسم الصحيح للدالة بحرف أو شرطة سفلية، متبوعًا بأيّ عددٍ من الحروف أو الأرقام أو الشرطات السفلية. ويمكن التعبير عن هذه الصيغة باستخدام التعابير النمطية بالصورة التالية: <code>‎[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*‎</code>.
تتبع أسماء الدوالّ نفس القواعد المتبّعة في اللغة للتسمية. يبدأ الاسم الصحيح للدالة بحرف أو شرطة سفلية، متبوعًا بأيّ عددٍ من الحروف أو الأرقام أو الشرطات السفلية. ويمكن التعبير عن هذه الصيغة باستخدام التعابير النمطية بالصورة التالية: <code>‎[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*‎</code>.
===[[PHP/Functions/arguments|معاملات الدوال]]===
===[[PHP/function arguments|معاملات الدوال]]===
يمكن تمرير المعلومات إلى الدوالّ بواسطة قائمة المعاملات argument list، وهي قائمة من التعابير المفصولة بالعلامة (,)، وتُعالج هذه المعاملات من اليسار إلى اليمين.
يمكن تمرير المعلومات إلى الدوالّ بواسطة قائمة المعاملات argument list، وهي قائمة من التعابير المفصولة بالعلامة (,)، وتُعالج هذه المعاملات من اليسار إلى اليمين.
===[[PHP/Functions/returning-values|إعادة القيم]]===
===[[PHP/returning values|إعادة القيم]]===
يمكن إعادة القيم باستخدام عبارة <code>[[PHP/return|return]]</code> الاختيارية، ويمكن إعادة أيّ نوع من أنواع القيم ومن ضمنها المصفوفات والكائنات. يؤدي استخدام هذه العبارة إلى إيقاف تنفيذ الدالة فورًا والعودة إلى السطر الذي استدعيت منه تلك الدالة. راجع <code>[[PHP/return|return]]</code> للمزيد من المعلومات.
يمكن إعادة القيم باستخدام عبارة <code>[[PHP/return|return]]</code> الاختيارية، ويمكن إعادة أيّ نوع من أنواع القيم ومن ضمنها المصفوفات والكائنات. يؤدي استخدام هذه العبارة إلى إيقاف تنفيذ الدالة فورًا والعودة إلى السطر الذي استدعيت منه تلك الدالة. راجع <code>[[PHP/return|return]]</code> للمزيد من المعلومات.
===[[PHP/Functions/variable-functions|الدوال المتغيّرة]]===
===[[PHP/variable functions|الدوال المتغيّرة]]===
تدعم PHP مفهوم الدوال المتغيّرة والذي يعني أنّه في حال إلحاق قوسين إلى نهاية اسم أحد المتغيّرات، فإنّ اللغة ستبحث عن دالة تحمل الاسم ذاته، وستحاول تنفيذها. يمكن الاستفادة من هذه الميزة في الاستدعاءات الخلفية callbacks، وجداول الدوال وما إلى ذلك.
تدعم لغة PHP مفهوم الدوال المتغيّرة والذي يعني أنّه في حال إلحاق قوسين إلى نهاية اسم أحد المتغيّرات، فإنّ اللغة ستبحث عن دالة تحمل الاسم ذاته، وستحاول تنفيذها. يمكن الاستفادة من هذه الميزة في الاستدعاءات الخلفية callbacks، وجداول الدوال وما إلى ذلك.
===[[PHP/Functions/internal|الدوال الداخلية (المضمّنة)]]===
===[[PHP/internal functions|الدوال الداخلية (المضمّنة)]]===
تقدّم PHP الكثير من الدوال والبنى الأساسية والمضمّنة في اللغة. هناك أيضًا دوال تتطلب وجود إضافة خاصّة باللغة، وعدا ذلك سيظهر الخطأ "undefined function".
تقدّم لغة PHP الكثير من الدوال والبنى الأساسية والمضمّنة في اللغة. هناك أيضًا دوال تتطلب وجود إضافة خاصّة باللغة، وعدا ذلك سيظهر الخطأ "undefined function".
===[[PHP/Functions/anonymous|الدوال المجهولة]]===
===[[PHP/anonymous functions|الدوال المجهولة]]===
الدوال المجهولة (anonymous functions) التي تُعرَف أيضًا بالمصطلح (closures) تسمح بإنشاء دالة ليس لها اسم محدد. غالبًا ما تستخدم هذه الدوال للحصول على قيمتها كمعاملات استدعاء راجع <nowiki/>[[PHP/Types/callable|callback]]، ولها استخدامات أخرى.
الدوال المجهولة (anonymous functions) التي تُعرَف أيضًا بالمصطلح (closures) تسمح بإنشاء دالة ليس لها اسم محدد. غالبًا ما تستخدم هذه الدوال للحصول على قيمتها كمعاملات استدعاء راجع <nowiki/>[[PHP/callable|callback]]، ولها استخدامات أخرى.
== [[PHP/OOP|البرمجة كائنية التوجه]] ==
== [[PHP/OOP|البرمجة كائنية التوجه في لغة PHP]] ==
بدءًا من الإصدار الخامس من اللغة، أعيدت كتابة نموذج الكائنات للحصول على أداء أفضل وإضافة المزيد من الميزات، وقد كان هذا من التغييرات الكبيرة في اللغة، إذ قدّم الإصدار الخامس نموذج مكتملًا للكائنات.
بدءًا من الإصدار الخامس من اللغة، أعيدت كتابة نموذج الكائنات للحصول على أداء أفضل وإضافة المزيد من الميزات، وقد كان هذا من التغييرات الكبيرة في اللغة، إذ قدّم الإصدار الخامس نموذج مكتملًا للكائنات.
 
===[[PHP/properties|الخاصيات]]===
=== [[PHP/OOP/basic|الأساسيات]] ===
تبدأ الصيغة البسيطة للتعريف عن الصنف بالكلمة المفتاحية class، يتبعها اسم الصنف ويتبعه زوج من الأقواس المعقوفة التي تحيط بالعبارات المسؤولة عن تعريف الخصائص والتوابع المُنتمية إلى الصنف.
 
يمكن أن يحمل الصنف أي اسم بشرط أن لا يكون كلمةً محجوزةً في PHP. يبدأ اسم الصنف النظامي بحرف أو شرطة سفلية، تتبعها أيّ عددٍ من الحروف أو الأرقام أو الشرطات السفلية. ويمكن التعبير عن هذه الصيغة باستخدام التعابير النمطية بالصورة التالية: ‎<code>^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$‎</code>.
 
يمكن أن يحتوي الصنف على <nowiki/>[[PHP/Variables|ثوابت]] و<nowiki/>[[PHP/constants|متغيرات]] (تسمّى "خصائص" [properties]) ودوالّ (تسمى "توابع" [methods]) خاصة به.
===[[PHP/OOP/properties|الخاصيات]]===
تطلق تسمية "الخاصيات properties" على المتغيّرات المعرّفة ضمن الأصناف، وهناك تسميات أخرى مثل "المعاملات" أو "الحقول"، ولكن سنستخدم التسمية الأولى "الخاصيات" في هذا الدليل. تعرّف الخاصيات باستخدام إحدى الكلمات المفتاحية public، أو protected، أو private تتبعها عبارة تصريح عن متغير اعتيادي. يمكن أن يتضمّن هذا التصريح عملية تهيئة initialization، ولكن يجب أن تكون هذه التهيئة ذات قيمة ثابتة، بمعنى أنّه يجب أن تكون قابلة للمعالجة في وقت التصريف ويجب أن لا تعتمد على المعلومات المتاحة في وقت التشغيل لغرض المعالجة.
تطلق تسمية "الخاصيات properties" على المتغيّرات المعرّفة ضمن الأصناف، وهناك تسميات أخرى مثل "المعاملات" أو "الحقول"، ولكن سنستخدم التسمية الأولى "الخاصيات" في هذا الدليل. تعرّف الخاصيات باستخدام إحدى الكلمات المفتاحية public، أو protected، أو private تتبعها عبارة تصريح عن متغير اعتيادي. يمكن أن يتضمّن هذا التصريح عملية تهيئة initialization، ولكن يجب أن تكون هذه التهيئة ذات قيمة ثابتة، بمعنى أنّه يجب أن تكون قابلة للمعالجة في وقت التصريف ويجب أن لا تعتمد على المعلومات المتاحة في وقت التشغيل لغرض المعالجة.
===[[PHP/OOP/constants|ثوابت الأصناف]]===
===[[PHP/class constants|ثوابت الأصناف]]===
يمكن تعريف قيم ثابتة لا يمكن تعديلها ولكل صنفٍ على حدة. تختلف الثوابت عن المتغيرات الاعتيادية في عدم استخدام العلامة <code>$</code> للتصريح عنها أو استخدامها. تمتلك ثوابت الأصناف قابلية رؤية من نوع public.
يمكن تعريف قيم ثابتة لا يمكن تعديلها ولكل صنفٍ على حدة. تختلف الثوابت عن المتغيرات الاعتيادية في عدم استخدام العلامة <code>$</code> للتصريح عنها أو استخدامها. تمتلك ثوابت الأصناف قابلية رؤية من نوع public.
===[[PHP/OOP/autoload|التحميل التلقائي للأصناف]]===
===[[PHP/autoloading|التحميل التلقائي لأصناف لغة PHP]]===
يُنشئ أغلب المطوّرين الذي يكتبون تطبيقات كائنية التوجه ملف PHP واحد لكل صنف. وهنا تظهر مشكلة مزعجة للغاية، وهي الحاجة إلى كتابة قائمة طويلة بالأصناف التي يجب تضمينها للبدء بتنفيذ الشيفرة (قائمة لكل صنف).
يُنشئ أغلب المطوّرين الذي يكتبون تطبيقات كائنية التوجه ملف لغة PHP واحد لكل صنف. وهنا تظهر مشكلة مزعجة للغاية، وهي الحاجة إلى كتابة قائمة طويلة بالأصناف التي يجب تضمينها للبدء بتنفيذ الشيفرة (قائمة لكل صنف).


لم يعد هذا الأمر ضروريًا في الإصدار الخامس من اللغة، إذ تسجّل الدالة <code>spl_autoload_register()</code>‎‎ عددًا غير محدّدٍ من المحمّلات التلقائية لتتيح إمكانية التحميل التلقائي للأصناف والواجهات غير المعرّفة في ملف الشيفرة. يمنح تسجيلُ المحمّلات التلقائية اللغةَ فرصة أخيرة لتحميل الصنف أو الواجهة قبل أن تتوقف الشيفرة عن العمل وتطلق خطأً.
لم يعد هذا الأمر ضروريًا في الإصدار الخامس من اللغة، إذ تسجّل الدالة <code>spl_autoload_register()</code>‎‎ عددًا غير محدّدٍ من المحمّلات التلقائية لتتيح إمكانية التحميل التلقائي للأصناف والواجهات غير المعرّفة في ملف الشيفرة. يمنح تسجيلُ المحمّلات التلقائية اللغةَ فرصة أخيرة لتحميل الصنف أو الواجهة قبل أن تتوقف الشيفرة عن العمل وتطلق خطأً.
===[[PHP/OOP/decon|التوابع البانية والهادمة]]===
===[[PHP/decon|التوابع البانية والهادمة]]===
تتيح لغة PHP للمطورين التصريح عن تابع بانٍ في الأصناف. كل صنف يمتلك تابعًا بانيًا يستدعي هذا التابع مع كل كائن جديد يُنشأ من ذلك الصنف؛ لهذا يعد هذا التابع ملائمًا لعمليات التهيئة التي قد يحتاج لها الكائن قبل استخدامه.
تتيح لغة PHP للمطورين التصريح عن تابع بانٍ في الأصناف. كل صنف يمتلك تابعًا بانيًا يستدعي هذا التابع مع كل كائن جديد يُنشأ من ذلك الصنف؛ لهذا يعد هذا التابع ملائمًا لعمليات التهيئة التي قد يحتاج لها الكائن قبل استخدامه.


تقدّم PHP 5 مفهوم الدوال الهادمة وهو مفهوم شائع في لغات البرمجة كائنية التوجّه مثل C++‎. تُستدعى الدالة الهادمة عندما لا يكون هناك أي مرجع لكائن معين.
يقدّم الإصدار 5 من لغة PHP مفهوم الدوال الهادمة وهو مفهوم شائع في لغات البرمجة كائنية التوجّه مثل C++‎. تُستدعى الدالة الهادمة عندما لا يكون هناك أي مرجع لكائن معين.
===[[PHP/OOP/visibility|قابلية الرؤية]]===
===[[PHP/properties visibility|قابلية الرؤية]]===
يمكن تعريف قابلية رؤية خاصية أو تابع أو (بدءًا من الإصدار 7.1.0 من اللغة) ثابت بأنّها إلحاق صيغة التصريح بإحدى الكلمات المفتاحية public، أو protected، أو private. يتيح التصريح من نوع public الوصول إلى أعضاء الصنف من أي مكان، ويتيح التصريح من نوع protected الوصول إلى الأعضاء من داخل الصنف نفسه أو الأصناف التي ترث الصنف أو تورّثه، أما التصريح من نوع private فيتيح الوصول إلى الأعضاء من داخل الصنف الذي عرِّف فيه ذلك العضو حصرًا.
يمكن تعريف قابلية رؤية خاصية أو تابع أو (بدءًا من الإصدار 7.1.0 من اللغة) ثابت بأنّها إلحاق صيغة التصريح بإحدى الكلمات المفتاحية public، أو protected، أو private. يتيح التصريح من نوع public الوصول إلى أعضاء الصنف من أي مكان، ويتيح التصريح من نوع protected الوصول إلى الأعضاء من داخل الصنف نفسه أو الأصناف التي ترث الصنف أو تورّثه، أما التصريح من نوع private فيتيح الوصول إلى الأعضاء من داخل الصنف الذي عرِّف فيه ذلك العضو حصرًا.
===[[PHP/OOP/inheritance|وراثة الكائنات]]===
===[[PHP/class inheritance|وراثة الكائنات]]===
وراثة الكائنات من المبادئ المعروفة في البرمجة كائنية التوجه وتستخدمه PHP في نموذج الكائنات الخاصّ بها. يؤثّر هذا المبدأ على العلاقة التي تربط بين الأصناف والكائنات.
وراثة الكائنات من المبادئ المعروفة في البرمجة كائنية التوجه وتستخدمه لغة PHP في نموذج الكائنات الخاصّ بها. يؤثّر هذا المبدأ على العلاقة التي تربط بين الأصناف والكائنات.
===[[PHP/OOP/scope-operator|عامل تحليل النطاق (::)]]===
===[[PHP/scope operator|عامل تحليل النطاق (::)]]===
يسمح عامل تحليل النطاق (Scope Resolution Operator) بالوصول إلى الخاصيات والتوابع من نوع static، أو المتجاوز عليها أو الثوابت الخاصة بصنف معين.
يسمح عامل تحليل النطاق (Scope Resolution Operator) بالوصول إلى الخاصيات والتوابع من نوع static، أو المتجاوز عليها أو الثوابت الخاصة بصنف معين.
===[[PHP/OOP/static|الكلمة المفتاحية Static]]===
===[[PHP/static|الكلمة المفتاحية Static]]===
يمكن استخدام static أيضًا لتعريف <nowiki/>[[PHP/Variables/scope|المتغيرات الساكنة]] و<nowiki/>[[PHP/OOP/late-static-bindings|الروابط الساكنة اللاحقة]] (late static bindings).
يمكن استخدام static أيضًا لتعريف <nowiki/>[[PHP/variables scope|المتغيرات الساكنة]] و<nowiki/>[[PHP/late static bindings|الروابط الساكنة اللاحقة]] (late static bindings).
===[[PHP/OOP/abstract|تجريد الأصناف]]===
===[[PHP/abstract|تجريد الأصناف]]===
يقدّم الإصدار الخامس من اللغة الأصناف والتوابع المجرّدة. لا يمكن تهيئة الأصناف المجرّدة، وإذا احتوى الصنف على تابع مجرّد واحدٍ على الأقل فيجب أن يكون الصنف مجردًا أيضًا. تصرّح الأصناف المجرّدة ببساطة عن توقيع التابع (method's signature)، ولا يمكنها تعريف الاستخدام (implementation).
يقدّم الإصدار الخامس من اللغة الأصناف والتوابع المجرّدة. لا يمكن تهيئة الأصناف المجرّدة، وإذا احتوى الصنف على تابع مجرّد واحدٍ على الأقل فيجب أن يكون الصنف مجردًا أيضًا. تصرّح الأصناف المجرّدة ببساطة عن توقيع التابع (method's signature)، ولا يمكنها تعريف الاستخدام (implementation).
===[[PHP/OOP/interfaces|واجهات الكائنات]]===
===[[PHP/interfaces|واجهات الكائنات]]===
تتيح واجهات الكائنات إنشاء شيفرة تحدّد التوابع التي يجب أن يتضمّنها الصنف دون الحاجة إلى تعريف آلية التحكّم في هذه التوابع.
تتيح واجهات الكائنات إنشاء شيفرة تحدّد التوابع التي يجب أن يتضمّنها الصنف دون الحاجة إلى تعريف آلية التحكّم في هذه التوابع.


تعرّف الواجهات بنفس طريقة تعريف الأصناف، ولكن باستخدام الكلمة المفتاحية interface بدل الكلمة المفتاحية class ودون تعريف محتوى أيّ تابعٍ في الواجهة.
تعرّف الواجهات بنفس طريقة تعريف الأصناف، ولكن باستخدام الكلمة المفتاحية interface بدل الكلمة المفتاحية class ودون تعريف محتوى أيّ تابعٍ في الواجهة.
===[[PHP/OOP/traits|السمات]]===
===[[PHP/traits|السمات]]===
تعدّ السمات طريقة لإعادة استخدام الشيفرة في اللغات التي لا تدعم الوراثة المتعددة مثل PHP. وتهدف السمات إلى إزالة بعض القيود التي تفرضها الوراثة المفردة وذلك بتمكين المطوّر من استخدام مجموعة من التوابع بحرية في عدد من الأصناف المستقلة عن بعضها في هيكلية أصناف مختلفة. وتحمل كلّ من السمات والأصناف دلالات تهدف إلى التقليل من التعقيد وتجنب المشاكل الشائعة التي ترتبط بالوراثة المتعددة والدوال المساعدة Mixins.
تعدّ السمات طريقة لإعادة استخدام الشيفرة في اللغات التي لا تدعم الوراثة المتعددة مثل لغة PHP. وتهدف السمات إلى إزالة بعض القيود التي تفرضها الوراثة المفردة وذلك بتمكين المطوّر من استخدام مجموعة من التوابع بحرية في عدد من الأصناف المستقلة عن بعضها في هيكلية أصناف مختلفة. وتحمل كلّ من السمات والأصناف دلالات تهدف إلى التقليل من التعقيد وتجنب المشاكل الشائعة التي ترتبط بالوراثة المتعددة والدوال المساعدة Mixins.
===[[PHP/OOP/anonymous|الأصناف المجهولة]]===
===[[PHP/anonymous classes|الأصناف المجهولة]]===
أضيف دعم الأصناف المجهولة إلى الإصدار السابع من PHP، وهذا النوع من الأصناف مفيد عند الحاجة إلى إنشاء نسخة واحدة بسيطة من الصنف.
أضيف دعم الأصناف المجهولة إلى الإصدار السابع من لغة PHP، وهذا النوع من الأصناف مفيد عند الحاجة إلى إنشاء نسخة واحدة بسيطة من الصنف.
===[[PHP/OOP/overloading|التحميل الزائد]]===
===[[PHP/overloading|التحميل الزائد]]===
تقديم ميزة التحميل الزائد في PHP القدرة على إنشاء الخصائص والتوابع بصورة ديناميكية، وتعالج هذه العناصر الديناميكية بواسطة التوابع السحرية (magic methods) التي يمكن استخدامها في الصنف لأداء العديد من الوظائف.
تقديم ميزة التحميل الزائد في لغة PHP القدرة على إنشاء الخصائص والتوابع بصورة ديناميكية، وتعالج هذه العناصر الديناميكية بواسطة التوابع السحرية (magic methods) التي يمكن استخدامها في الصنف لأداء العديد من الوظائف.
===[[PHP/OOP/iterations|Object Iteration]]===
===[[PHP/object iteration|Object Iteration]]===
يقدّم الإصدار الخامس من اللغة طريقة لتعريف العناصر ليكون بالإمكان المرور على قائمة من العناصر باستخدام العبارة <code>[[PHP/foreach|foreach]]</code> على سبيل المثال، وتستخدم جميع <nowiki/>[[PHP/OOP/visibility|الخصائص المرئية]] بصورة افتراضية لعملية المرور على العناصر.
يقدّم الإصدار الخامس من اللغة طريقة لتعريف العناصر ليكون بالإمكان المرور على قائمة من العناصر باستخدام العبارة <code>[[PHP/foreach|foreach]]</code> على سبيل المثال، وتستخدم جميع <nowiki/>[[PHP/properties visibility|الخصائص المرئية]] بصورة افتراضية لعملية المرور على العناصر.
===[[PHP/OOP/magic|التوابع السحرية]]===
===[[PHP/magic|التوابع السحرية]]===
التوابع السحرية في أصناف PHP هي <code>‎__construct()</code>‎ و <code>‎__destruct()</code>‎ و <code>‎__call()</code>‎ و <code>‎__callStatic()</code>‎ و <code>‎__get()</code>‎ و <code>‎__set()‎</code> و ‎<code>__isset()</code>‎ و ‎<code>__unset()‎‎</code> و<code>‎__sleep()</code>‎ و ‎<code>__wakeup()</code>‎ و <code>‎__toString()‎</code> و ‎<code>__invoke()‎</code> و ‎<code>_‎_set_state()‎</code> و ‎<code>__clone()</code>‎ و <code>‎__debugInfo()</code>‎. ولا يمكنك استخدام دوالّ تحمل هذه الأسماء في أي صنف ما لم تكن ترغب في الاستفادة من الوظيفة السحرية التي تتمتّع بها.
التوابع السحرية في أصناف لغة PHP هي:
===[[PHP/OOP/final|الكلمة المفتاحية final]]===
 
* <code>‎__construct()</code>‎  
* <code>‎__destruct()</code>‎  
* <code>‎__call()</code>‎
* <code>‎__callStatic()</code>‎
* <code>‎__get()</code>‎  
* <code>‎__set()‎</code> 
* ‎<code>__isset()</code>‎  
* ‎<code>__unset()‎‎</code>
* <code>‎__sleep()</code>‎
* ‎<code>__wakeup()</code>‎
* <code>‎__toString()‎</code> 
* ‎<code>__invoke()‎</code> 
* ‎<code>_‎_set_state()‎</code> 
* ‎<code>__clone()</code>‎  
* <code>‎__debugInfo()</code>‎
 
ولا يمكنك استخدام دوالّ تحمل هذه الأسماء في أي صنف ما لم تكن ترغب في الاستفادة من الوظيفة السحرية التي تتمتّع بها.
===[[PHP/final|الكلمة المفتاحية final في لغة PHP]]===
قدّم الإصدار الخامس من اللغة الكلمة المفتاحية final والتي تمنع الأصناف الأبناء من التجاوز على توابع الصنف الأب وذلك بإضافة الكلمة المفتاحية قبل عبارة تعريف التابع. إذا استُخدمت الكلمة المفتاحية <code>final</code> في تعريف الصنف فإنّه يصبح غير قابل للتوسع.
قدّم الإصدار الخامس من اللغة الكلمة المفتاحية final والتي تمنع الأصناف الأبناء من التجاوز على توابع الصنف الأب وذلك بإضافة الكلمة المفتاحية قبل عبارة تعريف التابع. إذا استُخدمت الكلمة المفتاحية <code>final</code> في تعريف الصنف فإنّه يصبح غير قابل للتوسع.
===[[PHP/OOP/cloning|استنساخ الكائنات]]===
===[[PHP/cloning objects|استنساخ الكائنات]]===
أي نسخ الكائن مع خاصياته كلها.
أي نسخ الكائن مع خاصياته كلها.
===[[PHP/OOP/object-comparison|مقارنة الكائنات]]===
===[[PHP/object comparison|مقارنة الكائنات]]===
يمكن إجراء مقارنة بسيطة بين متغيرات الكائنات باستخدام عامل المقارنة (==)، وتكون نسختا الكائن متساويتين إن كانتا تملكان نفس المعاملات ونفس القيم (تقارن القيم باستخدام ====) وكانتا نسختين لنفس الصنف.
يمكن إجراء مقارنة بسيطة بين متغيرات الكائنات باستخدام عامل المقارنة (==)، وتكون نسختا الكائن متساويتين إن كانتا تملكان نفس المعاملات ونفس القيم (تقارن القيم باستخدام ====) وكانتا نسختين لنفس الصنف.


عند استخدام عامل التطابق (===) تكون متغيرات الكائنات متطابقة عندما تشير فقط وفقط إذا إلى النسخة نفسها من الصنف نفسه.
عند استخدام عامل التطابق (===) تكون متغيرات الكائنات متطابقة عندما تشير فقط وفقط إذا إلى النسخة نفسها من الصنف نفسه.


===[[PHP/OOP/typehinting|التلميح عن الأنواع]]===
===[[PHP/typehinting|التلميح عن الأنواع]]===
تسمح خاصية التصريح عن الأنواع للدوال بطلب النوع المحدّد من المعاملات في وقت الاستدعاء، وإن كانت القيمة المستدعاة ذات نوع مغاير، تطلق اللغة خطأ من نوع recoverable fatal في الإصدار 5، أما في الإصدار 7 فترمي اللغة استثناءً من نوع <code>TypeError</code>.
تسمح خاصية التصريح عن الأنواع للدوال بطلب النوع المحدّد من المعاملات في وقت الاستدعاء، وإن كانت القيمة المستدعاة ذات نوع مغاير، تطلق اللغة خطأ من نوع recoverable fatal في الإصدار 5، أما في الإصدار 7 فترمي اللغة استثناءً من نوع <code>TypeError</code>.


ولتحديد النوع الذي ترغب في التصريح عنه، يجب إضافة اسم النوع قبل اسم المعامل، ويمكن قبول قيم NULL وذلك بتعيين NULL كقيمة افتراضية للمعاملات.
ولتحديد النوع الذي ترغب في التصريح عنه، يجب إضافة اسم النوع قبل اسم المعامل، ويمكن قبول قيم NULL وذلك بتعيين NULL كقيمة افتراضية للمعاملات.
===[[PHP/OOP/late-static-bindings|الروابط الساكنة المتأخرة]]===
===[[PHP/late static bindings|الروابط الساكنة المتأخرة]]===
تضمن الإصدار 5.3.0 من PHP خاصية تدعى بالروابط الساكنة المتأخرة (late static bindings) والتي يمكن استخدامها للإشارة إلى الصنف المستدعى في سياق وراثة ساكنة.
تضمن الإصدار 5.3.0 من لغة PHP خاصية تدعى بالروابط الساكنة المتأخرة (late static bindings) والتي يمكن استخدامها للإشارة إلى الصنف المستدعى في سياق وراثة ساكنة.
===[[PHP/OOP/references|الكائنات والمراجع]]===
===[[PHP/objects references|الكائنات والمراجع]]===
المرجع في PHP هو اختصار يتيح لمتغيرين مختلفين الكتابة إلى القيمة ذاتها. ومنذ الإصدار الخامس من اللغة، لم يعد متغير الكائن يتضمّن الكائن نفسه كقيمة على الإطلاق، بل يتضمّن فقط معرّفًا للكائن يتيح الوصول إلى الكائن الحقيقي. وعند تمرير الكائن كمعامل أو إعادته أو إسناده إلى متغير آخر، لا تكون هذه المتغيرات أسماء بديلة (aliases) بل تحمل نسخة من المعرّف الذي يشير إلى الكائن نفسه.
المرجع في لغة PHP هو اختصار يتيح لمتغيرين مختلفين الكتابة إلى القيمة ذاتها. ومنذ الإصدار الخامس من اللغة، لم يعد متغير الكائن يتضمّن الكائن نفسه كقيمة على الإطلاق، بل يتضمّن فقط معرّفًا للكائن يتيح الوصول إلى الكائن الحقيقي. وعند تمرير الكائن كمعامل أو إعادته أو إسناده إلى متغير آخر، لا تكون هذه المتغيرات أسماء بديلة (aliases) بل تحمل نسخة من المعرّف الذي يشير إلى الكائن نفسه.
===‎[[PHP/OOP/serialization|سَلسَلة الكائن]]===
===‎[[PHP/serialization|سَلسَلة الكائن]]===
تعيد الدالة <code>serialize()‎‎</code> سلسلة نصية تتضمّن تمثيلًا لتدفق البايتات لأي قيمة يمكن تخزينها في PHP، ويمكن للدالة <code>unseriazlie()‎</code> استخدام هذه السلسلة النصية لإعادة إنشاء القيمة الأصلية للمتغيّر. يؤدي تطبيق الدالة <code>serialize()‎</code> على كائن ما لحفظ جميع المتغيرات الخاصة بذلك الكائن، أما التوابع فلا تحفظ وإنّما يحفظ اسم الصنف فقط.
تعيد الدالة <code>serialize()‎‎</code> سلسلة نصية تتضمّن تمثيلًا لتدفق البايتات لأي قيمة يمكن تخزينها في لغة PHP، ويمكن للدالة <code>unseriazlie()‎</code> استخدام هذه السلسلة النصية لإعادة إنشاء القيمة الأصلية للمتغيّر. يؤدي تطبيق الدالة <code>serialize()‎</code> على كائن ما لحفظ جميع المتغيرات الخاصة بذلك الكائن، أما التوابع فلا تحفظ وإنّما يحفظ اسم الصنف فقط.
===[[PHP/OOP/changelog|سجل التغييرات]]===
===[[PHP/OOP|سجل التغييرات]]===
تعرض الصفحة سجلّ التغييرات الحاصلة على نموذج البرمجة كائنية التوجه في الإصدار الخامس من اللغة.
تعرض الصفحة سجلّ التغييرات الحاصلة على نموذج البرمجة كائنية التوجه في الإصدار الخامس من اللغة.


== [[PHP/Namespaces|مجالات الأسماء]] ==
== [[PHP/namespaces|مجالات الأسماء]] ==
شرح طريقة تعريف مجالات الأسماء الأساسية والفرعية، وكيفية استخدامها، مع إجابة عن التساؤلات الشائعة.


===[[PHP/Namespaces/definition|تعريف مجالات الأسماء]]===
== [[PHP/errors|الأخطاء]] ==
تعرّف مجالات الأسماء باستخدام الكلمة المفتاحية namespace، ويجب التصريح عن مجال الأسماء في بداية الملف قبل أي شيفرة أخرى، باستثناء الكلمة المفتاحية <nowiki/>[[PHP/declare|declare]].
تبلغ لغة PHP عن الأخطاء والتحذيرات والملاحظات التي تحدث بسبب المشاكل الحاصلة في وقت التشغيل، وتصبح عملية تنقيح الأخطاء (Debugging) أكثر سهولة عند معرفة كيفية الكشف عن هذه الأخطاء والتعامل معها.
===[[PHP/Namespaces/nested|تعريف مجالات الأسماء الفرعية]]===
== [[PHP/exceptions|الاستثناءات]] ==
كما هو الحال مع المجلدات والملفات فإنّ بالإمكان تحديد تسلسل هرمي لأسماء مجالات الأسماء؛ لذا يمكن تعريف مجالات أسماء فرعية.
يتضمّن الإصدار الخامس من لغة PHP نموذج استثناءات مشابهًا للغات البرمجية الأخرى.
===[[PHP/Namespaces/definitionmultiple|تعريف مجالات أسماء متعددة في نفس الملف]]===
يمكن التصريح عن مجالات أسماء متعددة في الملف نفسه.
===[[PHP/Namespaces/basics|استخدام مجالات الأسماء: الأساسيات]]===
من الضروري قبل الخوض في موضوع استخدام مجالات الأسماء أن تستوعب الطريق التي تتبعها PHP في التعرف على العنصر الذي ينتمي إلى مجال أسماء معين والذي تطلبه الشيفرة الخاصة بك.
===[[PHP/Namespaces/dynamic|مجالات الأسماء وخصائص اللغة الديناميكية]]===
تتأثر طريقة استخدام PHP لمجالات الأسماء بطبيعتها الديناميكية كلغة برمجية.
===[[PHP/Namespaces/nsconstants|الكلمة المفتاحية namespace و الثابت __NAMESPACE__]]===
تقدّم PHP طريقتين للوصول المجرّد إلى العناصر ضمن مجال الأسماء الحالي، وهما الثابت السحري <code>__NAMESPACE__</code> والكلمة المفتاحية <code>namespace</code>.
===[[PHP/Namespaces/importing|استخدام مجالات الأسماء: التسمية بأسماء بديلة/الاستيراد]]===
من الميزات المهمة في مجالات الأسماء هي القدرة على الإشارة إلى اسم خارجي مؤهّل بالكامل (external fully qualified name) باستخدام اسم بديل (alias)، والقدرة على استيراد مجالات الأسماء. هذه الميزة مشابهة للقدرة على إنشاء روابط رمزية للملفات (symbolic links) أو المجلّدات في الأنظمة المبنية على يونكس (unix-based filesystems).
===[[PHP/Namespaces/global|المجال العام]]===
تضع اللغة جميع الأصناف والدوال في المجال العام في حال عدم تعريف أي مجال أسماء، أي كما كان الحال قبل دعم ميزة مجالات الأسماء في PHP.
===[[PHP/Namespaces/fallback|استخدام مجالات الأسماء: اللجوء إلى الدوال/الثوابت العامة]]===
عندما تلاقي اللغة اسمًا غير مؤهّل في اسم صنف أو دالة أو ثابت ما، فإنّها تحلل هذه الأسماء بأولويات مختلفة.
===[[PHP/Namespaces/rules|قواعد تمييز الأسماء]]===
قواعد تمييز الأسماء في PHP.
===[[PHP/Namespaces/faq|الأسئلة المتداولة: أمور يجب عليك معرفتها حول مجالات الأسماء]]===
تقسم هذه الأسئلة المتداولة إلى قسمين: الأسئلة الشائعة، وبعض الاستخدامات التي من المفيد استيعابها بشكل كامل.
== [[PHP/Errors|الأخطاء]] ==
تبلغ PHP عن الأخطاء والتحذيرات والملاحظات التي تحدث بسبب المشاكل الحاصلة في وقت التشغيل، وتصبح عملية تنقيح الأخطاء (Debugging) أكثر سهولة عند معرفة كيفية الكشف عن هذه الأخطاء والتعامل معها.


=== [[PHP/errors|الأساسيات]] ===
== [[PHP/generators|المولدات]] ==
تبلّغ PHP عن الأخطاء الناجمة عن عدد من الأخطاء الداخلية، ويمكن الاستفادة من ذلك في الكشف عن عدد من الحالات المختلفة ويمكن عرضها و/أو تسجيلها حسب الحاجة.
 
تقسم الأخطاء في PHP إلى أنواع مختلفة، وهناك قائمة بهذه الأنواع مع وصف قصير لسلوكها وطريقة حدوثها.
===[[PHP/errors|الأخطاء في PHP 7]]===
تختلف طريقة التبليغ عن معظم الأخطاء في الإصدار السابع من اللغة، فبدلًا من التبليغ عنها بواسطة الميكانيكية الكلاسيكية للتبليغ عن الأخطاء والتي يستخدمها الإصدار الخامس من اللغة، يكون التبليغ عن الأخطاء عن طريق رمي استثناءات الأخطاء (Error exceptions).
== [[PHP/Exceptions|الاستثناءات]] ==
يتضمّن الإصدار الخامس من PHP نموذج استثناءات مشابهًا للغات البرمجية الأخرى.
 
=== [[PHP/Exceptions/extending|توسيع الاستثناءات]] ===
يمكن تعريف صنف <code>Exception</code> خاص من قبل المستخدم وذلك بتوسيع الصنف <code>Exception</code> المُضمَّن في اللغة، وذلك لإنشاء استثناءات خاصة بالمستخدم.
 
== [[PHP/Generators|المولدات]] ==
تقدّم المولِّدات (Generators) طريقة سهلة لاستخدام المكرِّرات (Iterators) البسيطة دون الدخول في تعقيدات استخدام صنف يطبّق الواجهة Iterator.
تقدّم المولِّدات (Generators) طريقة سهلة لاستخدام المكرِّرات (Iterators) البسيطة دون الدخول في تعقيدات استخدام صنف يطبّق الواجهة Iterator.


=== [[PHP/Generators/syntax|صيغة المولدات]] ===
== [[PHP/references|المراجع]] ==
الدالة المولدة مشابهة تمامًا للدالة الاعتيادية، باستثناء أنّ الدالة المولدة تنتج (<code>yield</code>) قيمًا حسب الحاجة بدلًا من إعادة قيمة واحدة.
المراجع (references) في لغة PHP هي وسيلة للوصول إلى محتوى المتغير نفسه باستخدام أسماء مختلفة.
 
تعيد الدالة المولّدة عند استدعائها كائنًا يمكن المرور على عناصره، وعند القيام بذلك (باستخدام حلقة <code>[[PHP/foreach|foreach]]</code> مثلًا) فإنّ PHP ستستدعي الدالة المولدة في كل مرة تحتاج فيها إلى قيمة، ثم تحفظ حالة الدالة المولدة عندما تنتج قيمة وهكذا يمكن الرجوع إلى تلك الحالة عند الحاجة إلى القيمة اللاحقة.
 
=== [[PHP/Generators/comparison|مقارنة المولّدات بكائنات Iterator]] ===
إن الميزة الأساسية التي تتمتّع بها المولّدات هي بساطتها، إذ أنّ الشيفرة المطلوبة أقل بكثير مقارنة باستخدام صنف <code>Iterator</code>، وتكون ذات مقروئية أعلى.
 
== [[PHP/References|المراجع]] ==
المراجع (references) في PHP هي وسيلة للوصول إلى محتوى المتغير نفسه باستخدام أسماء مختلفة.
 
===[[PHP/References/whatdo|ما الذي يمكن للمراجع أن تقوم به؟]]===
هناك ثلاث عمليات أساسية التي يمكن أداؤها باستخدام المراجع: الإسناد بالمرجعية، التمرير بالمرجعية، الإعادة بالمرجعية.
===[[PHP/References/arent|‎‎ما هو غير المقصود بالمراجع؟]]===
المراجع ليست مؤشّرات pointers.
===[[PHP/References/pass|التمرير بالمرجعية]]===
يمكن تمرير المتغيّرات بالمرجعية إلى الدالة لتتمكّن الدالة من تعديل المتغيّر.
===[[PHP/References/return|الإعادة بالمرجعية]]===
تكون الإعادة بالمرجعية مفيدة عندما ترغب في استخدام دالة لمعرفة المتغيّر الذي يجب أن يرتبط المرجع معه.
===[[PHP/References/unset|إلغاء تعيين المراجع]]===
عند إلغاء تعيين المرجع فإنّك تكسر الرابط بين اسم المتغيّر ومحتواه.
===[[PHP/References/spot|الكشف عن المراجع]]===
تُطبّق معظم بنى الصيغ في PHP بواسطة آلية المرجعية. وتُعرّف المراجع عند التصريح عن متغير عام أو في المتغير الزائف <code>‎$this</code> في الكائنات.

المراجعة الحالية بتاريخ 10:39، 7 أكتوبر 2022

ضبط لغة PHP

كيفية ضبط لغة PHP عبر مختلف أنواع ملفات الضبط، وطرائق تعديلها.

بنية لغة PHP

تبيان أنواع وسوم لغة PHP، وطريقة دمجها مع HTML، وشرح بعض خصائصها البنيوية (ومن بينها التعليقات).

أنواع البيانات في لغة PHP

لا يعيّن المبرمج نوع المتغير عادةً، بل تُعيِّنُه لغة PHP أثناء التنفيذ بالاعتماد على محتوى المتغير المستخدم.

القيم المنطقية (boolean)

القيم المنطقية (boolean) من أبسط الأنواع، فالتعبير المنطقي يُعبِّر عن صحّة تعبيرٍ ما، فإما أن تكون قيمة التعبير صحيحةً TRUE أو خطأً FALSE.

الأعداد الصحيحة (integer)

العدد الصحيح هو عدد من المجموعة ℤ = {…, -2, -1, 0, 1, 2, …}‎‎.

الأعداد العشرية (float)

الأعداد العشرية (تعرف أيضا بالأعداد الحقيقة real number أو doubles أو float) هي الأعداد التي تملك قسمًا عشريًا إضافةً إلى القسم الصحيح.

السلاسل النصية (string)

السلسلة النصية هي سلسلة من الأحرف، إذ يكون كل حرف ممثلًا ببايت.

المصفوفات (array)

المصفوفة في PHP هي خريطة (map) مرتّبة، والخريطة هي نوع ترتبط فيه القيم مع المفاتيح.

الكائنات (object)

تُنشَأ الكائنات في PHP بتهيئة صنف (class).

ردود النداء (callables)

يمكن أن الإشارة إلى رد النداء (Callbacks) باستخدام نوع البيانات (callable) منذ إصدار PHP 5.4، وهي الدوال التي تستدعيها دوال أخرى لإجراء عمليات.

المتغيرات التكرارية (iterables)

إن المتغير التكراري Iterable هو شبه نوع (نوع زائف، pseudo-type) عُرِّفَ في الإصدار 7.1 من PHP وهو يقبل أية مصفوفة أو كائن يستخدم واجهة Traversable (أي Traversable interface)، كلا النوعين يمكن تكراره باستخدام حلقة foreach ويمكن أن يُستخدم مع تعبير yield داخل دالة مولِّدة (generator).

الموارد (resources)

المورد هو متغير خاص يحمل مرجعيةً إلى مورد خارجي.

NULL

تمثل القيمة الخاصة NULL متغيرًا دون قيمة، فالقيمة NULL هي القيمة الوحيد الممكنة من نوع البيانات null.

أشباه الأنواع (pseudo-types)

أشباه الأنواع هي كلمات مفتاحيَّة مستخدمة في توثيق لغة PHP لتحديد الأنواع أو القيم التي يمكن أن يمتلكها المعامل ولا يمكن استخدامها في الشيفرات البرمجية.

التعامل مع الأنواع (Type Juggling)

وذلك يتضمن طريقة تحويل الأنواع بين بعضها بعضًا.

المتغيرات

يكون التعبير عن المتغيرات في لغة PHP باستخدام علامة $ متبوعة باسم المتغير والذي يكون حساسًا لحالة الأحرف.

المتغيرات المعرفة مسبقًا

تقدّم لغة PHP عددًا كبيرًا من المتغيرات المعرّفة مسبقًا ضمن الشيفرات العاملة بهذه اللغة.

نطاق المتغيرات

النطاق (scope) هو السياق الذي تعرّف ضمنه المتغيرات.

المتغيرات المتغيرة

قد تحتاج في بعض الأحيان إلى استخدام أسماء متغيّرة للمتغيرات، بمعنى أن تعيين اسم المتغيّر واستخدامه يكون بصورة ديناميكية. المتغيّر المتغير (variable variable) يأخذ قيمة متغيّر معين ويستخدمه كاسم لمتغير آخر. 

المتغيرات من مصادر خارجية

وتأتي هذه المتغيرات أساسيًا عبر GET و POST (والكعكات).

الثوابت

الثابت هو معرّف (اسم) لقيمة بسيطة، وكما هو واضح من الاسم فإنّ هذه القيمة غير قابلة للتبديل أثناء تنفيذ الشيفرة.

التعابير (Expressions)

تعدّ التعابير إحدى الوحدات البنائية الأكثر أهمية في لغة PHP، ففي هذه اللغة كل ما تكتبه تقريبًا هو عبارة عن تعبير، لذا فإن أبسط وأدقّ تعريف للتعابير هو: "كلّ ما يمتلك قيمة".

العوامل في لغة PHP

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

أولوية العوامل (Operator Precedence)

المقصود بأولوية العوامل هو تحديد مدى "قوة" ربط العامل لتعبيرين مع بعضهما البعض.

العوامل الحسابية (Arithmetic Operators)

العوامل الحسابية الرياضية الأساسية (كالجمع والضرب والقسمة ...إلخ.).

عوامل الإسناد (Assignment Operators)

العامل "=" هو عامل الإسناد الأساسي. قد تظنّ للوهلة الأولى أن هذا العامل يعني "المساواة"، ولكنّه ليس كذلك. وظيفة هذا العامل هي ربط قيمة التعبير الموجود على جانبه الأيمن بالتعبير الموجود على الجانب الأيسر.

عوامل الأعداد الثنائية (Bitwise Operators)

تتيح عوامل الأعداد الثنائية تقدير ومعالجة بتات معينة ضمن العدد الصحيح.

عوامل المقارنة (Comparison Operators)

تتيح عوامل المقارنة -كما هو واضح من اسمها- مقارنة قيمتين مختلفتين.

عوامل التحكم بالأخطاء (Error Control Operators)

تدعم لغة PHP عاملًا واحدًا للتحكّم بالأخطاء وهو علامة (@). تتجاهل لغة PHP جميع الأخطاء الناتجة من أي تعبير تُلحق به هذه العلامة.

عوامل التنفيذ (Execution Operators)

تدعم لغة PHP عامل تنفيذ واحد هو العلامة (``) ‏backtics، ويجب الانتباه إلى أنها ليست علامة الاقتباس المفردة. ستحاول لغة PHP تنفيذ ما هو مكتوب ضمن هذه العلامتين على أنّه من أوامر الصدفة، وستعيد الناتج.

عوامل الزيادة والنقصان (Incrementing/Decrementing Operators)

تدعم لغة PHP عوامل الزيادة والنقصان السابقة واللاحقة المماثلة للعوامل المستخدمة في لغة C.

العوامل المنطقية (Logical Operators)

وهي العوامل التي تستعمل في العمليات المنطقية (مثل AND و OR و XOR ...إلخ.).

عوامل السلاسل النصية (String Operators)

هناك عاملان للسلاسل النصية. الأول هو عامل الربط ('.') والذي يربط بين المعاملين الموجودين على جانبيه. العامل الثاني هو عامل الربط الإسنادي ('‎.=‎') والذي يُلحق المعامل الموجود في الجهة اليمنى بالمعامل الموجود في الجهة اليسرى.

عوامل المصفوفات (Array Operators)

هي العوامل التي تجرى عملياتها على المصفوفات.

عوامل الأنواع (Type Operators)

تستخدم instanceof لتحديد ما إذا كان المتغير كائنًا مهيّئًا من صنف معين.

بنى التحكم

if

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

else

قد ترغب في كثير من الأحيان تنفيذ عبارة معينة عند تحقق شرط معين وتنفيذ عبارة أخرى في حال عدم تحقق الشرط. هنا يأتي دور else، والتي تعمل على تمديد عبارة if لتنفيذ عبارة أخرى في حال أدّى حساب عبارة if إلى النتيجة FALSE.

elseif/else if

كما هو واضح من الاسم فإنّ هذه العبارة هي مزيج من if و else، وكما هو الحال مع else يمكن توسيع عبارة if لتنفيذ عبارة أخرى في حال كانت نتيجة تعبير if هي FALSE. ولكن، على العكس من else، فإن elseif تنفذ ذلك التعبير البديل في حالة واحدة فقط وهي أن تكون نتيجة التعبير الشرطي المتعلق بعبارة elseif هي TRUE

while

تعد حلقات while التكرارية أبسط أنواع الحلقات في لغة PHP، وتعمل بطريقة مماثلة لنظيرتها في لغة C.

do-while

حلقات do-while مشابهة جدًّا لحلقات while، باستثناء أنّها عملية التحقق من الشرط تحدث في نهاية الدورة بدلًا من بدايتها. ما يميز هذه الحلقات عن حلقات while هو أنّ الدورة الأولى في حلقات do-while ستنفّذ في جميع الأحوال (تحدث عملية التحقق في نهاية الدورة فقط) في حين أن الدورة الأولى في حلقات while قد لا تنفّذ بالضرورة (تحدث عملية التحقق في بداية كل دورة، وإن كانت النتيجة FALSE منذ البداية تتوقف الحلقة عن العمل مباشرة).

for

تعدّ حلقات for النوع الأكثر تعقيدًا من الحلقات في لغة PHP، وهي مشابهة لنظيرتها في لغة C.

foreach

تقدّم بنية foreach طريقة سهلة للتنقل بين عناصر المصفوفات، وتعمل هذه البنية مع المصفوفات والكائنات فقط، ويؤدي استخدامها مع متغير ذي نوع بيانات مختلف أو متغير غير مهيئ إلى إطلاق خطأ.

break

تنهي break تنفيذ حلقات for أو foreach أو while أو do-while أو بنية switch.

continue

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

switch

تشبه عبارة switch سلسلةً من عبارات if مطبّقة على نفس التعبير. قد تحتاج في بعض الأحيان إلى مقارنة نفس المتغير (أو التعبير) مع قيم مختلفة (حالات cases)، وتنفيذ شيفرة مختلفة بالاعتماد على ذلك، وهذه هي وظيفة عبارة switch.

declare

تستخدم بنية declare لتعيين موجّهات التنفيذ (execution directives) لكتلة من الشيفرة، وصيغة declare مشابهة لبنى التحكم في تدفق الشيفرة.

return

تعيد تنفيذ البرنامج إلى الوحدة التي قامت بالاستدعاء، وسيستمر التنفيذ إلى التعبير الذي يلي تعبير الاستدعاء.

require

العبارة require مطابقة للعبارة include باستثناء أنّها تطلق خطأ من نوع E_COMPLE_ERROR في حال فشلها في جلب الملف.

include

تعمل عبارة include على تضمين ومعالجة الملف المحدّد.

require_once

عبارة require_once مطابقة للعبارة require باستثناء أن لغة PHP ستتحقق مما إذا كان الملف مضمّنًا أم لا، وذلك لتجنّب تضمينه (require) مرة أخرى.

include_once

تُضمِّن العبارة include_once الملفّ المحدد وتعالجه أثناء تنفيذ الشيفرة. هذه السلوك مشابه لعبارة include والفرق الوحيد هنا هو إن كانت شيفرة ذلك الملف مضمّنة من قبل فإنّها لن تُضمِّنَه مرة أخرى، وترجع include_once القيمة TRUE، وهذا السلوك متوقع من اسم العبارة.

goto

يمكن استخدام عامل goto للانتقال إلى قسم آخر في البرنامج.

الدوال

الدوال المعرّفة من طرف المستخدم

تتبع أسماء الدوالّ نفس القواعد المتبّعة في اللغة للتسمية. يبدأ الاسم الصحيح للدالة بحرف أو شرطة سفلية، متبوعًا بأيّ عددٍ من الحروف أو الأرقام أو الشرطات السفلية. ويمكن التعبير عن هذه الصيغة باستخدام التعابير النمطية بالصورة التالية: ‎[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*‎.

معاملات الدوال

يمكن تمرير المعلومات إلى الدوالّ بواسطة قائمة المعاملات argument list، وهي قائمة من التعابير المفصولة بالعلامة (,)، وتُعالج هذه المعاملات من اليسار إلى اليمين.

إعادة القيم

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

الدوال المتغيّرة

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

الدوال الداخلية (المضمّنة)

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

الدوال المجهولة

الدوال المجهولة (anonymous functions) التي تُعرَف أيضًا بالمصطلح (closures) تسمح بإنشاء دالة ليس لها اسم محدد. غالبًا ما تستخدم هذه الدوال للحصول على قيمتها كمعاملات استدعاء راجع callback، ولها استخدامات أخرى.

البرمجة كائنية التوجه في لغة PHP

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

الخاصيات

تطلق تسمية "الخاصيات properties" على المتغيّرات المعرّفة ضمن الأصناف، وهناك تسميات أخرى مثل "المعاملات" أو "الحقول"، ولكن سنستخدم التسمية الأولى "الخاصيات" في هذا الدليل. تعرّف الخاصيات باستخدام إحدى الكلمات المفتاحية public، أو protected، أو private تتبعها عبارة تصريح عن متغير اعتيادي. يمكن أن يتضمّن هذا التصريح عملية تهيئة initialization، ولكن يجب أن تكون هذه التهيئة ذات قيمة ثابتة، بمعنى أنّه يجب أن تكون قابلة للمعالجة في وقت التصريف ويجب أن لا تعتمد على المعلومات المتاحة في وقت التشغيل لغرض المعالجة.

ثوابت الأصناف

يمكن تعريف قيم ثابتة لا يمكن تعديلها ولكل صنفٍ على حدة. تختلف الثوابت عن المتغيرات الاعتيادية في عدم استخدام العلامة $ للتصريح عنها أو استخدامها. تمتلك ثوابت الأصناف قابلية رؤية من نوع public.

التحميل التلقائي لأصناف لغة PHP

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

لم يعد هذا الأمر ضروريًا في الإصدار الخامس من اللغة، إذ تسجّل الدالة spl_autoload_register()‎‎ عددًا غير محدّدٍ من المحمّلات التلقائية لتتيح إمكانية التحميل التلقائي للأصناف والواجهات غير المعرّفة في ملف الشيفرة. يمنح تسجيلُ المحمّلات التلقائية اللغةَ فرصة أخيرة لتحميل الصنف أو الواجهة قبل أن تتوقف الشيفرة عن العمل وتطلق خطأً.

التوابع البانية والهادمة

تتيح لغة PHP للمطورين التصريح عن تابع بانٍ في الأصناف. كل صنف يمتلك تابعًا بانيًا يستدعي هذا التابع مع كل كائن جديد يُنشأ من ذلك الصنف؛ لهذا يعد هذا التابع ملائمًا لعمليات التهيئة التي قد يحتاج لها الكائن قبل استخدامه.

يقدّم الإصدار 5 من لغة PHP مفهوم الدوال الهادمة وهو مفهوم شائع في لغات البرمجة كائنية التوجّه مثل C++‎. تُستدعى الدالة الهادمة عندما لا يكون هناك أي مرجع لكائن معين.

قابلية الرؤية

يمكن تعريف قابلية رؤية خاصية أو تابع أو (بدءًا من الإصدار 7.1.0 من اللغة) ثابت بأنّها إلحاق صيغة التصريح بإحدى الكلمات المفتاحية public، أو protected، أو private. يتيح التصريح من نوع public الوصول إلى أعضاء الصنف من أي مكان، ويتيح التصريح من نوع protected الوصول إلى الأعضاء من داخل الصنف نفسه أو الأصناف التي ترث الصنف أو تورّثه، أما التصريح من نوع private فيتيح الوصول إلى الأعضاء من داخل الصنف الذي عرِّف فيه ذلك العضو حصرًا.

وراثة الكائنات

وراثة الكائنات من المبادئ المعروفة في البرمجة كائنية التوجه وتستخدمه لغة PHP في نموذج الكائنات الخاصّ بها. يؤثّر هذا المبدأ على العلاقة التي تربط بين الأصناف والكائنات.

عامل تحليل النطاق (::)

يسمح عامل تحليل النطاق (Scope Resolution Operator) بالوصول إلى الخاصيات والتوابع من نوع static، أو المتجاوز عليها أو الثوابت الخاصة بصنف معين.

الكلمة المفتاحية Static

يمكن استخدام static أيضًا لتعريف المتغيرات الساكنة والروابط الساكنة اللاحقة (late static bindings).

تجريد الأصناف

يقدّم الإصدار الخامس من اللغة الأصناف والتوابع المجرّدة. لا يمكن تهيئة الأصناف المجرّدة، وإذا احتوى الصنف على تابع مجرّد واحدٍ على الأقل فيجب أن يكون الصنف مجردًا أيضًا. تصرّح الأصناف المجرّدة ببساطة عن توقيع التابع (method's signature)، ولا يمكنها تعريف الاستخدام (implementation).

واجهات الكائنات

تتيح واجهات الكائنات إنشاء شيفرة تحدّد التوابع التي يجب أن يتضمّنها الصنف دون الحاجة إلى تعريف آلية التحكّم في هذه التوابع.

تعرّف الواجهات بنفس طريقة تعريف الأصناف، ولكن باستخدام الكلمة المفتاحية interface بدل الكلمة المفتاحية class ودون تعريف محتوى أيّ تابعٍ في الواجهة.

السمات

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

الأصناف المجهولة

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

التحميل الزائد

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

Object Iteration

يقدّم الإصدار الخامس من اللغة طريقة لتعريف العناصر ليكون بالإمكان المرور على قائمة من العناصر باستخدام العبارة foreach على سبيل المثال، وتستخدم جميع الخصائص المرئية بصورة افتراضية لعملية المرور على العناصر.

التوابع السحرية

التوابع السحرية في أصناف لغة PHP هي:

  • ‎__construct()
  • ‎__destruct()
  • ‎__call()
  • ‎__callStatic()
  • ‎__get()
  • ‎__set()‎ 
  • __isset()
  • __unset()‎‎
  • ‎__sleep()
  • __wakeup()
  • ‎__toString()‎ 
  • __invoke()‎ 
  • _‎_set_state()‎ 
  • __clone()
  • ‎__debugInfo()

ولا يمكنك استخدام دوالّ تحمل هذه الأسماء في أي صنف ما لم تكن ترغب في الاستفادة من الوظيفة السحرية التي تتمتّع بها.

الكلمة المفتاحية final في لغة PHP

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

استنساخ الكائنات

أي نسخ الكائن مع خاصياته كلها.

مقارنة الكائنات

يمكن إجراء مقارنة بسيطة بين متغيرات الكائنات باستخدام عامل المقارنة (==)، وتكون نسختا الكائن متساويتين إن كانتا تملكان نفس المعاملات ونفس القيم (تقارن القيم باستخدام ====) وكانتا نسختين لنفس الصنف.

عند استخدام عامل التطابق (===) تكون متغيرات الكائنات متطابقة عندما تشير فقط وفقط إذا إلى النسخة نفسها من الصنف نفسه.

التلميح عن الأنواع

تسمح خاصية التصريح عن الأنواع للدوال بطلب النوع المحدّد من المعاملات في وقت الاستدعاء، وإن كانت القيمة المستدعاة ذات نوع مغاير، تطلق اللغة خطأ من نوع recoverable fatal في الإصدار 5، أما في الإصدار 7 فترمي اللغة استثناءً من نوع TypeError.

ولتحديد النوع الذي ترغب في التصريح عنه، يجب إضافة اسم النوع قبل اسم المعامل، ويمكن قبول قيم NULL وذلك بتعيين NULL كقيمة افتراضية للمعاملات.

الروابط الساكنة المتأخرة

تضمن الإصدار 5.3.0 من لغة PHP خاصية تدعى بالروابط الساكنة المتأخرة (late static bindings) والتي يمكن استخدامها للإشارة إلى الصنف المستدعى في سياق وراثة ساكنة.

الكائنات والمراجع

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

سَلسَلة الكائن

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

سجل التغييرات

تعرض الصفحة سجلّ التغييرات الحاصلة على نموذج البرمجة كائنية التوجه في الإصدار الخامس من اللغة.

مجالات الأسماء

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

الأخطاء

تبلغ لغة PHP عن الأخطاء والتحذيرات والملاحظات التي تحدث بسبب المشاكل الحاصلة في وقت التشغيل، وتصبح عملية تنقيح الأخطاء (Debugging) أكثر سهولة عند معرفة كيفية الكشف عن هذه الأخطاء والتعامل معها.

الاستثناءات

يتضمّن الإصدار الخامس من لغة PHP نموذج استثناءات مشابهًا للغات البرمجية الأخرى.

المولدات

تقدّم المولِّدات (Generators) طريقة سهلة لاستخدام المكرِّرات (Iterators) البسيطة دون الدخول في تعقيدات استخدام صنف يطبّق الواجهة Iterator.

المراجع

المراجع (references) في لغة PHP هي وسيلة للوصول إلى محتوى المتغير نفسه باستخدام أسماء مختلفة.