الدرس الرابع: التعامل مع الوقت والتاريخ
في هذا الدرس سنلقي نظرة على الخيارات المختلفة للتعامل مع الوقت والتاريخ في PHP، في الدرس السابق استعرضنا أمثلة بسيطة لنشرح ماهية اللغة، في هذا الدرس سنلقي نظرة على وظيفة
date .
وظائف الوقت والتاريخ
PHP تقدم مجموعة واسعة من الوظائف المتعلقة بالوقت والتاريخ، في هذا الدرس سنلقي نظرة على أهم هذه الوظائف:
date.
مع وجود الكثير من العوامل المختلفة يمكن لوظيفة
date أن تعطي التاريخ الحالي أو الوقت بأشكال مختلفة، بعض أكثر العوامل المفيدة هي:
- date("y")
- يعطينا السنة الحالية، وبتاريخ اليوم فهو يعطينا: 13
- date("m")
- يعطينا الشهر الحالي، وبتاريخ اليوم فهو يعطينا: 03
- date("F")
- يعطينا اسم الشهر الحالي، وبتاريخ اليوم فهو يعطينا: March
- date("d")
- يعطينا اليوم الحالي في الشهر، وبتاريخ اليوم فهو يعطينا: 02
- date("l")
- يعطينا اسم اليوم، وبتاريخ اليوم فهو يعطينا: Saturday
- date("w")
- يعطينا رقم اليوم في الأسبوع، وبتاريخ اليوم فهو يعطينا: 6
- date("H")
- يعطينا الساعة الحالية، وبالتوقيت الحالي فهو يعطينا: 14
- date("i")
- يعطينا الدقيقة الحالية، وبالتوقيت الحالي فهو يعطينا: 42
- date("s")
- يعطينا الثانية الحالية، وبالتوقيت الحالي فهو يعطينا: 15
هذا المثال يوضح استخدام وظيفة
date:
<html> <head> <title>Time and date</title> </head> <body> <?php echo "<p>Today it's " . date("l") . "</p>"; ?> </body> </html>
الوقت هو 1362231735
وظيفة
time() تعطينا الوقت الحالي كعدد من الثواني منذ الواحد من يناير 1970 وبالتحديد من الساعة 12 مساء بتوقيت غرينتش.
<html> <head> <title>time and date</title> </head> <body> <?php echo "<p>It's been exactly " . time() . " seconds since January 1, 1970, 12:00 PM, GMT </ p> "; ?> </body> </html>
الوقت المعبر عنه بعدد الثواني منذ 1 يناير 1970 الساعة 12 مساء بتوقيت غرينتش يسمى "timestamp" أو الطابع الزمني ويسمى أيضاً الطابع الزمني ليونكس وهو مفيد عند التعامل مع التواريخ والأوقات في المستقبل أو الماضي.
تلقائياً وظيفة
date تستخدم الطابع الزمني الحالي أي القيمة الحالية لوظيفة
time()، لكن من خلال عوامل إضافية يمكنك أن تحدد طابعاً زمنياً مختلفاً وهكذا يمكنك التعامل مع الماضي والمستقبل، في المثال أدناه حددنا الثانية صفر من تاريخ 1 يناير 1970 الساعة 12 مساء بتوقيت غرنيتش، هكذا يمكننا معرفة أي يوم كان هذا:
<html> <head> <title>time and date</title> </head> <body> <?php echo "<p>January 1, 1970 was a " . date("l",0) . "</p>"; ?> </body> </html>
يزداد تعقيد عد الثواني منذ 1 يناير 1970 إلى وقت محدد في المستقبل أو الماضي، إلا إن كنت عبقري رياضيات! لكن يمكنك لوظيفة مفيدة أن تساعدك:
mktime، التي يمكنها أن تحسب عدد الثواني.
طريقة كتابة قيم
mktime هي (ساعة، دقيقة، ثانية، شهر، يوم، عام)، المثال أدناه يحول الوقت لأول خطوة على القمر 21 يوليو 1969 في 02:56:
<html> <head> <title>time and date</title> </head> <body> <?php echo mktime (2,56,0,7,21,1969); ?> </body> </html>
لاحظ أنه يعطينا رقماً سلبياً لأن التاريخ الذي طلبناه كان قبل 1 يناير 1970.
يمكننا أن نجمع بين هذه الوظيفة ووظيفة
date لنجد أي يوم وقع هذا الحدث التاريخي.
<html> <head> <title>time and date</title> </head> <body> <?php echo date("l", mktime(2,56,0,7,21,1969)); ?> </body> </html>
كيف يمكنك استخدامها؟
كل ما سبق يبدو نظرياً حتى الآن، كيف يمكنك أن تستخدم وظيفة مثل
time()، الأهم من ذلك متى ستتعلم شيئاً يمكنك أن فعلاً أن تضيفه في صفحاتك؟
الإجابة هي أن ما تتعلمه هنا هي لبناء البناء الأساسية، الحد الوحيد لما يمكنك فعله بها هو إبداعك وخيالك! سأتجرأ لأقول بأنك تعلمت أكثر مما تظن، مثلاً هل تظن أنه بإمكانك إنشاء موقع يعرض خلفية للصفحة تتغير بحسب أيام الأسبوع ويعمل على كل المتصفحات؟
بالتأكيد يمكنك، ألقي نظرة على المثال:
<html>
<head>
<title>time and date</title>
</head>
<body background="background_<?php echo date("w"); ?>.png">
</body>
</html>
المثال أعلاه بصور متغيرة، ببساطة يتطلب منك أن تصنع 7 صور لخلفية الموقع وتسمي كل واحدة منها background_1.png وbackground_2.png وbackground_3.png ... إلخ.
إن زار مستخدم موقعك يوم الثلاثاء الموقع سيعرض صورة background_2.png كخلفية، في اليوم التالي سيعرض background_3.png، بسيط وسهل!
في الدرس التالي ستتعلم لبنات بناء جديدة يمكن استخدامها لصنع حلقات وتكراراً في برنامجك.
PHP ممتعة، أليس كذلك؟
الدرس الخامس: الحلقات
في PHP من الممكن أن تدير تنفيذ البرامج بهياكل تحكم مختلفة، في هذا الدرس سنلقي نظرة على الحلقات (loop)، الحلقات يمكن استخدامها لتكرار أجزاء من البرنامج بعدد محدد من المرات أو إلى أن يتحقق شرط محدد.
حلقات while
طريقة كتابة حلقة
while هي:
while (condition) {
Statement
}
بناء الحلقة يمكن ترجمته إلى العربية: إفعل كذا بينما الشرط المحدد محقق.
لنلقي نظرة على مثال بسيط:
<html> <head> <title>Loops</title> </head> <body> <?php $x = 1; while ($x <= 50) { echo "<p>This text is repeated 50 times</p>"; $x = $x + 1; } ?> </body> </html>
في المثال استخدمنا المتغير المسمى "$x"، كما ترى المتغيرات في PHP دائماً تبدأ برمز "$"، من السهل نسيان هذه النقطة في البداية لكن من الضروري تذكر ذلك وإلا لن يعمل البرنامج.
بعد هذه النقطة المثال يشرح نفسه تقريباً، في البداية المتغير $x أعطيناه القيمة 1، ثم الحلقة تسأل المزود أن أن يكرر النص ما دام أن $x أقل أو يساوي 50، في كل تكرار المتغير$x ستزداد قيمته بإضافة 1.
حلقات for
هناك طريقة أخرى لاستخدام الحلقات وهذا من خلال الأمر
for بهذا الشكل:
for (Initialization; Condition; Step) {
Statement
}
البيان (statement) يكرر ما دام أن التهيئة (Initialization) والخطوة (step) يحققان الشرط (Condition)، إن لم تفهم هذا فانظر إلى المثال:
<html> <head> <title>Loops</title> </head> <body> <?php for ($x=0; $x<=50; $x=$x+5) { echo "<p>variable $x is now = " . $x . "</p>"; } ?> </body> </html>
في المثال أعلاه المتغير $x يزداد بقيمة 5 في كل حلقة، التكرار سيستمر ما دام أن $x أقل من أو تساوي 50، لاحظ أيضاً أن القيمة $x تستخدم كجزء من الجملة.
هذا مثال آخر:
<html> <head> <title>Loops</title> </head> <body> <?php for ($x=1; $x<=6; $x=$x+1) { echo "<h" . $x . ">Heading level " . $x . "</h" . $x . ">"; } ?> </body> </html>
هل فهمت المثال؟ في البداية حددنا قيمة المتغير $x بالعدد واحد، ثم في كل تكرار نكتب عنواناً على مستوى $x أي (h1 ثم h2 ثم h3 ... إلخ) إلى أن تصبح قيم $x تساوي ستة.
حلقات داخل حلقات
كمبدأ، ليس هناك حد لكيفية استخدام الحلقات، فمثلاً يمكنك بسهولة أن تضع حلقات داخل حلقات وهكذا تنشأ العديد من التكرار.
لكن احذر! PHP تصبح بطيئة ومعقدة ويكبر حجم البرنامج ، ألقي نظرة على المثال التالي حيث باستخدام 3 حلقات يمكننا كتابة 16 مليون لوناً!
لكي لا نجعل الصفحة بطيئة قللنا العدد بأن جعلنا الخطوة محدودة بالرقم 30، وبالتالي قللنا عدد الألوان إلى 512.
<html> <head> <title>Loops </title> </head> <body> <?php for ($intRed=0; $intRed<=255; $intRed=$intRed+30) { for ($intGreen=0; $intGreen<=255; $intGreen=$intGreen+30) { for ($intBlue=0; $intBlue<=255; $intBlue=$intBlue+30) { $StrColor = "rgb(" . $intRed . "," . $intGreen . "," . $intBlue . ")"; echo "<span style='color:" . $StrColor . "'>" . $StrColor . "</span>"; } } } ?> </body> </html>
في هذا المثال كل لون أولي (أحمر أخضر وأزرق) يمكنه أن يحمل قيمة ما بين 0 و255، أي مركب من الألوان الثلاثة يكون لوناً بشكل rgb(255,255,255)، رقم اللون يستخدم في وسم <span>.
الحلقات تصبح أكثر فائدة عندما تتعلم المزيد، عندما تفهم أساس الحلقات يمكنك أن تنتقل إلى الدرس التالي لنلقي نظرة على الشروط.
الدرس السادس: الشروط
الشروط تستخدم لتنفيذ أجزاء من البرنامج فقط عندما تستوفى متطلبات محددة مسبقاً، فمثلاً الشرط يمكن أن يكون تاريخ بعد الأول من يناير 2012 أو متغير أكبر من 7.
If...
أول نوع من الشروط سنلقي نظرة عليه هو
if، وهو يكتب بهذا الشكل:
if (condition) {
statement
}
مرة أخرى، طريقة كتابة الأمر قريبة جداً من اللغة الطبيعية، إذا (If) تحقق شرط فنفذ كذا وكذا، لنلقي نظرة على مثال بسيط:
<html> <head> <title>Loops </title> </head> <body> <?php $x = 2; if ($x > 1) { echo "<p>variable $x is greater than 1 </p>"; } ?> </body> </html>
if ... else ...
النوع التالي من الشروط الذي سنلقي نظرة عليه هو
else، وهو ما يمكن أن يكتب بهذا الشكل:
if (condition) {
statement
}
else {
statement
}
مرة أخرى، أسلوب كتابة الأمر قريب من اللغة الطبيعية: إذا (if) تحقق شرط نفذ كذا وكذا، وإلا else نفذ شيئاً آخر.
في الدرس الرابع تعلمت كيف تجد رقم الشهر، في المثال التالي سنستخدم رقم الشهر في حلقة
if و
else والشرط وضعت لمعرفة الموسم:
<html> <head> <title>Conditions</title> </head> <body> <?php if (date ("m") == 3) { echo "<p>Now it's spring!</p> "; } else { echo "<p>I do not know what season it is!</p> "; } ?> </body> </html>
كما ترى، الشرط ليس شرطاً ذكياً وفقط يعمل إن كان الشهر مارس!
على أي حال هناك كثير من الطرق لتحسين الشرط وزيادة دقته، أدناه قائمة العوامل (operators) التي يمكن استخدامها في الشروط:
== يساوي
< أقل من
> أكبر من
<= أقل من أو يساوي
>= أكبر من أو يساوي
!= لا يساوي
بالإضافة إلى ذلك هناك عوامل منطق:
&& و
|| أو
! لا
العوامل يمكن استخدامها لوضع شروط أكثر دقة، الآن يمكن توسيع المثال أعلاه لإدراج كل شهور الربيع:
<html> <head> <title>Conditions</title> </head> <body> <?php if (date("m") >= 3 && date("m") <= 5) { echo "<p> Now it's spring!</p> "; } else { echo "<p> Now it's either winter, summer or autumn!</p> "; } ?> </body> </html>
لنلقي نظرة مقربة على الشرط المحسن::
date("m") >= 3 && date("m") <= 5
يمكن ترجمة الشرط إلى:
إن كان الشهر أكبر من أو يساوي 3، والشهر أقل من أو يساوي 5
شرط ذكي، أليس كذلك؟ العوامل تلعب دوراً مهماً في كثير من أجزاء PHP.
لكن لا زال البرنامج يعمل لشهور مارس، أبريل ومايو، بقية الشهور لم تذكر في الشرط، لذلك دعنا نطور الشرط أكثر.
if ... elseif ... else...
باستخدام
elseif يمكننا توسيع الشرط ليعمل على كافة الشهور:
<html> <head> <title>Conditions</title> </head> <body> <?php if (date("m") >= 3 && date("m") <= 5) { echo "<p>Now it's spring!</p>"; } elseif (date("m") >= 6 && date("m") <= 8) { echo "<p>Now it's summer!</p>"; } elseif (date("m") >= 9 && date("m") <= 11) { echo "<p>Now it's autumn!</p>"; } else { echo "<p>Now is winter!</p>"; } ?> </body> </html>
لكتابة الشروط عليك أن تفكر بشكل منطقي وتكون منهجياً، المثال أعلاه بسيط لكن الشروط يمكنها أن تصبح معقدة جداً.
switch ... case
هناك طريقة أخرى لكتاب الشروط باستخدام
switch:
switch (expression) {
case 1:
statement
break;
case 2:
statement
break;
default:
statement
break;
}
هذه الطريقة تعتمد على الشرط أو expression ثم تضع قائمة بمختلف الأجوبة والقيم من خلال البيان أو statements، أسهل طريقة لشرح هذا الأمر هو من خلال مثال.
كما تتذكر في الدرس الرابع وظيفة
date("w") تعطينا رقم اليوم في الأسبوع، هذا يمكن استخدامه في المثال بكتابة اسم اليوم بدلاً من رقمه:
<html> <head> <title>Conditions</title> </head> <body> <?php switch(date("w")) { case 1: echo "Now it's Monday"; break; case 2: echo "Now it's Tuesday"; break; case 3: echo "Now it's Wednesday"; break; case 4: echo "Now it's Thursday"; break; case 5: echo "Now it's Friday"; break; case 6: echo "Now it's Saturday"; break; default: echo "Now it's Sunday"; break; } ?> </body> </html>
غالباً
switch تستخدم كبديل لأمر
if و
else، ما يجب عليك استخدامه في أي ظرف يعتمد على أي طريقة تجدها أسهل وأكثر منطقية، محاولة أن تجعل برنامجك منطقياً وواضحاً سيكون تحدياً كبيراً.
في الدرس التالي سنلقي نظرة على كيفية إضافة تعليقات لبرنامجك وكيف تعمل، التعليقات الجيدة يمكنها أن تكون ضرورية لشخص آخر عليه تغيير شيء ما في برنامجك في مرحلة لاحقة.
الدرس السابع: ضع تعليقات في برامجك
كما قد لاحظت، برامج PHP يمكنها أن تبدو مثيرة للحيرة، في هذا الدرس سنتحدث عن أهمية التعليقات وكيف تضعها في برامجك.
لماذا من المهم أن تضع تعليقات في برامجك؟
عندما تبرمج فأنت تكتب لمزود أو حاسوب وتحتاج لكتابة لغة منهجية قد لا تعبر عن أفكارك عندما تكتب البرنامج.
لذلك قد يكون من الصعب على الآخرين وعليك أن تفهم هيكل البرنامج وبالتالي من الصعب تصحيح الأخطاء في البرنامج.
التعليقات تساعد على كتابة نص قصير يشرح جزء من البرنامج، المزود سيتجاهل هذا التعليق ولن يؤثر التعليق على وظائف البرنامج.
في عالم الأعمال، يكون من متطلبات مواصفات البرامج أن تحوي تعليقات وإلا ستكون مخاطرة كبيرة من الشركة أن تستلم برنامجاً تجد صعوبة في إيجاد وتصحيح أخطاءه.
كيف تضع التعليقات؟
من السهل أن تضع تعليقات في برنامجك، ببساطة ابدأ التعليق بعلامة: "//".
ألقي نظرة على هذا المثال من الدرس الخامس ، أضفنا فيه تعليقات:
<html> <head> <title>Loops</title> </head> <body> <?php // Here we write color codes using three loops // Red can be between 0 and 255 for ($intRed=0; $intRed<=255; $intRed=$intRed+30) { // Green can be between 0 and 255 for ($intGreen=0; $ intGreen<=255; $intGreen=$intGreen+30) { // Blue can be between 0 and 255 for ($ intBlue=0; $intBlue<=255; $intBlue=$intBlue+30) { // The color code is made on the form rgb(red,green,blue) strColor = "rgb(" . intRed . "," . intGreen . "," . intBlue . ")" // Now we write the color code to the client echo "<span style='color:" . $strColor . "'> " . $ strColor . " </span>"; // Closes the loops } } } ?>
من أجل هذا المثال أضفنا المزيد من التعليقات لنوضح كيف أنك تستطيع تصحيح البرنامج بسهولة مع وجود التعليقات.
لذلك، تذكر أن تضع تعليقات في برنامجك!
الدرس الثامن: المصفوفات
في هذا الدرس سنلقي نظرة على المصفوفات، كيف تستخدم وماذا يمكنها أن تفعل.
فهم المصفوفات يمكن أن يكون صعباً في البداية، لكن لنجرب على أي حال ... حاولنا أن نجعلها سهلة بقدر الإمكان.
ما هي المصفوفة؟
المصفوفة (array) هي مجموعة من من العناصر المفهرسة حيث كل عنصر له رقم تعريف خاص به.
يبدو هذا مثيراً للحيرة، لكنها في الواقع ليست بهذا القدر من التعقيد.
تصور قائمة من الكلمات فصلنا بينها باستخدام فاصلة، تسمى القائمة مفصولة بفواصل، ويمكنها أن تكون بهذا الشكل:
apples, pears, bananas, oranges, lemons
جرب أن تتخيل تقسيم القائمة عند كل فاصلة، ثم أعطي كل قسم رقماً مميزاً كما في الصورة:
ما تراه هو مصفوفة، يمكننا مثلاً أن نسمي المصفوفة فواكه أو "fruits"، الفكرة هي أنك تستطيع الوصول إلى المصفوفة برقم وتحصل على قيمة، كما في القائمة أدناه:
fruits(0) = apples
fruits(1) = pears
fruits(2) = bananas
fruits(3) = oranges
fruits(4) = lemons
هذه هي فكرة المصفوفات، الآن لنستخدمها عملياً.
كيف تستخدم المصفوفة؟
سنكمل مع مثال الفواكه، خطوة بعد خطوة سنجعلها تعمل كمصفوفة حقيقية، أولاً علينا أن نضع متغيرات مساوية لقائمة الفواكه:
<?php $fruitlist = "apples, pears, bananas, oranges, lemons"; ?>
بعد ذلك نستخدم وظيفة
explode لفصل القائمة عند كل فاصلة:
<?php $fruitlist = "apples, pears, bananas, oranges, lemons"; $arrFruits = explode(",", $fruitlist); ?>
مرحى! المتغير "$arrFruits" أصبح مصفوفة الآن!
لاحظ أننا استخدمنا الوظيفة
explode بخاصيتين:
- الأولى هي القائمة التي يجب تقسيمها.
- والثانية هي المحدد أو الحرف الذي استخدم لتقسيم القائمة (في حالتنا استخدمنا الفاصلة): ",".
هنا نستخدم الفاصلة كمحدد أو مقسم لكن يمكنك استخدام أي حرف أو كلمة كمقسم للمصفوفة.
لنجرب إضافة تعليق على البرنامج ووضعه في صفحة PHP:
<html> <head> <title>Array</title> </head> <body> <?php // Comma separated list $fruitlist = "apples, pears, bananas, oranges, lemons"; // Create an array by splitting the list (with comma as delimiter) $arrFruits = explode(",", $fruitlist); // Write the values from our array echo "<p>The list of fruits:</p>"; echo "<ul>"; echo "<li>" . $arrFruits[0] . "</li>"; echo "<li>" . $arrFruits[1] . "</li>"; echo "<li>" . $arrFruits[2] . "</li>"; echo "<li>" . $arrFruits[3] . "</li>"; echo "<li>" . $arrFruits[4] . "</li>"; echo "</ul>"; ?> </body> </html>
هذا مثال بسيط جداً ويمكن أن تجد صعوبة في فهم فائدة المصفوفات في هذه المهمة بالتحديد، لكن انتظر، المصفوفات يمكن أن تكون تستخدم في أشياء كثيرة مفيدة.
حلقة داخل مصفوفة
في الدرس الخامس تعلمت الحلقات، الآن يمكننا استخدام حلقة للتعامل مع المصفوفة.
عندما تعلم كم عدد العناصر التي تحويها مصفوفة فلن تكون هناك مشكلة في تحديد حلقة، ببساطة تبدأ من الصفر وتجعل الحلقة تستمر في عملها بعدد العناصر المتوفرة، في المثال مع الفواكه الحلقة ستكون بهذا الشكل:
<html> <head> <title>Array</title> </head> <body> <?php // Comma separated list $fruitlist = "apples, pears, bananas, oranges, lemons"; // Create an array by splitting the list (with a comma as delimiter) $arrFruits = explode (",", $fruitlist); echo "<p>The list of fruits:</p>"; echo "<ul>"; // Loop through the array $arrFruits for ($x=0; $x<=4; $x++) { echo "<li>" . $arrFruits[$x] . "</li>"; } echo "</ul>"; ?> </body> </html>
كما ترى، المتغير $x الذي ترتفع قيمته من 0 إلى 4 في الحلقة استخدم لجلب المصفوفة
كيف تجد حجم المصفوفة؟
ماذا لو أضفنا فاكهة أخرى إلى القائمة؟ ستحوي القائمة عنصراً إضافياً وسيحمل رقم التعريف 5، هل ترى مشكلة هنا؟ نحن بحاجة لتغيير الحلقة حتى تستطيع أن تكرر نفسها من 0 إلى 5 وإلا لن نستطيع التعامل مع كل العناصر في المصفوفة.
ألن يكون من المفيد أن تكون هناك طريقة لإيجاد عدد العناصر في أي مصفوفة؟
هذا بالضبط ما يمكن أن تفعله وظيفة
foreach، الآن يمكننا أن نصمم حلقة تعمل بغض النظر عن عدد العناصر في المصفوفة:
<?php foreach ($arrFruits as $x) { echo arrFruit[$x]; } ?>
هذه الحلقة ستعمل بغض النظر عن عدد العناصر التي تحويها المصفوفة.
مثال آخر
المثال أدناه يوضح كيفية استخدام المصفوفة لكتابة اسم كل شهر:
<html> <head> <title>Array<title> </head> <body> // Creates array with each month. // Creates array with the months. Note the comma before January - because there is no month with the number 0 $arrMonths = array(,"January","February","March","April","May","June","July","August","September","October","November","December); // Call the array with the number of the month - write to the client echo $arrMonths[date("m")]; ?> </body> </html>
حسناً، اكتفينا بالمصفوفات، في الدرس التالي ستتعلم كيف تطور وظائف خاصة بك.
ليست هناك تعليقات:
إرسال تعليق