بسم الله الرحمن الرحيم والصلاة والسلام على اشرف الانبياء والمرسلين ، بعد المقدمات السابقة والهامة في معرفة اساسيات اللغة يمكننا بداية كتابة البرامج بلغة البي اتش بي ، وبطبيعة الحال سنبدأ من اصغر الاساسيات واهمها في كتابة البرامج عموماً وهي المتغيرات . 
 
المتغيرات في لغة الـ PHP تبدأ بعلامة الدولار ( $ ) ، ولاسناد قيمة لذلك المتغير نستخدم علامة المساواة ( = ) ، فرضا لدينا المتغير ( Name ) والقيمة ( Khaled ) فنكتب ما يلي :
 
<? 
$Name = "Khaled"; 
?>
 
هذا في حالة المتغيرات النصية ( Text ) ، وفي حالة المتغيرات الرقمية ( Numbers ) يمكن تعريف متغير ( Counter ) الذي يحمل القيمة ( 17 ) كالتالي :
 
<? 
$Counter = 17; 
?>
 
الفرق الواضح في طريقة تعريف المتغيرين النصي والرقمي هو عدم وجود علامات التنصيص في تعريف المتغيرات الرقمية بينما يجب وضع علامات التنصيص في تعريف المتغيرات النصية . 
 
نقاط هامة في تسمية المتغيرات : 
- اسماء المتغيرات في كثير من لغات البرمجة لا تتعدى 255 حرف ( المقصود بها الخانات سواء كانت حروف أو ارقـام أو علامات اخرى ) ، و في لغة الـ PHP لا يوجد حدود على عدد الخانات في تسمية المتغيرات ، ولكن في الغالب لن تحتاج الى اكثر من 15 خانة لتسمية أي متغير ، لان المبالغة في تسمية المتغيرات تسبب مشاكل في تذكر المتغيرات وما تحتوية من قيم . 
 
- بداية كل متغير يجب أن تبدأ بحرف ( يعني حرف هجائي ) أو علامة ( _ ) Underscore ، مع تجاهل علامة الـ $ لانها لا تحسب من اسم المتغير . 
 
- يمكن أن يحتوي اسم المتغير على الحروف أو الارقام أو علامة ( _ ) فقط ، اما العلامات الأخرى مثل ( + , - , * , / ) أو الـ & لا يمكن كتابتها في اسم المتغير . 
 
- المتغير ( Name$ ) يختلف عن المتغير ( name$ ) لاختلاف حالة حرف الـ N ، ولذلك يجب التاكد من اسم المتغيرات بدقة لتجنب حدوث مشاكل في الوصول الى متغير معين ، وبالتاكيد لو كان لديك اسلوب خاص في تسمية المتغيرات لسهولة الوصول اليها وتذكرها ستكون كتابة السكربات اسهل بكثير . 
 
- يستحسن أن تكون اسماء المتغيرات دالة على معانيها ، بمعنى أنه لمتغير مثل عداد الزوار يستحسن أن يكون ( counter$ ) ، ولمتغير مثل اسم المستخدم ( user$ ) .. الخ .
 
 
 
التعامل مع المتغيرات : 
فائدة المتغيرات تكمن في طريقة استخدامها في كتابة السكربت ، وكما ذكرنا سابقاً أنه لطباعة متغير معين نستخدم امر الطباعة ( echo ) أو ( print ) كما يلي :
 
<? 
$name = "Naser"; 
echo $name; 
?>
 
في البداية سيتم اسناد القيمة ( Naser ) الى المتغير ( name$ ) ، وفي السطر الثاني يتم طباعة المتغير ، أو بالاحرى القيمة المسندة الى المتغير . 
 
انواع البيانات ( Data Types ) : 
في الامثلة السابقة قمنا باسناد قيمتين عددية ونصية الى متغيرين ، وبينًا الفرق بينهما ، وفي لغة الـ PHP بشكل عام يوجد أكثر من هذين النوعين من البيانات ، ساشرح بعضاً منها الآن ، والبقية في الدروس القادمة : 
- البيانات النصية ( String ) . 
- البيانات العددية الصحيحة ( Integer ) . 
- البيانات العددية الكسرية ( Double ) . 
- المصفوفـات ( Array ) . 
- الكـائنات ( Object ) . 
- البيانات الغير معروفة ! .
 
 
 
البيانات النصية ( String ) : 
هي البيانات التي تكون بين علامات التنصيص " " بغض النظر عن محتوهـا ، فيمكن أن تكون حروف أو اعداد أو رموز أو غيرها ، ومثال ذلك كما ذكرنا سابقاً :
 
<? 
$user = "Khaled"; 
$age = "13.5"; 
?>
 
 
 
التعامل مع البيانات النصية ( String ) : 
لاضـافة المتغيرات التي تحتوي على بيانات نصية مع متغيرات من نفس النوع نحتاج الى عملية دمج بين المتغيرات ، ولعمل ذلك نكتب :
 
<? 
$total = $user . $age; 
?>
 
في هذه الحالة سيتم اسناد القيمة Khaled13.5 الى المتغير ( total$ ) . 
اذا اردنا وضع مسـافة بين المتغيرين نضيف متغير جديد يحتوي على المسـافة وهو ( space$ ) ثم نقوم بعملية الدمج كالتالي :
 
<? 
$space = " "; 
$total = $user . $space . $age; 
?>
 
وفي هذه الحالة سيتم وضع القيمة Khaled 13.5 في المتغير ( total$ ) ، وبطبيعة الحال يمكن استخدم المتغيرات النصية داخل متغيرات نصية أخرى ، حيث سيتم تعويض المتغير بقيمتة الأصلية .
 
 
 
البيانات العددية ( Numeric ) : 
وكما ذكرنا في التقسيم السابق أنها نوعين ( الاعداد الصحيحة Integer ) و ( الاعداد الكسرية Double ) ، وكمثال على النوعين :
 
<? 
$integer1 = 233; 
$integer2 = -29 
$double1 = 5.27 
$double2 = -4.6 
?>
 
 
 
التعامل مع البيانات العددية ( Numeric ) : 
العمليات الحسابية المشهورة ( + , - , * , / ) بالاضـافة الى باقي القسمة ( % ) عمليات شائعة جداً في التعامل مع المتغيرات العددية ، وبطبيعة الحال لن نحتاج الى ذكر أي مثال عن هذه العمليات ، وسنكتفي بذكر بعض النقاط الاساسية التي قل ما يخلو سكربت منها . 
 
اول النقاط هي اضافة المتغير الى نفسه ، بمعنى تعريف عملية حسابية على متغير معين بحيث تخزن القيمة في نفس المتغير ، مثلا لو كان لديك عدد الزوار وتريد في كل مرة أن يزود عدد الزوار بـ 1 ، يمكنك كتابة ما يلي :
 
<? 
$counter = $counter + 1; 
?>
 
بالتالي سيتم زيادة المتغير ( counter$ ) بـ 1 في كل مرة يتم فيها تنفيذ السكربت ، وبطريقة أخرى يمكن كتابة السطر السابق كالتالي :
 
<? 
$ccounter = $counter++; 
?>
 
والـ ++ تعني زيادة قدررها ( 1 ) على قيمة المتغير الأصلية ، وكذلك الـ -- تعني طرح 1 من القيمة الأصلية . 
 
وفي حالة الرغبة بزيادة أي عدد أخر ( غير الواحد ) على أي متغير باسلوب الطريقة الثانية يمكن كتابة ما يلي :
 
<? 
$counter +=4; 
?>
 
وهذا يعني زيادة مقدارها 4 على قيمة المتغير الأصلية ، وبالسالب كذلك بنفس الأسلوب .
 
 
 
ترتيب انجاز العمليات الحسابية : 
يوجد بعض الرموز والعمليات التي تسبق غيرها عند البدء في انجاز عملية حسابية معينة ، والترتيب المستخدم في البي اتش بي كالتالي : 
- [ 
- ! ~ ++ -- ( int ) ( double ) ( string ) ( array ) ( object ) 
- * / % 
- + - . 
- << >> 
- >= > <= < 
- !== === != == 
- & 
- | 
- && 
- || 
- : ? 
- >>= <<= ~= ^= &= %= .= /= *= += = 
- print 
- AND 
- XOR 
- OR 
- , 
 
بالتأكيد القائمة طويلة وفيها تفاصيل كثيرة ، ولكن من المهم معرفة طريقة انجاز العمليات الحسابية المختلفة لسهولة اكتشاف الأخطـاء ومعرفة الطريقة الصحيحة لكتابة بعض العمليات المعقدة للحصول على ناتج صحيح .
 
 
 
بعض الدوال الهامة في التعامل مع المتغيرات : 
- isset : وهي دالة للتأكد من وجود متغير معين ، فمثلا :
 
<? 
echo isset($age); 
?>
 
سيتم طباعة الرقم 1 اذا كان المتغير ( age$ ) موجوداً ( تم انشاءه مسباقاً ) ، والعكس اذا كان غير موجود سيتم طباعة الرقم 0 ، وهذه الدالة يتم استخدامها كثيراً في الشروط وهذا ما سنتطرق اليه لاحقاً . 
 
- unset : هذه الدالة تعمل على مسح المتغير من الذاكرة كليأ ، فقط قم بعمل التالي :
 
<? 
unset($age); 
?>
 
وفي هذه الحالة سيتم مسح المتغير ( age$ ) بشكل كامل . 
 
- empty : وهذه الدالة معاكسة للدالة isset بحيث لو كتبنا ما يلي :
 
<? 
echo empty($age); 
?>
 
سيتم طباعة الرقم 1 في حالة عدم وجود المتغير ( age$ ) أو أن قيمة المتغير تساوي 0 أو ( فراغ ) ، وفي حالة وجود المتغير ( age$ ) لن يتم طبـاعة أي شي .
 منقوووول للافادة  
hg]vs hgshfu uav(hgljydvhj)