الحلقات والدوال في لغة PHP
إتقان حلقات for و foreach والدوال (المعاملات – القيم الافتراضية – القيم المعادة). أمثلة عملية حقيقية من تطبيقات الأعمال، وممارسات احترافية لكتابة كود قابل للتطوير.
نظرة عامة
في هذا الدرس ستتعلّم الحلقات والدوال في PHP — وهي أدوات أساسية في بناء أي تطبيق عملي. ستتعرّف على:
- كيفية عمل حلقات
forوforeachومتى تستخدم كل واحدة. - كيفية تعريف الدوال، واستخدام المعاملات والقيم الافتراضية، وإرجاع القيم.
- أمثلة من عالم الأعمال: معالجة الفواتير، إنشاء تقارير، تكرار قائمة مستخدمين، ومعالجة ملفات CSV.
- أفضل الممارسات: إعادة استخدام الكود، التحقق، الحماية، وتحسين الأداء.
لماذا تعتبر الحلقات والدوال مهمة في تطبيقات الأعمال؟
الحلقات تسمح لك بمعالجة قوائم العملاء، الطلبات أو الملفات دفعة واحدة. والدوال تسمح بتحويل المهام المتكرّرة إلى وحدات قابلة لإعادة الاستخدام، مثل “حساب الضريبة”، “تنسيق رقم الهاتف”، أو “إرسال إشعار”. الجمع بينهما يعطيك كوداً منظّماً وسهل الصيانة — وهذا مهم جداً لفرق التطوير.
أساسيات: الحلقات
حلقة for
تستخدم عندما تعرف عدد التكرارات مسبقاً (مثل الصفحات أو العدادات).
<?php
for ($i = 0; $i <= 10; $i++) {
echo $i . '<br>';
}
?>
مثال عملي: إنشاء ترقيم صفحات report يعرف عدد الصفحات مسبقاً.
حلقة foreach
مثالية للتعامل مع المصفوفات — سواء كانت مفهرسة أو ترابطية.
<?php
$person = [
"Name" => "John",
"Age" => 30,
"Country" => "USA"
];
foreach ($person as $key => $value) {
echo '<b>' . strtoupper($key) . "</b>: $value<br>";
}
?>
مثال عملي: عرض بيانات مستخدم في لوحة التحكم.
أنماط استخدام عملية للحلقات
- تجاوز عناصر معينة: مثل تجاهل طلبات archived.
- المعالجة على دفعات: باستخدام
array_chunkلتقليل استهلاك الذاكرة. - Break و Continue: للتوقف المبكر أو تجاوز عنصر.
أساسيات: الدوال
الدوال تسمح بتجميع المنطق المتكرر في مكان واحد لتحسين النظافة وتقليل الأخطاء.
إنشاء دالة بسيطة تعيد قيمة
<?php
function addNumbers() {
return "hello";
}
$result = addNumbers();
var_dump($result);
?>
المعاملات والقيم الافتراضية
<?php
function greetUser($name = "Guest") {
echo "Hello, $name!<br>";
}
greetUser();
greetUser("Ahmed");
?>
استخدام عدّة معاملات
<?php
function whereMember($name = "", $country) {
echo 'Hello I'm ' . $name . ' And I'm from ' . $country . '<br/>';
}
?>
ملاحظة: يجب وضع المعاملات الاختيارية بعد الإجبارية.
<?php
function whereMemberSafe($country, $name = "") {
if (empty($name)) $name = "Anonymous";
echo "Hello I'm $name And I'm from $country<br/>";
}
?>
الأنواع (Type Hints)
<?php
function sum(int $a, int $b): int {
return $a + $b;
}
?>
أمثلة عملية من واقع الأعمال
1. معالجة الفواتير اليومية
<?php
$rows = csv_to_array('invoices-2025-11-23.csv');
function validateInvoice(array $row): bool {
return isset($row['id'], $row['amount']) && is_numeric($row['amount']);
}
$batch = [];
foreach ($rows as $row) {
if (!validateInvoice($row)) continue;
$row['total'] = calculateTax($row['amount']);
$batch[] = $row;
if (count($batch) >= 100) {
saveInvoices($batch);
$batch = [];
}
}
if (count($batch)) saveInvoices($batch);
?>
2. إرسال إشعارات للمستخدمين النشطين
<?php
$users = getActiveUsersFromDb();
foreach ($users as $user) {
$message = buildMessage($user);
sendNotification($user['email'], $message);
}
?>
3. إنشاء تقرير تحليلي
<?php
$totals = ['count' => 0, 'sum' => 0.0];
foreach ($transactions as $t) {
updateTotals($totals, $t['amount']);
}
?>
أفضل الممارسات
- الدالة يجب أن تقوم بمهمة واحدة فقط.
- التحقق من صحة المدخلات قبل استخدامها.
- إرجاع القيم بدلاً من الطباعة داخل الدوال.
- استخدام ثوابت بدلاً من الأرقام السحرية.
- استخدام Generators في البيانات الضخمة.
- تعامل مع الأخطاء داخل الوظائف الثقيلة (batch jobs).
- استخدام الأنواع لتقليل الأخطاء.
أخطاء شائعة وكيف تتجنبها
- وضع المعاملات الاختيارية قبل الإجبارية.
- الطباعة داخل الدوال بدلاً من إرجاع القيم.
- تحميل مصفوفات ضخمة في الذاكرة دفعة واحدة.
- استخدام مفاتيح غير موجودة في المصفوفة.
تمارين عملية
- بناء مستورد CSV يقرأ البيانات ويعالجها على دفعات.
- إنشاء دالة
formatCurrency()وعرض الأسعار باستخدام حلقة. - إنشاء مولّد صفحات باستخدام حلقة for.
الأسئلة الشائعة
- متى أستخدم for ومتى أستخدم foreach؟
- استخدم for عندما تعتمد على عدّاد، و foreach عندما تتعامل مع مصفوفة.
- هل يمكن للدوال تعديل متغير خارجي؟
- يمكن ذلك باستخدام المرجع (&)، لكنه غير مستحب.
- كيف أتعامل مع المعاملات الاختيارية بأمان؟
- ضع الاختيارية بعد الإجبارية أو استخدم مصفوفة خيارات.
مواضيع متقدمة
- المولّدات (yield).
- الدوال عالية المستوى (Callbacks).
- نقل المنطق إلى كائنات (OOP).
- اختبار الدوال باستخدام PHPUnit.
عينات الأكواد الأصلية من ملف الدرس
for-loop.php
<?php
for ($i=0; $i<=10; $i++) {
echo $i . '<br>';
}
?>
foreach-ASC-example-1.php
<?php
$person = [
"Name" => "John",
"Age" => 30,
"Country" => "USA"
];
foreach ($person as $key => $value) {
echo '<b>' . strtoupper($key) . "</b>: $value<br>";
}
?>
function-paramter-default-values.php
<?php
function whereMember($name="", $country) {
echo 'Hello I'm '. $name . ' And I'm from '.$country . '<br/>';
}
?>
function-with-return.php
<?php
function addNumbers() {
return "hello";
}
$result = addNumbers();
var_dump($result);
?>
نصائح SEO للنشر
- استخدم عنواناً وصفياً: الحلقات والدوال في PHP — أمثلة واقعية وتطبيقات أعمال.
- أضف structured data للـ FAQ.
- شارك أمثلة قابلة للتنزيل.
- اكتب وصف ميتا مختصر وواضح.
- استخدم عناوين H2/H3 وتقسيم المحتوى.
الخلاصة
الحلقات والدوال هي قلب بناء أي تطبيق بـ PHP. استخدم الحلقات لمعالجة البيانات، والدوال لتجميع المنطق. طبّق القيم الافتراضية، والتحقق، وإعادة القيم، وركّز على الأداء عند التعامل مع بيانات كبيرة.
