الوحدة الأولى: بدايتك مع لغة PHP

كتاب تعلم البرمجة بلغة PHP — إعداد: عبد اللطيف عايش وأحمد أبو السعود

نبذة سريعة عن لغة PHP

PHP هي لغة حرة مفتوحة المصدر ومجانية الاستخدام، مخصصة لتطوير تطبيقات الويب، وبيئة تطويرها الأساسية هي Linux.

إن كانت لديك خبرة سابقة مع أي لغة برمجة فلن تجد الأمر غريباً، لأن المنطق البرمجي واحد وأوامرها تشبه إلى حد كبير لغة C. وإن كنت من مستخدمي إحدى اللغات: C أو ++C أو #C أو Java، فستجد مرونة كبيرة توفرها هذه اللغة في التعامل بخلاف ما اعتدت عليه.

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

ملاحظة: أوامر لغة PHP غير حساسة لحالة الحرف، بمعنى يمكنك الكتابة بالحرف الكبير أو الصغير على حد سواء في أوامر اللغة.

طريقة كتابة أكواد PHP

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

وكما جرى العرف والعادة، غالباً ما تكون أول جملة افتتاحية طباعة "!hello world"، وللطباعة على المتصفح نستخدم echo بأقواس أو بدون أقواس كالتالي:

مثال 1
<?php
echo ("hello ");
echo "world !!";
?>

ملاحظة: يُسمح لك باستخدام المسافات الفارغة والسطر كيفما تشاء، لكن يجب أن يتم الفصل بين الأوامر البرمجية بالفاصلة المنقوطة (;).

يمكننا أيضاً تطبيق وسوم HTML وطباعتها كالتالي (مع ملاحظة استبدال علامة الاقتباس المزدوجة إلى مفردة حتى لا يحدث تضارب بين العلامتين، أو استخدام علامة \ قبل العلامة التي لا تريد أن يحدث لها تضارب مع علامة أخرى):

مثال 2
<?php
echo "<div style='color:#F00;'>hello world !!</div>";
?>

// أو باستخدام علامة الاقتباس المزدوجة بدل المفردة:
<?php
echo '<div style="color:#F00;">hello world !!</div>';
?>

// أو باستخدام علامة \ قبل العلامة المراد حمايتها من التضارب:
<?php
echo "<div style=\"color:#F00;\">hello world !!</div>";
?>

// وللدمج بين نصين نستخدم علامة النقطة:
<?php
echo "hello"." world !!";
?>

التعليقات في أكواد PHP

تستخدم العلامتين // أو العلامة # لإضافة تعليق سطر واحد، ويمكنك استخدام بداية تعليق بالرمز /* وانتهائه بالرمز */ لحصر ما بينهما تعليق أكثر من سطر:

<?php
// تعليق سطر واحد
# تعليق سطر واحد

/* حصر التعليق */

/*
حصر تعليق أكثر من سطر
حصر تعليق أكثر من سطر
*/
?>

المتغيرات

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

تسمية المتغيرات تتبع القواعد العامة بأن يبدأ اسم المتغير بحرف من حروف اللغة الإنجليزية أو الشرطة السفلية _، ولا يحتوي غير الحروف الإنجليزية والأرقام (يمكن استخدام اللغة العربية في تسمية المتغيرات ضمن جدول رموز اللغة الحالية المستخدمة على الجهاز). وتسمية المتغيرات حساسة لحالة الحرف؛ أي أن استخدامك حرف كبير غير استخدامك حرف صغير.

أمثلة على تعريف متغيرات مختلفة تحمل قيماً مختلفة
<?php
$var1;          // إسناد قيمة ابتدائية للمتغير
$var2 = 10;     // إسناد عدد صحيح
$var3 = 10.23;  // إسناد عدد كسري
$var4 = null;   // إسناد القيمة الفارغة
$var5 = false;  // إسناد قيمة منطقية
$var6 = "Mahmoud"; // إسناد سلسلة نصية
$var7 = 'Mostafa';  // إسناد سلسلة نصية

$var1 = $var7; // إسناد قيمة المتغير $var7 إلى المتغير $var1

// طباعة المتغيرات معاً
echo $var1.$var2.$var3.$var4.$var5.$var6.$var7;
?>

العمليات الحسابية

يمكن للغة PHP كغيرها من لغات البرمجة القيام بمختلف العمليات الحسابية على الأعداد، ومن هذه العمليات البسيطة: الجمع، والطرح باستخدام الرمز - +، والضرب باستخدام الرمز *، والقسمة /، وعلامة باقي القسمة %.

<?php
$var1 = 10;    // إسناد عدد صحيح
$var2 = 20.23; // إسناد عدد كسري
$var3 = $var1*$var2; // عملية ضرب متغيرين
$var4 = $var1/$var2; // عملية قسمة متغيرين
$var5 = $var1%$var2; // عملية باقي القسمة

echo '$var1+$var2 = '.($var1+$var2).'<br>'; // طباعة ناتج عملية جمع وطباعة أسماء المتغيرات
echo "$var1+$var2 = ".($var1+$var2).'<br>'; // طباعة ناتج عملية جمع وطباعة قيم المتغيرات
echo $var3.'<br>'.$var4."<br>".$var5;       // طباعة باقي المتغيرات
?>

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

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

يمكن استخدام معاملات التحويل التالية أمام أي متغير لتحويل نوعه:

المعاملالوظيفة
intلتحويل نوع المتغير إلى أرقام صحيحة.
double / floatلتحويل نوع المتغير إلى عدد ذو فاصلة عائمة.
boolean / boolلتحويل نوع المتغير إلى قيمة منطقية.
stringلتحويل نوع المتغير إلى سلسلة نصية.
<?php
$var1 = 10;
$var2 = 20.12;
$var3 = '1123456789123456789123456789user1';

echo "(double)$var1 = ".(double)$var1."<br>";
echo "(int)$var2 = ".(int)$var2."<br>";
echo "(string)$var1 = ".(string)$var1."<br>";
echo "(int)$var3 = ".(int)$var3."<br>";
echo "(int)null = ".(int)null ."<br>";
echo "(int)true = ".(int)true ."<br>";
?>

وباختصار: السلسلة النصية إذا كانت فارغة فهي تعني false، وإن كان بها أي قيمة كانت فهي تعني true حتى بدون عملية تحويل. وكذلك الصفر أو 0.0 يعني false، بخلاف ذلك سواء كان عدداً صحيحاً أو كسرياً أو عدداً سالباً يعني true.

معاملات الزيادة والنقصان

معامل الزيادة ++ ومعامل النقصان --: ففي حالة كونه قبل المتغير يُزاد أو يُنقَص من قيمة المتغير قبل تنفيذ الكود البرمجي بمقدار واحد، لكن في حالة كونه بعد المتغير ينفذ الكود البرمجي الموجود به أولاً ومن ثم زيادة أو نقصان المتغير بمقدار الواحد.

<?php
$var1 = 0;
$var2 = 0;
$var3 = 0;
$var4 = 0;

echo '++$var1 = '.(++$var1); // زيادة قبل الاستخدام
echo '<br>$var1 = '.$var1;

echo '$var2++ = '.$var2++;   // زيادة بعد الاستخدام
echo '<br>$var2 = '.$var2;

echo '--$var3 = '.--$var3;   // نقصان قبل الاستخدام
echo '$var4-- = '.$var4--;   // نقصان بعد الاستخدام
?>

معاملات الاختصار

المعاملالوظيفة
+=جمع قيمة على قيمة المتغير السابقة.
-=طرح قيمة من قيمة المتغير السابقة.
*=ضرب قيمة في قيمة المتغير السابقة.
/=قسمة قيمة المتغير السابقة على قيمة.
%=إيجاد باقي قيمة المتغير السابقة على قيمة.
.=دمج قيمة إلى قيمة المتغير السابقة.
<?php
$var1 = 10; $var2 = 10; $var3 = 10;
$var4 = 10; $var5 = 10; $var6 = 10;

$var1 += 10;  // تساوي: $var1 = $var1 + 10;
$var2 -= 10;  // تساوي: $var2 = $var2 - 10;
$var3 *= 10;  // تساوي: $var3 = $var3 * 10;
$var4 /= 10;  // تساوي: $var4 = $var4 / 10;
$var5 %= 10;  // تساوي: $var5 = $var5 % 10;
$var6 .= 10;  // تساوي: $var6 = $var6 . 10;
?>

الدمج بين PHP وHTML

هناك طريقتان لكتابة أكواد PHP و HTML معاً: إما استخدام جملة الطباعة، أو إغلاق وسم كود PHP والبدء بكتابة أكواد HTML ومن ثم إعادة فتح وسم PHP لإتمام كتابة أكواد PHP:

الطريقة الأولى
<?php
$var1 = 'value1';
$var2 = 'value2';
?>
<!DOCTYPE HTML>
<html dir="rtl">
<head>
<title>التمرين</title>
</head>
<body>
<div style="color:#F00;">
<?php echo $var1; ?>
</div>
<div style="color:#00F; font-size:28px;">
<?php echo $var2; ?>
</div>
</body>
</html>
الطريقة الثانية
<?php
$var1 = 'value1';
$var2 = 'value2';
echo '
<!DOCTYPE HTML>
<html dir="rtl">
<body>
<div style="color:#F00;">
'.$var1.'
</div>
<div style="color:#00F; font-size:28px;">
'.$var2.'
</div>
</body>
</html>';
?>

وكل طريقة تكون مناسبة في موضع أكثر من الأخرى. ملاحظة: أكواد PHP تعمل ضمن ملف بامتداد php. لكن تحتاج لسرفر ليعمل، والعكس صحيح.

مسرد المصطلحات

اضغط على كل بطاقة لعرض تعريف المصطلح.

echo
أمر الطباعة الأساسي في PHP لعرض النصوص والقيم على المتصفح.
Variable ($)
متغير؛ يُعرَّف بإسناد قيمة له مسبوقة بعلامة $ دون الحاجة لتحديد نوعه.
Type Casting
تحويل نوع البيانات، مثل (int) أو (string)، لتحويل قيمة متغير إلى نوع آخر.
Increment / Decrement
معاملا الزيادة (++) والنقصان (--) بمقدار واحد، قبل المتغير أو بعده.
Compound Assignment
معاملات الاختصار مثل += و -= التي تدمج عملية حسابية مع الإسناد في خطوة واحدة.
Comment
تعليق برمجي لا يُنفَّذ، يُكتب بـ // أو # لسطر واحد، أو /* */ لعدة أسطر.
Concatenation (.)
عملية دمج سلسلتين نصيتين أو أكثر باستخدام علامة النقطة.
Modulus (%)
عملية إيجاد باقي القسمة بين عددين.
Boolean
نوع بيانات منطقي بقيمتين فقط: true أو false.
php.ini
ملف الإعدادات الرئيسي للغة PHP على الخادم.

10 مصطلحات أساسية لهذه الوحدة.

اختبار الوحدة

يتكوّن الاختبار من 5 أسئلة صح/خطأ، و5 أسئلة اختيار من متعدد، و3 أسئلة إنشائية. تُصحَّح الأسئلة الموضوعية تلقائياً، بينما تعرض الأسئلة الإنشائية إجابة نموذجية لتقييم إجابتك بنفسك.

أولاً: صح أم خطأ

1. تعتبر لغة PHP حساسة لحالة الأحرف في أوامرها (مثل echo).

2. لا تحتاج لغة PHP لتعريف نوع المتغير قبل استخدامه.

3. تسمية المتغيرات في PHP حساسة لحالة الحرف.

4. المعامل ++$var ينفّذ الكود البرمجي أولاً ثم يزيد قيمة المتغير بواحد.

5. السلسلة النصية الفارغة '' تعادل القيمة false دون الحاجة لتحويل نوعها.

ثانياً: اختيار من متعدد

6. أي الرموز التالية تُستخدم لإضافة تعليق سطر واحد؟

7. ما ناتج $var2++ إذا كانت $var2 = 5 قبل التنفيذ، عند طباعتها مباشرة داخل التعبير؟

8. أي معامل يُستخدم لدمج سلسلتين نصيتين في PHP؟

9. المعامل %= يقوم بـ:

10. لتحويل متغير إلى نوع منطقي (true/false) نستخدم معامل التحويل:

ثالثاً: أسئلة إنشائية

11. اكتب كود PHP يعرّف متغيرين نصيين ويطبعهما مدمجين في سطر واحد باستخدام علامة الدمج.

<?php $var1 = "Hello"; $var2 = "World"; echo $var1." ".$var2; ?>

12. وضّح الفرق بين ++$var و $var++ بمثال بسيط.

إذا كانت $var = 5: فإن ++$var تُرجع 6 مباشرة لأنها تزيد القيمة قبل استخدامها، بينما $var++ تُرجع 5 أولاً (القيمة القديمة) ثم تصبح قيمة $var بعدها 6.

13. اذكر الطريقتين الأساسيتين لدمج كود PHP مع HTML في نفس الملف.

الطريقة الأولى: إغلاق وسم PHP ثم كتابة كود HTML مباشرة، ثم إعادة فتح وسم PHP لإكمال الكود عند الحاجة. الطريقة الثانية: البقاء داخل وسم PHP وطباعة أكواد HTML كاملة كسلسلة نصية باستخدام echo.