البي أتش بي من الصفر الدرس الثالث المتغيرات الثوابت العمليات

في الكاتب: و مدرجة تحت التنصيف PHP, دروس.

بسم الله والصلاة والسلام على رسول الله.

 

هذا الدرس جزء من سلسلة البي أتش بي من الصفر:

 

نبدأ اليوم الدرس الثالث في سلسلة البي أتش بي من الصفر.
أقسام الدرس:

  • المتغيرات.
  • الثوابت.
  • العمليات الحسابية.
  • عمليات الإسناد.
  • عمليات الزيادة والنقصان بواحد.

 

المتغيرات:

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

س = 3.

ص = س+5.

في هذه العملية الرياضية لدينا المعطيات س وتحمل القيمة 3،  والعملية الرياضية أن الحرف ص يساوي ناتج جمع المعطى س والرقم 5. عليه تكون قيمة ص تساوي 8.

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

هناك عدة شروط لتسمية المتغيرات:

  • يبدأ إسم المتغير في لغة البي أتش بي بعلامة الدولار “$” ومن ثم يليها إسم المتغير.
  • يجب أن يبدأ إسم المتغير بحرف أو علامة “_”.
  • لا يحتوي إسم المتغير إلا على التالي (أحرف، أرقام و علامة “_”).
  • لا يمكن أن يحتوي إسم المتغير على مسافة.
  • وأخير المعلومة التي ذكرت في الدرس الثاني أن إسم المتغير حساس لحالة الأحرف.

لنقم الآن بتعريف عدد من المتغيرات:

<?php
$var1=12;
$var2=2.7
$var3='a';
$var4='variable';
?>

قم بإنشاء مجلد بإسم lesson3 في مجلد htdocs وداخل المجلد أنشئ ملف variables.php وقم بنسخ ولصق الكود السابق. وللتنفيذ يمكنك التوجه للرابط:
http://localhost/lesson1/variables.php

حسنا لقد قمنا بتعريف أربعة متغيرات وأسندنا إليها قيم مختلفة. فالمتغير الأول يحمل العدد 12، والمتغير الثاني يحمل رقم بفاصلة عشرية 2.7، أما المتغير الثالث فيحتوي على الحرف a، والمتغير الأخير يحمل قيمة نصية variable. لاحظ أننا قمنا بوضع فاصلة منقوطة بنهاية كل تعريف لمتغير لنفصل بين التعليمات البرمجية المختلفة كما ذكرنا في الدرس السابق. في المتغير الثالث والرابع قمنا بوضع قيمة المتغير بين ‘ ‘ وهي تستخدم في القيم النصية أي في حالة إسناد الأحرف أو الكلمات والعبارات.

ربما قد لاحظت أننا لم نقوم بتحديد نوع المتغيرات عندما قمنا بإسناد قيم لها على الرغم من إختلاف أنواع القيم المسندة، وهذا نسبة لأن البي أتش بي “Loosely Typed Language” وهي اللغات التي لا تحتاج لتعريف نوع المتغير قبل إسناد قيمة إليه، على عكس “Strongly Typed Language” مثل الجافا والسي شارب والتي تشترط تعريف نوع المتغير. ففي البي أتش بي يتم تعريف المتغيرات عندما تقوم بإسناد قيمة لها، وعندها تقوم لغة البي أتش بي بصورة تلقائية بتحديد نوع القيمة المسندة للمتغير وتغير نوع المتغير إلى النوع الصحيح.

إسناد القيم للمتغيرات في لغة البي أتش بي دائما يتم بما يسمى الإسناد بالقيمة وهو يعني عند إسناد قيمة لمتغير فإن كامل القيمة يتم وضعها في المتغير وتصبح قيمة قائمة بذاتها فإذا قمنا بتعريف متغير ووضع قيمة 3 فيه، ومن ثم قمنا بتعريف متغير آخر وقمنا بوضع المتغير الأول في المتغير الثاني فإن المتغير الثاني يصبح يحمل نفس قيمة المتغير الأول ولكن ليس له علاقة بالمتغير الأول وعليه إذا قمنا بتغير قيمة المتغير الأول فلن يتأثر المتغير الثاني. النوع الثاني من الإسناد والذي تتيحه لغة البي أتش بي هو ما يسمى الإسناد بالإشارة وهنا عند إسناد المتغير الأول بالإشارة للمتغير الثاني فإنه عندما نقوم بتغير قيمة المتغير الأول تتغير تلقائيا قيمة المتغير الثاني وبالعكس وهذا لأنه عند الإسناد بالإشارة يقوم المتغير بعمل مؤشر للقيمة الخاصة بالمتغير الأول فقط ولا يملك فيمة خاصة به أي أنهما يتشاركان نفس القيمة فعليا فإذا قام أحدهما بالتغير عليها يظهر التغير في المتغير الآخر أيضا. لإستخدام الإسناد بالإشارة نسبق المتغير الأول بعلامة “&” عند الإسناد، ملحوظة مهمة الإسناد بالإشارة يستخدم فقط عند إسناد متغير لمتغير وليس قيمة لمتغير. إليك المثال التالي:

<?php

//الإسناد بالقيمة
echo 'الإسناد بالقيمة<br/>';

$var1 = 3;
$var2 = $var1;

//طباعة قيمة المتغيرين قبل تغير قيمة الأول
echo '$var1 = '.$var1.'<br/>';
echo '$var2 = '.$var2.'<br/>';

//تغير قيمة المتغير الأول
$var1 = 55;

//طباعة قيمتهما بعد تغير قيمة المتغير الأول
echo '$var1 = '.$var1.'<br/>';
echo '$var2 = '.$var2.'<br/>';

//الإسناد بالإشارة
echo '<br/><br/>الإسناد بالإشارة<br/>';

$var3 = 6;
$var4 = &amp;$var3;

//طباعة قيمة المتغيرين قبل تغير قيمة المتغير الثاني
echo '$var3 = '.$var3.'<br/>';
echo '$var4 = '.$var4.'<br/>';

//تغير قيمة المتغير الثاني
$var4 = 77;

//طباعة قيمتهما بعد تغير قيمة المتغير الثاني
echo '$var3 = '.$var3.'<br/>';
echo '$var4 = '.$var4.'<br/>';

?>

قم بفتح الملف variables.php ونسخ ولصق الكود في النهاية للتجريب.

توجد دالة مفيدة وتستخدم في المتغيرات وهي دالة isset بصورة مبسطة تستخدم لمعرفة إذا كان المتغير قد تم تعريفه أم لا وتقوم بإرجاع قيمة TRUE في حالة التعريف وقيمة FALSE في حالة عدم وجود المتغير. تستخدم كالتالي:

<?php
$x = 5;
isset($x);
?>

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

عند تعريف متغير يكون عنده نطاق معين يمكن إستخدامه فيه، وخارج نطاقه يكون المتغير وكأنه لم يعرف من قبل وهذه النطاقات هي:

  • محلي
  • عالمي
  • ثابت
  • متغير

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

الثوابت:

الفرق الأساسي بين المتغير والثابت أن الثابت لا تتغير قيمته بعد إسناد قيمة له حتى إنتهاء تنفيذ الكود، وهذه بعض الفروقات الأخرى:

  • الثوابت لا تسبقها علامة “$”.
  • يتم تعريف الثوابت بإستخدام الدالة define فقط، وليس بالإسناد العادي كما في المتغيرات.
  • يمكن تعريف الثوابت فأي مكان داخل الكود من غير الإهتمام بقوانين نطاق المتغيرات.
  • لايمكن إعادة تعريف المتغيرات أو إلغاءها بعد تعريفها.
  • فقط أنواع البيانات الأساسية (boolean, integer, float and string) يجب أن توضع في الثوابت.

لنقم الآن بتعريف بعض الثوابت:

<?php

define('CONST_ONE', 2);

define('CONST_TOW', 10.345);

define('CONST_THREE', TRUE);

define('CONST_FOUR', 'this is a constant');

echo CONST_ONE.'<br/>';
echo CONST_TOW.'<br/>';
echo CONST_THREE.'<br/>';
echo CONST_FOUR.'<br/>';
?>

قم بإنشاء ملف constant.php داخل مجلد الدرس وقم بنسخ ولصق الكود السابق ومن ثم التنفيذ في المتصفح من خلال الرابط التالي:
http://localhost/lesson3/constant .php
يقوم الكود السابق بتعريف الثوابت ومن ثم طباعة قيمها على الشاشة. نلاحظ في الكود السابق أننا قمنا بتسمية الثوابت فقط بإستخدام الأحرف الكبيرة وهذا ليس شرط ولكن هذه هي الطريقة المثلى والمتعارف عليها.
ربما تتسائل ما هي الفائدة من الثوابت حيث أنها تقريبا تقوم بنفس عمل المتغيرات، وبل تتفوق عليها المتغيرات لأنها يمكن تغيير قيمها أثناء التنفيذ!! حسنا إليك فائدتين للثوابت:

  • إذا كان لديك قيمة ثابتة مثلا 232.67576578 وهي معدل تفاعل العنصر المشع س مع العنصر الخامل ص تحت ضغط جوي منخفض ودرجة حرارة الصفر المطلق (هذه مجرد مثال ربما يكون ما أقوله هنا خطأ!! :-)) وتريد أن تستخدم هذه القيمة الثابتة في برنامجك فمن الأفضل لك أن تقوم بتعريفها كثابت بإسم يدل عليها فيكون الكود أكثر وضوحا وتضمن أيضا عدم تغير قيمتها أثناء تنفيذ الكود.
  • عند العمل في المشاريع الجماعية يفضل إستخدام الثوابت للقيم التي لا تتغير، بأسماء واضحة حتى يفهم المبرمجين الآخرين أن هذا ثابت ويستخدم لكذا وكذا ولا يجب عليهم تغيره، وعندما يجدونه في الكود يعرفون معنى هذه القيمة هنا بدلا من وضع قيمة رقمية كالقيمة السابقة.

من الدوال المفيدة عند التعامل مع الثوابت الدلة defined والتي تقوم بإختبار هل الثابت موجود أم لا وهي تقوم بإرجاع قيمة TRUE  في حالة وجود ثابت بالإسم المحدد و FALSE في حالة عدم وجوده. الدالة الثانية هي الدالة get_defined_constants وهي تقوم بإرجاع مصفوفة (سنتناول المصفوفات فالدروس القادمة الآن يمكنك التفكير فيها على أن الدالة تقوم بإرجاع قائمة) بكل الثوابت التي تم تعريفها في الكود.

<?php

if(defined('CONST_ONE')){

echo 'الثابت معرف';

}

print_r(get_defined_constants());

?>

قم بنسخ الكود ولصقه في آخر الملف constant.php السابق. عند التنفيذ مرة أخرى بالإضافة إلى المخرجات السابقة يجب أن نرى الآن جملة “الثابت معرف” ونص كبير غريب قد ظهر على الشاشة يحتوى هذا النص على كل الثوابت المعرفة لحظة تنفيذ الكود سواء من قبلنا أو ثوابت قامت البي أتش بي بتعريفها. في الكود السابق إستخدمنا الجملة الشرطية if وسنقوم بشرحها في الدرس القادم إن شاء الله لكن بصورة مبسطة هي تقوم بعمل إختبار لقيمة أو معادلة فإذا كان ناتج القيمة أو المعادلة true تقوم بتنفيذ الكود الذي يليها والموضوع داخل القوسين {} وإذا كان ناتج القيمة أو المعادلة false لا تقوم بتنفيذ هذا الكود في حالتنا هذه قمنا بعمل إختبار للتحقق من وجود الثابت وعندما قامت الدالة بإرجاع القيمة true إلى الجملة الشرطية قامت مباشرة بتنفيذ الكود. الدالة الأخرى print_r بصورة مبسطة تقوم بطباعة المتغيرات بصورة مقروءة للإنسان.

 

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

لا تختلف العمليات الحسابية كثيرا من ما هو معروف لدى الكل ولكن أحببت أن أتطرق لها أيضا

فيما يلي جدول يوضح العمليات الحسابية:

العملية الإسم الوصف مثال النتيجة
س + ص الجمع حاصل جمع س و ص 2 + 2 4
س – ص الطرح الفرق بين س و ص 5 – 2 3
س * ص الضرب حاصل ضرب س في ص 5 * 2 10
س / ص القسمة حاصل قسمة س على ص 15 / 5 3
س % ص باقي القسمة باقي قسمة س على ص 5 % 2
10 % 8
10 % 2
1
2
0
س . ص الوصل تقوم بوصل أو لصق نصين مع بعضهما “مر” . “حبا” مرحبا

 

عمليات الإسناد:

هي عملية إسناد التعبير البرمجي يمين علامة “=” إلى التعبير البرمجي يسار علامة “=” كما هو موضح بالأمثلة السابقة. بدمج علامة “=” مع العمليات الرياضية نحصل على عمليات إسناد أخرى مختصرة كما بالجدول التالي:

الإسناد يوازي الوصف
س = ص س = ص الطرف الأيسر يحصل على نفس قيمة الطرف الأيمن
س += ص س = س + ص الجمع
س -= ص س = س – ص الطرح
س *= ص س = س * ص الضرب
س /= ص س = س / ص القسمة
س %= ص س = س % ص باقي القسمة
س .= ص س = س.ص وصل أو لصق نصين مع بعضهما

 

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

هي إختصار للعملية س= س +1 أو س = س – 1. الجدول التالي يوضح:

العملية الوصف
++س زيادة بواحد قبل الإسناد
س++ زيادة بواحد بعد الإسناد
– -س نقص بواحد قبل الإسناد
س- – نقص بواحد بعد الإسناد

مثال لشرح الزيادة والنقصان بواحد:

<?php
//مثال على الزيادة بواحد بعد الإسناد
$x = 6;
$y = $x++;

echo '$x = '.$x.'
';
echo '$y = '.$y.'
';
/* لاحظ أنه تم إسناد القيمة القديمة أولا ومن ثم تم زيادة قيمة المتغير وعليه
$x = 7
$y = 6
*/

//مثال على الزيادة بواحد قبل الإسناد
$w = 3;
$z = ++$w;

echo '$w = '.$w.'
';
echo '$z = '.$z.'
';
/* لاحظ أنه تم زيادة قيمة المتغير أولا ومن ثم إسناد القيمة الجديدة وعليه
$w = 4
$z = 4
*/

//نفس المفهوم يطبق على عملية الطرح

?>

قم بإنشاء ملف جديد داخل مجلد الدرس بإسم incdec.php وقم بنسخ ولصق الكود السابق للتجربة.

 

بهذا نكون وصلنا إلى نهاية هذا الدرس ترقبو الدرس القادم بإذن الله

محمد علي

مبرمج ومطور ويب، يقوم بتطوير أنظمة مبنية على الويب. يستخدم كود إيقنايتر فريم وورك بصورة أساسية. وبالتأكيد مدمن قهوة :-)

More Posts - Twitter

5 Responses to “البي أتش بي من الصفر: الدرس الثالث”

  1. Eesmail Al-qurashi

    درس جميييل جداً :)

    حسييت انو بسييط ما عارف ليه !! :(
    لكن كان رووعه :)

    ف انتظار الدرس الرابع

  2. Libya

    السلام عليكم ماشاء الله

    بس عندك غلطة بسيطه
    في الميتال ممكن التالت او الرابع
    عاكس الانهاء

    الصحيح
    ?>
    وليس >?

    • محمد علي

      وعليكم السلام ورحمة الله

      شكرا على التنبيه سيتم التصحيح إن شاء الله

  3. همسه

    ماهي الثوابت الموجوده في الphp ارَجْوَ الُرَدِ بّسِرَْعُه. لُوَ سِمٌحُتْ

أضف تعليقاً

  • (لن يتم نشره)