دورة في برمجة مواثع الانترنت php 8 الفصل الثالث (أساسيات بناء النص في php 8)

أضف رد جديد
MANAGER
مدير الموقع
مشاركات: 1783
اشترك في: الجمعة ديسمبر 20, 2024 12:05 pm

دورة في برمجة مواثع الانترنت php 8 الفصل الثالث (أساسيات بناء النص في php 8)

مشاركة بواسطة MANAGER »

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

<?php
// code goes here
?>


كما ذكرنا سابقًا، يجب وضع كل كود PHP بين علامتي <?php و?>. ينظر خادم الويب أولاً إلى الملف الذي ينتهي بـ (.php) للحصول على إشارة إلى وجود كود PHP. بمجرد تحديد وجوده، فإنه يستخدم العلامات للإشارة إلى موقع الكود.

<h1>أنا أحب الطماطم الخضراء</h1>
<?php
print "The greener the better!";
?>
<h2>My partner hates Green Tomatoes</h2>
<?php
print "Yes I do!";
?>

خارج العلامات، يمكن لملف PHP أن يحتوي على كود HTML وCSS و/أو JavaScript. وكما هو موضح
سابقًا، يمكن توزيع كود PHP في مناطق مختلفة من الملف (صفحة الويب) عن طريق
استخدام علامتي الفتح والإغلاق ببساطة. ومع ذلك، في كل مرة يحدث هذا، فإنه يتطلب
إرسال الكود إلى مُفسِّر PHP للمعالجة. لذا، لا تنجرف
بحماس شديد
مع الإثارة المترتبة على القيام بذلك.
يمكن إنشاء التعليقات باستخدام // (كما هو موضح سابقًا). لا يتم تنفيذ التعليقات. ومع ذلك، فهي مهمة جدًا. توفر البرمجة الجيدة التعليقات
حتى يتمكن الآخرون من فهم أي كود معقد. لقد ولت الأيام التي كان فيها شخص واحد فقط هو الذي يتولى صيانة البرنامج. أي شخص يدعم الكود الذي أنشأته سوف يقدر حقًا
الجهد الذي تبذله في تقديم التعليقات.
<?php
// الوصف: ينتج هذا البرنامج تقرير مبيعات شهريًا


المدخلات: معرف القسم (DID)، اسم القسم (DN): DepartTBL
// معرف القسم (DID)، تاريخ المبيعات (Date)، مبلغ المبيعات (SA): SaleTBL
// من قاعدة بيانات widgetTools (mySQL 8)
// المخرجات: تقرير مبيعات الأدوات الشهرية (widgetsales.html)
// التحديثات: (02/12/2018) : تعديل تنسيق الإخراج، سيكستون جونز:
المبرمج
?>
تتابع العديد من المؤسسات إدارة التغيير داخل البرنامج من خلال
توفير التفاصيل حول من أنشأ البرنامج، ومتى تم إنشاؤه، وأي تغييرات
حدثت. يمكن أن توفر التعليقات أيضًا قائمة بالمدخلات والمخرجات الخاصة ببرنامج

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

<?php
print "Hello World";
?>


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

<?php
myFunction("Hello World");
?>


تخزن المتغيرات المعلومات مؤقتًا في الذاكرة. في معظم الحالات، لا يتطلب PHP منك
إعلان نوع بيانات عند استخدام متغير.
يصف نوع البيانات البيانات التي تخطط لتخزينها، مثل السلاسل (النص) أو الأعداد الصحيحة
(الأعداد الصحيحة) أو الأعداد العشرية. تستخدم هذه المعلومات بواسطة
نظام التشغيل لتحديد مقدار المساحة المطلوبة لتخزين المعلومات.
منذ PHP 7، قدم المطورون خيار إعلان أنواع البيانات في
العديد من المواقف. من الجيد إعلان أنواع البيانات عندما تريد تحديد نوع
البيانات المراد تخزينها في الذاكرة. تذكر أن PHP ستقوم بتحويل نوع البيانات (مثل
تحويل السلسلة "10" إلى رقم 10) ما لم توقفها. سنقدم المزيد
من الأمثلة قريبًا. ولكن أولاً، دعنا نلقي نظرة على الطريقة القياسية لإعلان المتغيرات في PHP.

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

$first_number = 0;

$second_Number = 1;

$number1 = 12;

المفتاح هو أن تكون متسقًا داخل الكود الخاص بك مع أي نمط تختاره. لا توجد حقًا ميزة فيما يتعلق بأي تنسيق أفضل. على الرغم من ذلك، سيكون الكثير من المبرمجين سعداء بإخبارك برأيهم! في رأيي، يجب عليك استخدام أسماء ذات معنى مثل
"total_Sales". كما يتضمن البعض أيضًا نوع البيانات في الاسم، مثل "int_Total_Sales". في البرامج
الكبيرة، سيكون من الأسهل بكثير تتبع استخدام المتغيرات باستخدام اتفاقية تسمية جيدة.
يجب أن تتضمن المتغيرات دائمًا $ كحرف أول وأحرف أبجدية رقمية أخرى لإكمال الاسم. يمكنك أيضًا تضمين الشرطة السفلية (_). ومع ذلك، لا يُسمح بأي رموز أو مسافات خاصة أخرى.

في المثال التالي، سيحتفظ المتغير ($result) بكل ما يتم إرجاعه بواسطة دالة تسمى addIt. نظرًا لأننا لم نعلن عن نوع بيانات، فقد يحتفظ هذا المتغير بنتيجة رقمية أو نتيجة سلسلة أو أي تنسيق آخر ممكن. كمبرمجين، قد نرغب في هذه المرونة. على سبيل المثال، إذا كانت الدالة قادرة على إنتاج نتيجة، فإننا نعيد النتيجة. إذا لم تكن قادرة على إرجاع نتيجة، فيمكننا إرجاع سلسلة ("نتيجة غير صالحة") أو يمكننا إرجاع NULL (التي تشير إلى عدم وجود نتيجة، على عكس تمرير صفر).

نظرًا لأن هذه الدالة تقبل معاملين (12، 13)، نفترض أنها ستضيف
الأرقام معًا وتعيد النتيجة. ثم ستعرض عبارة الطباعة كل ما هو موجود في المتغير.

ملاحظة بينما تستخدم معظم الأمثلة في هذا الكتاب عبارة الطباعة لعرض
المعلومات، فإن عبارة echo تُستخدم أيضًا بشكل شائع جدًا.

<?php
$result = addIt(12, 13);
طباعة $result;
?>



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

<?php
$result = addIt(12.1, 13.3);
print $result;
?>
<?php
$result = addIt(12, "13");
print $result;
?>


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

$myValue = "Help";

2. تم تعيين نوع البيانات على عدد صحيح (أعداد صحيحة).

$myValue = 123;

3. ينتج عن إضافة عددين صحيحين معًا عددًا صحيحًا يتم تخزينه بعد ذلك في
المتغير.

$myValue = 123 + 456;
النتيجة: يحتوي $myValue الآن على 579
4. ينتج عن إضافة عددين عشريين معًا عددًا عشريًا
مخزنًا في المتغير.
$myValue = 123.123 + 123.456;
النتيجة: يحتوي $myValue الآن على 246.579

5. ينتج عن إضافة عدد عشري إلى عدد صحيح عدد عشري.
$myValue = 123.233 + 12;
النتيجة: $myValue الآن يحتوي على 135.233
6. ستكون محاولة إضافة رقم إلى رقم سلسلة ناجحة، إذا كان من الممكن تحويل السلسلة إلى رقم. سيؤدي جمع القيم معًا إلى نتائج مماثلة للأمثلة
السابقة.

$myValue = 123 + "456";

النتيجة: $myValue الآن يحتوي على 579
يمكن استخدام حرف ربط السلسلة (.) لدمج السلسلتين
معًا. يمكن بعد ذلك وضع النتيجة في المتغير (الذي خمنت أنه يحتوي الآن على سلسلة). في المثال التالي، يتم دمج السلسلتين الموجودتين معًا
لإنشاء سلسلة جديدة مخزنة في $myValue.

$myValue = "Help" . " me!";

النتيجة: $myValue الآن يحتوي على "Help me!"
1. عند دمج سلسلة وعدد صحيح، سيحول PHP العدد الصحيح إلى سلسلة (123)
للسماح بربطها بالسلسلة الأخرى (Help ) لإنتاج سلسلة "Help 123"
والتي سيتم وضعها في المتغير.

$myValue = "Help " . 123;

النتيجة: $myValue تحتوي الآن على "Help 123"
2. كما هو موضح في الفصل 1، عند محاولة الدمج بسلسلة وقيمتين
(والتي في هذه الحالة سيتم إضافتهما معًا)، سيقوم PHP أولاً بإجراء الحساب ثم
تحويل النتيجة إلى سلسلة.

$num1 = 1;
$num2 = 2;
$myValue = "Help " . $num1 + $num2;

النتيجة: تحتوي $myValue الآن على "Help 3"
(سينتج المثال 2 رسالة خطأ إذا تم محاولة ذلك في أي إصدار من اللغة
قبل PHP 7.5.)

في PHP 7، تم تقديم تلميحات نوع البيانات. يتيح هذا للمطور القدرة على
تحديد نوع البيانات التي يمكن تمريرها إلى أو من دالة أو كائن.


<?php
function myFunction(bool $value = null) : bool {}
?>
في المثال السابق، تحدد الدالة $value بحيث تحتوي فقط على قيم من النوع Boolean (true/
false). كما تحدد القيمة المعادة لتكون Boolean.
<?php
$value = myFunction();
$value = myFunction(true);
?>



4,834 / 5,000
يمكن أن تكون كل من العبارتين السابقتين صحيحة عند استدعاء الدالة myFunction. إذا لم يتم تمرير أي قيمة، فسيتم تعيين المتغير $value على القيمة الافتراضية،
وهي null. يشير Null إلى أن المتغير فارغ. ومع ذلك، يمكننا أيضًا تمرير قيمة منطقية (true) والتي سيتم استخدامها بدلاً من null.
حتى يتم فرض نوع البيانات، يجب أن تكون العبارة التالية
هي العبارة الأولى في كود php:
<?php announce(strict_types=1);

إذا لم يتم تضمين عبارة strict type، فسيحاول php تحويل أنواع البيانات عندما

يكون ذلك ممكنًا، مما قد يتسبب في قبول الدالة أو الكائن لبيانات غير صالحة، مما قد يتسبب في
إما في نتائج غير صالحة أو، الأسوأ من ذلك، يتسبب في قيام البرنامج بطرح استثناء (شرط خطأ). سننظر في أمثلة إضافية عندما ننظر إلى الدوال والمصفوفات والكائنات.
تعمل العمليات الحسابية بطريقة مماثلة للرياضيات. الاستثناء هو أن
الحساب يتم على الجانب الأيمن من عامل التعيين (الجانب الأيمن من علامة =) ويتم وضع النتيجة في المتغير أو الدالة أو الكائن الآخر على الجانب الأيسر
من التعبير. يتضمن PHP بالفعل العديد من الدوال لإنتاج النتائج التي تظهر على
الآلة الحاسبة.
لمزيد من المعلومات حول الدوال الرياضية المتاحة، تفضل بزيارة www.php.net/manual/
en/ref.math.php.

تسمح لك PHP باستخدام الأقواس () لتغيير الترتيب الذي يتم به حساب القيم. بخلاف ذلك، بالنسبة للقيم العددية، تتبع اللغة عادةً ترتيبًا رياضيًا للعمليات. هذا الترتيب مشابه للرياضيات العادية ولكنه يحتوي على بعض
الاختلافات. سنرى بعضًا منها أثناء استكشافنا لبقية الكتاب.
لمزيد من المعلومات حول ترتيب العمليات، تفضل بزيارة www.php.net/manual/en/
language.operators.precedence.php.
دعونا نلقي نظرة على بعض الأمثلة:
1. سيأخذ عامل الإسناد (=) القيمة من الجانب الأيمن من
التعبير (1) ويضعها في المتغير ($my_num) على الجانب الأيسر من التعبير.
إذا لم يكن المتغير موجودًا، فسيتم إنشاؤه في الذاكرة.
$my_num = 1؛

2. تضيف كل من العبارتين التاليتين القيمة الموجودة على الجانب الأيمن من التعبير
($my_num) إلى المحتوى الموجود في المتغير ($value) على الجانب الأيسر من
التعبير. إذا لم يكن المتغير موجودًا من قبل، فسيتم إضافة صفر إلى القيمة الموجودة على
الجانب الأيمن ويتم وضع النتيجة في المتغير ($value). إذا كانت هناك سلسلة موجودة في
المتغير، فسيتم محاولة تحويلها إلى رقم قبل إضافتها.

$value += $my_num؛
$value = $value + $my_num؛

3. هذه العبارة مشابهة للعبارة رقم 2، باستثناء أن القيمة الموجودة على الجانب الأيمن تُطرح من
القيمة الموجودة في المتغير. إذا لم يكن المتغير موجودًا مسبقًا، يتم طرح القيمة
على الجانب الأيمن ($my_num) من 0. إذا كانت هناك سلسلة موجودة في المتغير، فسيتم
محاولة تحويلها إلى رقم.

$value -= $my_num;

$value = $value - $my_num;

4. هذه العبارة مشابهة لـ #3، باستثناء أن القيمة مضروبة بدلاً من طرحها.

إذا لم يكن المتغير موجودًا مسبقًا، يتم
ضرب القيمة الموجودة على الجانب الأيمن ($my_num) في 0. إذا كانت هناك سلسلة موجودة في المتغير، فسيتم
محاولة تحويلها إلى
رقم.

$value *= $my_num;

$value = $value * $my_num;

5. هذه العبارة مشابهة لـ #4، باستثناء أن القيمة من الجانب الأيمن ($my_num)
مقسمة إلى القيمة الموجودة في المتغير. ستعيد عملية القسمة رقمًا بفاصلة عائمة، ما لم تكن القيمتان عددين صحيحين ومقسمتين بالتساوي (بدون أي خانات عشرية). إذا كانت هناك سلسلة نصية موجودة في المتغير، فستتم محاولة تحويلها إلى رقم.

احذر، إذا لم يكن المتغير $my_num موجودًا، فسيتم تعيينه على 0. سيؤدي هذا إلى
إلقاء استثناء لأنك لا تستطيع القسمة على الصفر!

$value /= $my_num;

$value = $value / $my_num;

توفر الملاحظة 8 الدالة fdiv() التي ستعيد F (ما لا نهاية له)، أو -F
(ما لا نهاية له سالب)، أو (ليس رقمًا)، بدلاً من إلقاء استثناء، عند
القسمة على الصفر.

6. هذه العبارة مشابهة للبيان رقم 5، باستثناء أن باقي القسمة يتم وضعه في
المتغير. إذا كانت هناك سلسلة نصية موجودة في المتغير، فستتم محاولة تحويلها إلى
رقم.
تنبيه، إذا لم يكن المتغير $my_num موجودًا، فسيتم تعيينه على 0. سيؤدي هذا إلى
إلقاء استثناء لأنك لا تستطيع القسمة على الصفر!

$value %= $my_num;

$value = $value % $my_num;

7. سترفع هذه العبارة $value إلى القوة الموجودة في $my_num وتضع النتيجة مرة أخرى في $value.

$value = $value ** $my_num;

8. يمكن زيادة/إنقاص المتغيرات قبل استخدامها (++$num,
--$num)، أو بعد استخدامها ($num++, $num--).
(افترض أن $num = 1 قبل تنفيذ كل عبارة.)

$value = $num++ - 5; // $value is -4, $num is 2

$value = $num-- + 5; // $value is 6, $num is 0

$value = ++$num – 5; // $value = -3، $num = 2
$value = --$num + 5؛ // $value = 5، $num = 0


تحدد العبارات الشرطية ما إذا كانت المقارنة "صحيحة" أو "خاطئة". إذا كانت العبارة
صحيحة، فسيتم تنفيذ الكود الموجود بعد عبارة if مباشرةً. إذا كانت العبارة
خطأً، فسيتم تنفيذ الكود الموجود بعد عبارة else (إذا كان هناك واحد). على عكس عامل التعيين
(=)، الموضح في القسم السابق، تتطلب مقارنة قيمتين لتحديد ما إذا كانتا متساويتين
علامتي مساواة (==) أو ثلاث علامات مساواة (===). تتجاهل العلامتان حالة الأحرف أو نوع البيانات.

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

if(statement to compare) {
// Executed if the comparison is true
}

// الكود بعد تنفيذ عبارة if سواء كانت النتيجة
true أو false

if(statement to compare) {
// Executed if the comparison is true
}
else {
// Executed if the comparison is false
}
// الكود بعد تنفيذ عبارة if/else سواء كانت النتيجة
true أو false
يتم عرض البنية الأساسية لعبارة الشرط هنا. في المثال الأول، يتم تنفيذ
الكود داخل عبارة if فقط إذا كانت العبارة صحيحة. لا يتم تنفيذ أي كود إضافي
إذا كانت العبارة خاطئة. في المثال الثاني، يتم توفير الكود بعد عبارة
else ليتم تنفيذها إذا كانت العبارة خاطئة. يمكن أيضًا استخدام عبارات if/else المضمنة. سنوضح استخدام هذه الهياكل في فصل آخر.
دعونا نلقي نظرة على بعض الأمثلة باستخدام عبارات شرطية مع عوامل مقارنة:
1.

<?php
$a = 25; $b = 36;
if( $a == $b) {
print "$b equals $a";
}
else {
print "$b and $a are not equal";
}
?>
الإخراج: 36 و25 غير متساويين.
السبب: القيمة في $a (25) و$b (36) ليست هي نفسها. وبالتالي، سيتم تنفيذ الكود الموجود في قسم else.

2.
<?php
$a = "a"; $b = "A";
if( $a === $b) {
print "$b equals $a";
}
else {
print "$b and $a are not equal";
}
?>

الإخراج: A and a are not equal.
السبب: استخدام ثلاث علامات مساواة (===) يقارن أيضًا بين الحالات. في هذا المثال، تكون المقارنة خاطئة بسبب الحالة. إذا قمت بإزالة إحدى علامات المساواة، فستصبح النتيجة
صحيحة.
لاحظ هذا المثال، يتم استخدام علامات الاقتباس المزدوجة مما يؤدي إلى إنشاء سلسلة. نظرًا لأن كل علامة من هذه العلامات عبارة عن حرف واحد فقط، فقد يكون من الممكن أيضًا استخدام علامات الاقتباس المفردة

<?php
$a = 25; $b = 36;
if( $a != $b) {
print "$b and $a are not equal";
}
else {
print "$b and $a are equal";
}
?>



الإخراج: 36 و25 غير متساويين.
السبب: يعمل عامل not (!) في عكس نتائج عامل equals (انظر
#1). يتم عكس الشرط من حالة false إلى حالة true. يتم تنفيذ الكود الموجود مباشرة بعد تعبير if.
4.
<?php
$a = "A"; $b = "a";
if( $a !== $b) {
print "$b and $a are not equal";
}
else {
print "$b and $a are equal";
}
?>

الإخراج: a and A are not equal.
السبب: يعمل عامل الحالة (!==) في عكس عامل الحالة (انظر رقم 2).
تصبح المقارنة صحيحة. يتم تنفيذ الكود الموجود مباشرة بعد عبارة if.
5.
<?php
$a = 25.1; $b = 36;
if( $a < $b) {
print "$a is less than $b";
}
else {
print "$b is greater than $a";
}
?>

الإخراج: 25.1 is less than 36.
السبب: تعيد Less than القيمة true إذا كانت القيمة على اليسار أقل من القيمة على اليمين.

في PHP 8، يمكننا مزج مقارنات الفاصلة العائمة (العشرية) والأعداد الصحيحة (الأعداد الصحيحة).
في هذا المثال، سيتم تحويل 36 إلى 36.0 قبل مقارنتهما.
6.
<?php
$a = 36; $b = 36;
if( $a <= $b) {
print "$a is less than or equal to $b";
}
else {
print "$b is greater than $a";
}
?>


الإخراج: 36 is less than or equal to 36.
السبب: تعمل مقارنة أقل من أو تساوي بشكل مشابه للرقم 5. ومع ذلك، إذا كانت القيم
متساوية، فإنها ترجع القيمة true.
7.
<?php
$a = 25; $b = 36;
if( $a > $b) {
print "$a is greater than $b";
}
else {
print "$b is greater than $a";
}
?>

الإخراج: 36 is greater than 25.
السبب: ترجع مقارنة أكبر من القيمة true إذا كانت القيمة اليسرى أكبر من القيمة
اليمنى. في هذا المثال، 25 أقل من 36. يتم تنفيذ جزء else من الكود.

8.
<?php
$a = 36; $b = 36;
if( $a >= $b) {
print "$a is greater than or equal to $b";
}
else {
print "$b is greater than $a";
}
?>

الإخراج: 36 is greater than or equal to 36.
السبب: تعمل مقارنة أكبر من أو يساوي بشكل مشابه للرقم 7. ومع ذلك، إذا كانت القيمتان
متساويتين، فإنها ترجع القيمة true.
9:
<?php
$a = 36; $b = 36;
$result = $a <=> $b;
if( $result === 0) {
print "كلاهما متساويان";
} else if( $result === 1) {
print "$a is greater than $b";
} else {
print "$b is greater than $a";
}
?>

الإخراج: كلاهما متساويان.
السبب: يعيد عامل سفينة الصواريخ (المتوفر في PHP7+) القيمة -1 إذا كانت $a < b، ويعيد القيمة 0 إذا كانت $a تساوي $b، أو يعيد القيمة 1 إذا كانت $a > $b. تحدد عبارة if المعروضة الحالة
التي أعادها عامل سفينة الصواريخ وتعرض النتيجة المناسبة. يظهر استخدام بنية if/else/elseif هنا لتحديد نطاق من القيم المحتملة. سيتم عرض المزيد من الأمثلة في الفصول المستقبلية.

تسمح لك العوامل المنطقية بطرح أكثر من سؤال في عبارة
شرطية.
دعنا نلقي نظرة على بعض الأمثلة:
1.
<?php
$a = 25; $b = 25; $c = 25; $d = 35;
If ( $a == $b or $c == $d ) {
print "بعضنا أو كلنا متساوون!";
} else {
print "نحن لسنا متساوين";
}
?>

الإخراج: بعضنا أو جميعنا متساوون.
السبب: يتم تقييم كلا جانبي عبارة "أو" على أنها صحيحة. إذا كان أي من جانبي عامل "أو" أو كلاهما صحيحًا، فإن التعبير الكامل يكون صحيحًا.
ملاحظة: يمكن أيضًا استخدام الرمزين || بدلاً من "أو".
2.
<?php
$a = 25; $b = 25; $c = 35; $d = 35;
If ( $a == $b and $c == $d ) {
print "All of us are equal!";
} else {
print "No one is equal";
}
?>

الإخراج: جميعنا متساوون.
السبب: يجب أن يكون كلا جانبي العبارة صحيحين ليكون التعبير الكام

3.
<?php
$a = 25; $b = 25; $c = 25; $d = 25;
If ( $a == $b xor $c == $d ) {
print "Everyone is equal!";
} else {
print "Someone is not equal";
}
?>

الإخراج: Someone is not equal.
السبب: مع استثناء أو (xor)، يمكن أن يكون جانب واحد فقط من التعبير صحيحًا. في هذا
المثال كان كلا الجانبين صحيحين، لذا يتم تقييمه على أنه خطأ. إذا كان هذا عبارة أو، فسيتم تقييمه على أنه صحيح.
4.
<?php
$a = 25; $b = 25; $c = 25; $d = 25;
If ( ! ($a == $b xor $c == $d ) ) {
print "Everyone is equal!";
} else {
print "Someone is not equal";
}
?>

الإخراج: الجميع متساوون.
السبب: يعكس تعبير not (!) النتيجة. يعيد هذا التعبير الحصري أو (xor) القيمة false
لأن كلا الجانبين صحيحان. ومع ذلك، يعكس تعبير not النتيجة إلى true.
عامل ? هو نسخة ترميزية قصيرة من عبارة if-then-else الشرطية.

<?php
$a = 36; $b = 36;
print $a == $b ? "They are equal" : "They are not equal";
?>

الإخراج: إنهم متساوون.
السبب: يتم تنفيذ العبارة الموضوعة بين ? و : إذا كانت المقارنة
true. يتم تنفيذ العبارة الموجودة بين : و إذا كانت العبارة false. نظرًا لأن أمر الطباعة
يوجد على يسار المقارنة، فسيتم طباعة نتيجة المقارنة.
$a و $b لهما نفس القيمة؛ وبالتالي، يتم عرض السلسلة الأولى.

<?php
$a = 36; $b = 24;
print $a <=> $b ? "إنهما متساويان": "$a أكبر من $b": "$b أكبر من $a";
?>

الإخراج: 36 أكبر من 24.
السبب: في PHP 7.5+ يمكنك أيضًا تقييم القيمة (0) و(-1) و(1) الأصغر باستخدام عامل المركبة الفضائية. تصبح هذه المقارنة قصيرة جدًا وفعالة لتحديد ما إذا كانت القيم متساوية أو من هو الأكبر. نظرًا لأن $a أكبر من $b، فسيتم عرض العبارة الموجودة بين النقطتين (:). إذا كانت $a أقل من $b، فسيتم عرض العبارة الموجودة بين النقطتين الأخيرتين والفاصلة المنقوطة. وإلا، فعندما تكون القيم متساوية، فسيتم عرض العبارة الموجودة بين علامة الاستفهام (?) والفاصلة المنقوطة الأولى.
دعنا نلقي نظرة على بعض المقارنات غير الصالحة ورسائل الخطأ الناتجة في
PHP 8.
1.
"ten" > "eleven";
النتيجة: خطأ: "سلسلة نوع غير مدعومة للمقارنة".
2.
"eleven" > 10؛
النتيجة: خطأ: "نوع المشغل لا يتطابق مع السلسلة والعدد الصحيح للمقارنة".
3.
"ten" == 10؛
النتيجة: خطأ: "نوع المشغل لا يتطابق مع السلسلة والعدد الصحيح للمقارنة".
4.
"120" > "99.9"؛
النتيجة: خطأ: "سلسلة نوع غير مدعومة للمقارنة".
5.
"120" <=> "99.9"؛
النتيجة: خطأ: "سلسلة من النوع غير مدعومة للمقارنة".
يمكن استخدام عبارة switch للتخلص من عبارات if-then-else المضمنة
عند تحديد قيمة داخل متغير.

switch (value to compare) {
case value:
// code to execute if true
break;
case value;
// code to execute if true
break;
default:
// code to execute if there are no matches
break;
}


تتطلب بنية عبارة switch أوامر break (break;) في نهاية
كل حالة محتملة. يتم استخدام النقطتين (:) في كل رأس حالة(حالات) بعد
القيمة المراد مقارنتها.

<?php
$a = 36;
switch ($a) {
case 10:
print "10";
break;
case 20:
print "20";
break;

case 30:
print "30";
break;
default:
print "Number was not found";
break;
}
?>


النتيجة: لم يتم العثور على الرقم.
السبب: القيمة 36 غير موجودة في أي من عبارات الحالة. سيقوم PHP بإجراء
التحويل، عندما يكون ذلك ممكنًا. في هذا المثال، سيقارن القيمة الموجودة في السلاسل بالرقم
المقدم. سينتقل تدفق البنية إلى العبارة الافتراضية
نظرًا لعدم وجود تطابقات. تعمل العبارة الافتراضية بطريقة مماثلة لعبارة else؛ فهي تلتقط كل الاحتمالات المتبقية. من الجيد تضمين عبارة افتراضية
في كل هياكل الحالة للتعامل مع القيم غير المتوقعة بدلاً من إمكانية
التسبب في موقف استثنائي.

الوظائف function

بالإضافة إلى آلاف الوظائف المضمنة أو التي يمكن استيرادها بسهولة في PHP والمتاحة للاستخدام، يمكنك أيضًا إنشاء وظائف خاصة بك.
function function_Name(attribute1, attribute2, ...) {
// الكود هنا
}
function_name(attribute, attribute, ...);
// العبارة التالية بعد اكتمال الوظيفة
يظهر التنسيق العام للوظيفة هنا. كلمة المفتاح function هي أحرف صغيرة.
يستخدم الاسم الذي تقدمه للوظيفة نفس تنسيق المتغيرات تقريبًا، باستثناء أنك لا
تدرج $. يمكن تمرير المتغيرات أو القيم كمعلمات إلى
الوظيفة بين قوسين. تنتقل جميع التعليمات البرمجية بين قوسين {}. يتم استدعاء الوظيفة
باستخدام اسم الوظيفة وتمرير أي سمات مطلوبة. عند استدعاء وظيفة، ينتقل تنفيذ البرنامج إلى الوظيفة. بعد تنفيذ جميع التعليمات البرمجية، ينتقل تدفق البرنامج إلى التعليمات بعد استدعاء الوظيفة.
دعونا نلقي نظرة على بعض الأمثلة:
1.

<?php
function display_hello() {
print "Hello";
}
display_hello();
?>


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

2.

<?php
function display_hello($value) {
print $value;
}
display_hello("Hello");
?>


الإخراج: Hello
السبب: ينجز هذا المثال نفس المهمة. ومع ذلك، فهو يسمح ببعض المرونة
من خلال السماح للمستخدم بتمرير القيمة المراد عرضها. لاحظ أن السلسلة تم تمريرها
داخل الأقواس عند استدعاء الدالة. ستسقط السلسلة في
المتغير $value (يحدد المكان الذي تذهب إليه القيم حسب الموضع الذي تم تمريرها فيه). ثم تستخدم عبارة الطباعة في الدالة المتغير $value لعرض المعلومات.
ستعرض هذه الدالة في الواقع أي شيء تقريبًا تم تمريره (بما في ذلك الأرقام)، على الرغم من أنها تسمى display_hello.
3.

<?php
function display_names( $first_name, $last_name = "none") {
print "Your first name is $first_name";
إذا ($last_name != "none") {
print Your last name is $last_name";
}
}
display_names("James");
display_names("Jackie", "Jones");
?>


الإخراج: اسمك الأول هو جيمس.
اسمك الأول هو جاكي.
اسمك الأخير هو جونز.
السبب: تقبل دالة display_names السابقة قيمتين ($first_name, $last_
name). ومع ذلك، فهي توفر أيضًا قيمة افتراضية للمعلمة الثانية. في الاستدعاء الأول
للدالة، سيتم تمرير "James" إلى $first_name. نظرًا لعدم تمرير معلمة ثانية، سيحتوي $last_name على "none". سيتم عرض "Your first name is James". ستحدد عبارة
if أنه لم يتم تمرير قيمة ثانية ولن تحاول
عرض $last_name. في الاستدعاء الثاني، يتم تمرير كلتا القيمتين. سيتم تمرير "Jackie" يتم تمريرها
إلى $first_name. سيتم تمرير "Jones" إلى $last_name. ستعرض الوظيفة "Your
first name is Jackie" و"Your last name is Jones".
4.

<?php
function addtwo( $first_value, $second_value) {
$result = $first_value + $second_value;
return $result;
}
print addtwo( 12, 14);
?>

الإخراج: 26
السبب: في مثال addtwo، يتم تمرير قيمتين عدديتين إلى الوظيفة.
يؤدي استدعاء الوظيفة إلى تمرير 12 إلى $first_value ووضع 14
في $second_value. يتم جمع الرقمين معًا، ويتم وضع النتيجة في
$result. تعيد عبارة return القيمة إلى البرنامج الذي استدعاها (بدلاً من
عرضها). يتيح هذا لكود الاستدعاء المرونة لتحديد ما يجب فعله بالقيمة
المرتجعة. في هذا المثال، تم استدعاء الوظيفة داخل تنفيذ الطباعة. سيؤدي هذا إلى عرض القيمة التي تم إرجاعها بواسطة دالة addtwo (26).

5.

<?php announce(strict_types=1);
function addtwo( int $first_value, int $second_value) : int {
$result = $first_value + $second_value;
return $result;
}
print addtwo( 12, 14);
?>


الإخراج: 26
السبب: في PHP 7+، يمكننا إضافة تلميحات نوع عددية لتقييد نوع المعلومات
المُمرَّرة إلى دالة أو منها. في المثال السابق، تقتصر المعلمات المُمرَّرة
على الأعداد الصحيحة فقط كما هو موضح بواسطة الكلمة الأساسية int قبل أسماء المتغيرات. كما تقتصر قيمة الإرجاع على الأعداد الصحيحة كما هو موضح بواسطة : int كجزء من رأس الدالة. يجب ضبط strict_type على 1 للتنفيذ. إذا تم ضبطه على صفر (الإعداد الافتراضي)، فسيتم تجاهل أنواع البيانات المعروضة.
6.

<?php announce(strict_types=1);
function addtwo( int | float $first_value, int | float $second_value) : int
| float {
$result = $first_value + $second_value;
return $result;
}
print addtwo( 12.1, 14);
?>


data types:

• array
• bool
• callable
• int
• float
• null
• object
• resource
• string

عند استخدامك للوظائف، ستكتشف أن بعضها يمكن استخدامه في تطبيقات
أخرى. يمكنك نقل هذه الوظائف في ملف منفصل واستيرادها إلى
تطبيق.

<?php announce(strict_types=1);
function addtwo( int $first_value, int $second_value) : int {
$result = $first_value + $second_value;
return $result;
}
?>

يجب أن تتضمن الوظائف الموجودة داخل ملفاتها الخاصة علامات php الافتتاحية
والختامية كما هو موضح سابقًا.


<?php
include "addtwo.php";
print addtwo( 12, 14);
?>

سيقوم البرنامج السابق باستيراد ملف addtwo.php (الذي يحتوي على وظيفة addtwo). بمجرد استيراده، يمكنه استدعاء الوظيفة كما هو موضح.
تنبيه: عند استيراد أكثر من ملف، قد تتسبب في حدوث تعارض إذا كان لأكثر من وظيفة مستوردة نفس التوقيع (الاسم والمعلمات).
ستبحث كلمة المفتاح include عن الملف وتحاول تضمينه في البرنامج.
إذا لم يكن الملف موجودًا، فسيستمر البرنامج. تشبه كلمة المفتاح include_once
كلمة المفتاح include. ومع ذلك، فهي تقوم بفحص إضافي لاكتشاف ما إذا كان الملف قد تم استيراده بالفعل. إذا كان الأمر كذلك، فإنها تتجاهل الطلب (لا تنتج خطأ). ستُنتج كلمة المفتاح include
أخطاء إذا تم استيراد الملف بالفعل.
تشبه كلمة المفتاح require كلمة المفتاح include. ومع ذلك، إذا لم يكن الملف موجودًا، فسيتم إنتاج خطأ. تشبه كلمة المفتاح require_once
كلمة المفتاح require
مع الفحص الإضافي لعدم تحميل الملف إذا تم تحميله بالفعل.
لا تحاول الأمثلة المعروضة معالجة أي أخطاء. هناك مشاكل متعددة
محتملة مع هذه الأمثلة، إذا لم يدخل المستخدم ما كان يتوقعه.
يمكننا تعديل البرنامج المستدعي لمعالجة المشاكل المحتملة عن طريق إضافة بنية try/catch
.
<?php
try {
include "addtwo.php";
print dividetwo( 12, 14);
}
catch(zeroException $e) {
print "Don’t try to division by zero!";
}
catch(Throwable $t) {
Print $t->getMessage();
}

finally {
Print "This message is over.";
}
?>


في المثال السابق، يتم وضع كل من عبارة التضمين وعبارة الطباعة
في كتلة try. سينفذ البرنامج العبارات في كتلة try حتى يواجه
مشكلة. عند حدوث مشكلة، سيبحث عن كتلة catch للتعامل مع المشكلة.
نظرًا لأن عبارة التضمين تعتمد على ملف موجود خارج البرنامج، فمن
الأهمية أن يكون البرنامج قادرًا على التعامل مع احتمالية عدم وجود الملف.
يضع هذا المثال أيضًا دالة dividetwo داخل كتلة try. إذا حاولت دالة التقسيم هذه القسمة على صفر، فسوف يثير PHP استثناءً.
يلتقط الكود بشكل خاص استثناء zeroException الذي سيثيره PHP إذا جرت محاولة للقسمة على صفر. إذا حدث ذلك، فسيتم عرض الرسالة المعروضة في
الكتلة وسيغلق البرنامج بشكل صحيح (وليس التعطل).
يتم عرض كتل catch إضافية. يلتقط catch القابل للرمي جميع الاستثناءات الأخرى التي يسببها البرنامج. إذا قفز تنفيذ الكود إلى التدفق
في إحدى هذه الكتل، فسيتم عرض رسالة الخطأ القياسي، وسينفذ البرنامج
كتلة finally. يتم تنفيذ كتلة finally حتى في حالة عدم اكتشاف أي استثناءات. من المهم التأكد من عدم تعطل البرامج الحية. من الأفضل
التقاط أي مشاكل ثم عرض رسالة للمستخدم تطلب منه محاولة
استخدام النظام مرة أخرى لاحقًا.
قم بذلك
1. أكمل الكود الخاص بدالة addtwo الموضحة في هذا القسم.
اسمح فقط بالأعداد الصحيحة والأعداد ذات الفاصلة العائمة. قم بإرجاع القيمة
إلى البرنامج المستدعي وطباعة الناتج من بيان استدعاء الدالة.
2. أنشئ دالة تقبل رقمين ورمزًا
للإشارة إلى ما إذا كان المستخدم يريد الجمع أو الطرح أو الضرب أو القسمة. استخدم
عبارة switch لتحديد العملية التي ستتم.
قم بتضمين استدعاء الدالة في بنية try/catch لالتقاط
أي محاولة للقسمة على الصفر.

3. أكمل #2 ولكن ضع الدالة في ملفها الخاص. استورد الملف
الذي يحتوي على الدالة إلى ملف ثانٍ. قم باستدعاء الدالة
عدة
مرات باستخدام بيانات صالحة وغير صالحة. يجب أن تلتقط كتلة try/catch
جميع البيانات غير الصالحة.

المصفوفات array

تحتفظ المصفوفات بمعلومات متعددة ذات صلة في الذاكرة. تقلل القدرة على حفظ المعلومات في المصفوفات بشكل كبير من كمية الترميز التي قد تكون ضرورية لإنشاء متغيرات متعددة لتخزين المعلومات. توفر المصفوفات أيضًا القدرة على زيادة كمية مواقع التخزين بسهولة عند الحاجة. في PHP، يمكن إنشاء المصفوفات أثناء التنقل، عند الحاجة، أو تنسيقها قبل الاستخدام الفعلي. يتم تحديد نوع البيانات لكل عنصر فردي في مصفوفة PHP
في الوقت الذي يتم فيه تخزين القيمة.
دعنا نلقي نظرة على مثال؛ قد تحتوي المصفوفة على معلومات الفصل مثل رقم الفصل واسم الفصل والوصف والغرفة والمدرس والحجم (عدد الطلاب).
$class_array[0] = "CS122"; // رقم الفصل
$class_array[1] = "مفاهيم البرمجة 1"; // اسم الفصل
$class_array[2] = "المفاهيم الأساسية للغة PHP."; // الوصف
$class_array[3] = "B123"; // room
$class_array[4] = "Dr. Abraham Excel"; // instructor
$class_array[5] = 50; // number of students
تم إنشاء هذه المصفوفة بشكل ديناميكي (أثناء التنقل). تبدأ جميع المصفوفات الرقمية في PHP
بفهرس (مؤشر) يساوي صفرًا. ومع ذلك، عند إنشاء مصفوفة بشكل ديناميكي،
يمكنك البدء من أي فهرس وحتى تخطي المواضع. تتطلب أسماء المصفوفات نفس
التركيب النحوي للمتغيرات مع إضافة فهرس المصفوفة الموجود بين أقواس مربعة ([]).

يمكننا أيضًا السماح لـ PHP بإنشاء ترقيم بالفهرس لنا، باستخدام التنسيق
التالي:

$class_array[ ] = "CS122"; // class number
$class_array[ ] = "Programming Concepts 1"; // class name


$class_array[ ] = "المفاهيم الأساسية للغة PHP."; // الوصف
$class_array[ ] = "B123"; // الغرفة
$class_array[ ] = "Dr. Abraham Excel"; // المدرب
$class_array[ ] = 50; // عدد الطلاب
يمكننا أيضًا إنجاز نفس المهمة بتنسيق أكثر شيوعًا يستخدم في لغات البرمجة الأخرى.

$class_array = array ( "CS122",
"Programming Concepts 1",
"Basic concepts of the PHP language.",
"B123", "Dr. Abraham Excel", 50);

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

$class_array["class number"] = "CS122";
$class_array["class name"] = "Programming Concepts 1";
$class_array["description"] = "Basic concepts of the PHP language.";
$class_array["room"] = "B123";
$class_array["instructor"] = "Dr. Abraham Excel";
$class_array["number of students"] = 50;



يوفر هذا علاقة أسهل للفهم بين القيم والمصفوفة
نفسها. يمكننا أيضًا إنشاء نفس العلاقة مع التنسيق الأكثر شيوعًا.

$class_array = array ("class number" =>"CS122",
"class name" => "Programming Concepts 1",
"description" => "Basic concepts of the PHP language.",
"room" => "B123", "instructor" => "Dr. Abraham Excel",
"number of students" => 50);


يوفر رمز السهم (=>) ارتباطًا مرئيًا بين المفتاح والقيمة
في كل موضع في المصفوفة.
دعنا نأخذ لحظة لنلقي نظرة على المصفوفات متعددة الأبعاد.

$class_array = array (
array ("CS122", "Programming Concepts 1",
"Basic concepts of the PHP language.",
"B123", "Dr. Abraham Excel", 50),
array ("CS123", "Programming Concepts 2",
"Advanced concepts of the PHP language.",
"B124", "Dr. Abraham Excel", 50)
);


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


for ($I = 1; $I <= 10; $I++) {
print "$I times ";
}

// العبارة التالية بعد اكتمال الحلقة
الإخراج: 1 مرة 2 مرة 3 مرات 4 مرات 5 مرات 6 مرات 7 مرات 8 مرات 9 مرات 10
مرات
تعمل حلقة for بشكل جيد عندما تعرف بالضبط عدد المرات التي تريد تكرارها.
في المثال السابق، تم تعيين $I في البداية على 1. ثم تتكرر الحلقة طالما أن $I أقل من أو يساوي 10. في كل مرة تصل فيها الحلقة إلى القمة، تزداد قيمة I بمقدار 1. عندما تصل قيمة $I إلى 11، تتوقف الحلقة. ثم يقوم البرنامج بتنفيذ أي
عبارات تلي نهاية الحلقة.

$I = 1;
while ($I <= 10) {
print "$I times";
$I++;
}


الإخراج: 1 مرة 2 مرة 3 مرات 4 مرات 5 مرات 6 مرات 7 مرات 8 مرات 9 مرات 10
مرات
يمكن إنجاز نفس المهمة باستخدام حلقة while. ومع ذلك، كما ترى، فإن الأمر يتطلب قدرًا أكبر قليلاً من التعليمات البرمجية. يجب أن تتذكر تضمين زيادة قيمة متغير العد ($I++). وإذا نسيت هذه العبارة، فستتحول إلى حلقة لا نهائية.
وباستخدام حلقة for، يمكنك بسهولة تذكير نفسك بزيادة قيمة المتغير في العبارة العلوية
في الحلقة. وتعتبر حلقات while مفيدة للظروف التي قد تتغير، مثل التكرار حتى
تصل إلى نهاية ملف أو نهاية مصفوفة.

foreach($class_array as $value)
{
print $value;
}


تعمل حلقات foreach بشكل جيد مع المصفوفات. يمر المثال السابق عبر المصفوفة الرقمية أحادية البعد ($class_array) الموضحة في الأمثلة السابقة ويعرض
كل قيمة. تمثل $value القيمة الحالية التي تبحث عنها الحلقة في المصفوفة.
الفصل 3 الأساس: 8 قواعد نحوية

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

<?php
$colors1 = array("red", "green");
$colors2 = array("blue", "yellow");
$result = array_merge($colors1, $colors2);
print_r($result);
?>


يتم دمج المصفوفة $color2 في نهاية المصفوفة $color1، ويتم وضع النتيجة
في المصفوفة $result الجديدة. لا تتغير المصفوفات الأصلية. تعد دالة print_r أداة مفيدة تعرض محتويات المصفوفة $result على النحو التالي:

Array
(
[0] => red
[1] => green
[2] => blue
[3] => yellow
)

منذ PHP 7.4، يمكنك استخدام عامل الانتشار لدمج مصفوفتين معًا.

<?php
$fords = ['falcon', 'mustang'];
$cars = ['civic', 'smart', ...$fords, 'tuson'];
var_dump($cars);
?>


يتيح لك عامل الانتشار (…) وضع مصفوفة داخل مصفوفة أخرى في أي
مكان. تُعد دالة var_dump أداة رائعة لاكتشاف ما بداخل أي مصفوفة
ونوع البيانات للموضع في المصفوفة. وهي توفر تفاصيل أكثر من دالة print_f. تحتوي مجموعة $cars الآن على

array(5) {
[0]=>
string(5) "civic"
[1]=>
string(5) "smart"
[2]=>
string(5) "falcon"
[3]=>
string(7) "mustang"
[4]=>
string(5) "tuson"
}


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

قم بذلك
1. قم بإنشاء مجموعة رقمية تحتوي على معلومات حول
منزلك أو شقتك بما في ذلك عدد غرف النوم، وعدد
الحمامات، وعنوان الشارع. استخدم أحد الهياكل التكرارية لإخراج المعلومات في جدول منسق جيدًا.
تلميح: يمكنك استخدام كود HTML وCSS داخل عبارات الطباعة أو الصدى
لإنشاء الجدول الخاص بك.
2. أكمل #1 باستخدام مصفوفة ارتباطية.
3. غيّر #1 لتضمين مصفوفة ثنائية الأبعاد والتي ستشمل
جميع المنازل في شارعك، أو الشقق في المجمع الخاص بك.
لإخراج المعلومات، ستحتاج إلى حلقتين مضمنتين.
يمكنك إما تصفح الكتاب لاكتشاف الأمثلة
أو البحث عن "عرض مصفوفة ثنائية الأبعاد php" في
محرك البحث المفضل لديك على الويب.

أضف رد جديد

العودة إلى ”ركن تطوير وتصميم المواقع والمنتديات | Website and forum development and design corner“