في مقال اليوم نقدم دليلًا سريعًا مدعمًا بالأمثلة العملية شرح لغة PHP التي تعد واحدة من لغات البرمجة القوية المستخدمة بشكل أساسي لتطوير الويب، فعلى الرغم من ظهور العديد من لغات البرمجة الأحدث في مجال تطوير الويب إلا أن لغة PHP لا تزال اللغة الأكثر شيوعًا واستخدامًا، وهي تتطور باستمرار لإصلاح أي عيوب أو أخطاء فيها وتعزيز أمان وأداء المواقع المبنية باستخدامها.
نبذة مختصرة عن لغة PHP
يشير اسم PHP إلى عبارة Hypertext Pre-processor أي المعالج المسبق للنصوص الفائقة وكلمة النصوص الفائقة تعني النصوص التي تملك روابط تنقلك لنصوص أو صفحات صفحات ويب أخرى عند النقر فوقها. وهي لغة برمجة مفتوحة المصدر وشائعة الاستخدام تستخدم في إنشاء وتطوير مواقع الويب الديناميكية، وقد طور باستخدامها أكثر من 75% من المواقع الموجودة على شبكة الإنترنت بحسب w3techs.
تتميز لغة PHP بسهولتها ودعمها لمجموعة متنوعة من قواعد البيانات وبروتوكولات الإنترنت وتوفيرها للعديد من مكتبات وأطر العمل المساعدة للمبرمجين، وما زاد من شهرتها وحافظ على مكانتها وأهميتها بين مطوري الويب اعتماد العديد من منصات إدارة المحتوى ومنصات التجارة الإلكترونية المشهورة عليها مثل ووردبريس WordPress ودروبال Drupal وماجنتو Magneto وغيرها الكثير، فإذا كنت مهتمًا بمجال تطوير الويب فإن تعلم لغة PHP خيار مناسب وغني بالفرص.
تعمل لغة PHP على الخادم server-side بخلاف لغات برمجة أخرى تعمل على المتصفح أو العميل client-side مثل لغة جافا سكريبت JavaScript أي أنها لا تنفذ الشيفرة البرمجية في متصفح الويب، بل تشغلها مباشرة على خادم الويب وبعدها يرسل خادم الويب نتيجة التنفيذ إلى المتصفح لعرضها، وتفترض هذه المقالة أنك تمتلك معلومات أساسية عن لغة PHP وطريقة عملها في الخلفية عند زيارتك لصفحة ويب من خلال متصفح الويب الخاص بك، وبأنك تعرف مسبقًا كيف تحول جهاز حاسوبك إلى خادم محلي وكيف تعد كل الأدوات اللازمة لكتابة أوامر PHP وتنفيذها، فإذا لم تكن على دراية بهذه المعلومات الأساسية أنصحك قبل ذلك ان تقرأ مقال تعرف على لغة PHP ثم تتابع قراءة هذا المقال.
ملاحظة: تعمل الأكواد الواردة في الفقرات التالية مع إصدار PHP 5 والإصدارات اللاحقة فقد قدم الإصدار الخامس من PHP العديد من التغييرات والتحسينات المهمة على الإصدارات السابقة وأبرز هذه التغييرات دعم البرمجة كائنية التوجه oop في PHP ووفر العديد من تحسينات الأداء والأمان، وتابعت الإصدارات اللاحقة التحسين وأضافت ميزات جديدة للغة.
كيف تكتب أكواد PHP
تكتب أكواد PHP بعد وسم الفتح php?>
وقبل وسم الإغلاق <?
ثم تحفظ داخل ملفات لها الامتداد .php على خادم الويب، ومن الأفضل عمليًا تجاهل كتابة وسم الإغلاق إذا كان ملف php يحتوي على شفرة php فقط، لتلافي نتيجة خرج غير متوقعة.
<?php echo "Hello World!"; ?>
كما يمكن أن تدمج أكواد PHP مع أكواد HTML لإنشاء صفحات ويب ديناميكية بالشكل التالي:
<!DOCTYPE html> <html> <head> <title> HTML and PHP </title> </head> <body> <h1>PHP code mixed with HTML</h1> <?php echo "Hello World!"; ?> </body> </html>
التعليقات Comments
التعليقات هي أجزاء من الكود البرمجي لا تنفذ عند تشغيل البرنامج وهي تستخدم لشرح وتوثيق الكود وتوضيح عمله للمطورين الآخرين الذين يقرأون هذا الكود، أو لتوضيحها للمبرمج الذي كتبها نفسه فقد ينسى ما كتبه عند العودة لقراءة الكود بعد فترة من الزمن.
يمكن كتابة التعليقات في لغة PHP بعدة طرق كما في المثال التالي:
// استخدم علامة القوسين المائلين // لبدأ تعليق بسطر واحد // يمكن استخدام العلامة # لكن علامة // أكثر شيوعيا. /* إحاطة نص بالقوس المائل متبوعا بالنجمة بداية وبالنجمة متبوعة بالقوس المائل نهاية يجعل من هذا النص تعليقا متعدد الأسطر */
طباعة الخرج في PHP
يمكنك استخدم تعليمة echo
أو print
لطباعة الخرج أو عرض البيانات المطلوبة على صفحة الويب.
print('Hello '); // بدون سطر فاصل "Hello " طباعة
استخدام القوسين ( )
اختياري مع تعليمتي echo
و print
echo "World\n"; // مع سطر فاصل "World" طباعة
يجب أن تنتهي كل العبارات في لغة PHP بالفاصلة المنقوطة ";
" وأي شيء مكتوب خارج وسوم php?>
ستتم طباعته على الشاشة بشكل تلقائي.
الأنماط Types والمتغيرات Variables
تستخدم المتغيرات في PHP لتخزين وحفظ قيم البيانات، ويمكن أن تخزن هذه المتغيرات قيمًا مختلفة كالأرقام والنصوص والقيم المنطقية. يمكنك التصريحعن المتغيرات في PHP بكتابة الرمز $
يليه مباشرة اسم المتغير، ويجب ان تبدأ أسماء المتغيرات تبدأ بحرف أو تسطيرة سفلية _ يتبعها بأي عدد من الأحرف أو الأرقام أو التسطيرات السفلية. وتكون أسماء المتغيرات حساسة لحالة الأحرف case-sensitive.
من أهم أنماط المتغيرات في لغة PHP نذكر:
المتغيرات المنطقية Boolean ويملك المتغير من هذا النمط القيمة true أي صحيح أو القيمة false أي خاطئ.
$boolean = true; // TRUE أو True $boolean = false; // FALSE أو False
الأعداد الصحيحة Integer حيث يملك المتغير من هذا النمط قيمة صحيحة موجبة أو سالبة
$int1 = 12; // => 12 $int2 = -12; // => -12 $int3 = 012; // => 10 (البادئة 0 تدل على عدد ثماني) $int4 = 0x0F; // => 15 (0x تدل على رقم ستة عشري)
المحارف الصحيحة الثنائية Binary integer literals متاحة اعتبارًا من PHP 5.4.0 وهي تستخدم لتمثيل الأعداد الصحيحة بالنظام الثاني
$int5 = 0b11111111; // 255 (0b يدل على عدد ثنائي)
الأرقام العائمة Floats أو (المضاعفة doubles) وهي تستخدم لتمثيل الأعداد العشرية
$float = 1.234;
$float = 1.2e3;
$float = 7E-10;
لحذف متغير في PHP وتحرير موارد الذاكرة المحجوزة لأجله نستخدم تعليمة unset
unset($int1);
يمكن إجراء العمليات الحسابية على المتغيرات العددية كما يلي:
$sum = 1 + 1; // 2
$difference = 2 - 1; // 1
$product = 2 * 2; // 4
$quotient = 2 / 1; // 2
كما يمكن إجراء العمليات الحسابية المختزلة بالشكل التالي:
$number = 0; $number += 1; // بمقدار 1 $number زيادة echo $number++; // (طباعة 1 (الزيادة بعد التقييم echo ++$number; // (طباعة 3 (الزيادة قبل التقييم $number /= $float; // $number قسمة واسناد ناتج القسمة إلى
السلاسل النصية Strings وهي تستخدم لتخزين النصوص ويجب أن تكون النصوص محدودة ضمن إشارة تنصيص واحدة ’
من كل جانب كما يلي:
$sgl_quotes = '$String'; // => '$String'
تجنب استخدام علامات التنصيص المزدوجة إلا في حالة تضمين متغيرات أخرى
$dbl_quotes = "This is a $sgl_quotes."; // => 'This is a $String.'
تحدد المحارف الخاصة حصريًا باقتباسات مزدوجة
$escaped = "This contains a \t tab character."; $unescaped = 'This just contains a slash and a t: \t';
قم بإحاطة المتغيرات بالقوسين المائلين عند الحاجة
$apples = "I have {$number} apples to eat."; $oranges = "I have ${number} oranges to eat."; $money = "I have $${number} in the bank.";
منذ الإصدار الخامس يمكن استخدام nowdocs
في حالة عدة أسطر غير مجمعة
$nowdoc = <<<'END' Multi line string END;
ستقوم heredocs
بتجميع النصوص
$heredoc = <<<END
Multi line
$sgl_quotes
END;
يتم وصل النصوص أو دمجها باستخدام النقطة ".
"
echo 'This string ' . 'is concatenated';
يمكن تمرير النصوص كبارامتر لـ echo
echo 'Multiple', 'Parameters', 'Valid';// 'MultipleParametersValid' يعيد
الثوابت في PHP
يعرّف الثابت باستخدام ()define
ولا يمكن تغيير قيمته خلال فترة التشغيل. ويجب أن تبدأ أسماء الثوابت الصحيحة بحرف أو تسطيرة سفلية, متبوعة بأية حروف أو أرقام أو تسطيرات سفلية.
define("FOO", "something");
الوصول إلى المتغير الثابت متاح دون الحاجة الى استخدام الرمز $
echo FOO; // 'something' يعيد echo 'This outputs ' . FOO; // 'This outputs something' يعيد
المصفوفات Arrays
المصفوفات في PHP هي هياكل بيانات تسمح بتخزين مجموعة من القيم ضمن متغير واحد، وكل المصفوفات في PHP هي مصفوفات مترابطة (تسمى hashmaps في بعض اللغات البرمجية) وتعمل في جميع إصدارات php
$associative = array('One' => 1, 'Two' => 2, 'Three' => 3);
تم إدخال تركيب قواعدي syntax جديد في PHP 5.4
$associative = ['One' => 1, 'Two' => 2, 'Three' => 3]; echo $associative['One']; // 1 تطبع
إضافة عنصر للمصفوفة المترابطة
$associative['Four'] = 4;
القوائم المحرفية يسند لها مفاتيح صحيحة حكمًا
$array = ['One', 'Two', 'Three']; echo $array[0]; // => "One"
إضافة عنصر إلى نهاية المصفوفة
$array[] = 'Four';
أو
array_push($array, 'Five');
حذف عنصر من مصفوفة
unset($array[3]);
المزيد حول تعلميات الطباعة في PHP
echo('Hello World!');
تقوم التعليمة السابقة بطباعة !Hello World على شاشة الاظهار القياسية stdout، وstdout هي صفحة الوب إذا كنت تستخدم متصفحًا
print('Hello World!'); // echo مشابه لـ // هي أيضًا من تركيبات اللغة لذلك يمكنك إلغاء الأقواس echo و print echo 'Hello World!'; print 'Hello World!'; $paragraph = 'paragraph'; echo 100; // اطبع المتغيرات العددية مباشرة echo $paragraph; // أو المتغيرات
إذا تم إعداد الوسوم القصيرة المفتوحة أو كانت نسخة PHP الخاصة بك 5.4.0 أو أحدث يمكنك استخدام قواعد بناء الجمل القصيرة لـ echo
<p><?= $paragraph ?></p>
$x = 1; $y = 2; $x = $y;
المتغير x$
يحتوي نفس قيمة المتغير y$
$z = &$y;
المتغير z$
يحتوي إسناد إلى قيمة y$
، وأي تغيير في قيمة z$
سيغير قيمة y$
وبالعكس المتغير x$
تبقى قيمته بدون تغيير كقيمة y$
الأصلية
echo $x; // => 2 echo $z; // => 2 $y = 0; echo $x; // => 2 echo $z; // => 0
تخرج التفريغات Dumps نوع وقيمة المتحول إلى شاشة العرض القياسية stdout
var_dump($z); // int(0) يطبع
تطبع التعليمة Print المتغيرات إلى شاشة الإظهار القياسية stdout بصيغة مقروءة للإنسان
print_r($array); // Array ( [0] => One [1] => Two [2] => Three ) يطبع
العمليات المنطقية
$a = 0; $b = '0'; $c = '1'; $d = '1';
يقوم assert
بإصدار تنبيه إذا كانت معطياته غير صحيحة وهذه المقارنة ستكون دومًا صحيحة حتى إذا كانت الأنواع مختلفة
assert($a == $b); // equality المساواة assert($c != $a); // inequality عدم المساواة assert($c <> $a); // alternative inequality عدم المساواة بشكل بديل assert($a < $c); assert($c > $b); assert($a <= $b); assert($c >= $d);
التالي سيكون صحيحًا فقط في حال كانت القيم متساوية ومن نفس النوع
assert($c === $d); assert($a !== $d); assert(1 === '1'); assert(1 !== '1');
المشغل `Spaceship` <=> (منذ PHP 7) يعيد 0 إذا كانت القيم على طرفيه متساوية، ويعيد 1 إذا كانت القيمة على اليسار أكبر، ويعيد -1 إذا كانت القيمة على اليمين أكبر
$a = 100; $b = 1000; echo $a <=> $a; // النتيجة 0 كونهما متساويين echo $a <=> $b; // $a < $b النتيجة -1 كون echo $b <=> $a; // $b > $aالنتيجة 1 كون
يمكن تحويل المتغيرات إلى أنواع مختلفة بحسب استخدامها
$integer = 1; echo $integer + $integer; // => 2 $string = '1'; echo $string + $string; // => 2 (تم تحويل النصوص الى أعداد صحيحة) $string = 'one'; echo $string + $string; // => 0
النتيجة 0 لأن المشغل + لا يستطيع موائمة النص `one` الى رقم.
موائمة الأنواع Type casting يمكن استخدامها للتعامل مع متغير من نوع معين كنوع آخر.
$boolean = (boolean) 1; // => true $zero = 0; $boolean = (boolean) $zero; // => false
يوجد أيضًا توابع مخصصة لموائمة أغلب الأنواع
$integer = 5; $string = strval($integer);
null
هي قيمة خالية
$var = null;
بنى التحكم Control Structures
تمكنك بنى التحكم في لغة PHP من التحكم في تنفيذ الكود البرمجي بناءً على شروط معينة أو تكرار تنفيذ جزء من الكود عدة مرات ومن أشهر بنى التحكم المستخدمة في لغة PHP العبارات الشرطية if وعبارات الحلقات مثل for و while وعبارات switch.
if (true) { print 'I get printed'; } if (false) { print 'I don\'t'; } else { print 'I get printed'; } if (false) { print 'Does not get printed'; } elseif (true) { print 'Does'; }
المشغل الثلاثي ternary
print (false ? 'Does not get printed' : 'Does');
بدأ استخدام المشغل الثلاثي المختصر من PHP 5.3 وهو مكافئ لـ "$x ? $x : 'Does'""
$x = false; print($x ?: 'Does');
بدأ مشغّل دمج القيم الفارغة null coalesce operator من php 7
$a = null; $b = 'Does print'; echo $a ?? 'a is not set'; // 'a is not set' تطبع echo $b ?? 'b is not set'; // 'Does print' تطبع
$x = 0; if ($x === '0') { print 'Does not print'; } elseif ($x == '1') { print 'Does not print'; } else { print 'Does print'; }
القواعد البديلة لبناء الجمل مفيدة لبناء النماذج
<?php if ($x): ?> This is displayed if the test is truthy. <?php else: ?> This is displayed otherwise. <?php endif; ?>
استخدم التعليمة switch
لتوفير كتابة جزء من العمليات المنطقية كما يلي
switch ($x) { case '0': print 'Switch does type coercion'; break; // 'two' و'three' وإلا سينتقل الى الحالة break يجب تضمين case 'two': case 'three': // 'two' أو 'three' تساوي $variable قم بعمل شيء ما اذا كانت قيمة break; default: // قم بعمل الاجراء الافتراضي }
الحلقات while
، do…while
، for
هي حلقات مألوفة غالبًا وتستخدم لتكرار تنفيذ مجموعة من التعليمات البرمجية كما يلي:
$i = 0;
while ($i < 5) {
echo $i++;
} // "01234" اطبع
$i = 0;
do {
echo $i++;
} while ($i < 5); // "01234" اطبع
for ($x = 0; $x < 10; $x++) {
echo $x;
} // "0123456789" اطبع
$wheels = ['bicycle' => 2, 'car' => 4];
يمكن أن تعمل حلقات foreach
على المصفوفة بالشكل التالي:
foreach ($wheels as $wheel_count) {
echo $wheel_count;
} // "24"اطبع
ويمكنك لحلقة foreach
المرور إما عبر المفاتيح أو القيم الخاصة بالمصفوفة
foreach ($wheels as $vehicle => $wheel_count) {
echo "A $vehicle has $wheel_count wheels";
}
$i = 0;
while ($i < 5) {
if ($i === 3) {
break; // while اخرج من حلقة
}
echo $i++;
} // "012" اطبع
for ($i = 0; $i < 5; $i++) {
if ($i === 3) {
continue; // تجاوز هذا التكرار من الحلقة
}
echo $i;
} // "0124" اطبع
الدوال Functions
الدوال في البرمجة هي مجموعات من الأوامر التي لها اسم محدد وتستخدم لأداء مهمة معينة وهي تساعد في تنظيم واختصار التعليمات البرمجية. ونعرّف الدالة PHP باستخدام الكلمة المفتاحية function
function my_function () {
return 'Hello';
}
echo my_function(); // => "Hello"
الاسم المقبول للدالة يجب أن يبدأ بحرف أو تسطيرة سفلية متبوعة بأي عدد من الأحرف ،الأرقام، أو التسطيرات السفلية
function add ($x, $y = 1) { // اختيارية وقيمتها الإفتراضية تساوي 1 $y
$result = $x + $y;
return $result;
}
echo add(4); // => 5
echo add(4, 2); // => 6
لا يمكن الوصول للمتغير result$
من خارج الدالة واستخدام الأمر ;print $result
هنا سيعطي خطأ
منذ النسخة PHP 5.3 أصبح من الممكن تعريف دوال مجهولة anonymous functions أي دوال لا تملك اسمًا وتخزن قيمها في متغيرات كما يلي:
$inc = function ($x) {
return $x + 1;
};
echo $inc(2); // => 3
function foo ($x, $y, $z) {
echo "$x - $y - $z";
}
يمكن للدوال أن تعيد دوالًا أخرى
function bar ($x, $y) {
// استخدم use لإحضار المتغيرات الخارجية
return function ($z) use ($x, $y) {
foo($x, $y, $z);
};
}
$bar = bar('A', 'B');
$bar('C'); // "A - B - C" يطبع
يمكنك استدعاء الدوال المسماة named functions باستخدام النصوص
$function_name = 'add';
echo $function_name(1, 2); // => 3
وهو هام من أجل تحديد أي دالة يتوجب تشغيلها برمجيًا، أو استخدم الدالة التالية
call_user_func (callable $callback [, $parameter [, … ]]);
يمكنك الحصول على كل البارمترات الممررّة للدالة
function parameters() {
$numargs = func_num_args();
if ($numargs > 0) {
echo func_get_arg(0) . ' | ';
}
$args_array = func_get_args();
foreach ($args_array as $key => $arg) {
echo $key . ' - ' . $arg . ' | ';
}
}
parameters('Hello', 'World'); // Hello | 0 - Hello | 1 - World |
يمكنك الحصول على عدد متغير من المعطيات ابتداء من PHP 5.6
function variable($word, ...$list) {
echo $word . " || ";
foreach ($list as $item) {
echo $item . ' | ';
}
}
variable("Separate", "Hello", "World"); // Separate || Hello | World |
التضمين في PHP باستخدام include و require
يفيد التضمين في PHP لتضمين محتوى ملف في ملف آخر ويمكن القيام بتضمين ملف في آخر باستخدام include
كما يلي:
include 'my-file.php';
وبهذا تكون الشفرة ضمن الملف my-file.php متاحة ضمن مجال الرؤية، إذا لم يكن بالإمكان تضمين الملف (على سبيل المثال إذا كان الملف غير موجود ) يظهر تنبيه.
include_once 'my-file.php';
إذا كانت شفرة الملف my-file.php
متضمنة في مكان أخر ، لن يتم تضمينها ثانية. وهذا يمنع الاخطاء التي تحدث بسبب تكرار التصريح عن الصفوف
require 'my-file.php';
require_once 'my-file.php';
تقوم الدالة ()require
بنفس عمل ()include
إلا أنها ستتسبب بخطأ فادح إذا لم يتمكن من تضمين الملف.
محتويات ملف my-include.php
<?php
return 'Anything you like.';
يمكن الدوال Includes
، requires
أيضًا أن تعيد قيمة
$value = include 'my-include.php';
تضمن الملفات بالاعتماد على المسار المعطى، وإذا لم يحدد المسار يتم اعتماد مسار توجيه الاعداد include_path
فإذا لم يتم إيجاد الملف يتم البحث في مسار استدعاء السكريبت ومسار العمل الحالي قبل الاعلان عن الاخفاق
الأصناف Classes في PHP
الأصناف classes في البرمجة هي أنماط بيانات خاصة تستخدم كقوالب لإنشاء الكائنات objects وتعرف الأصناف في PHP باستخدام العبارة class
class MyClass
{
const MY_CONST = 'value'; // ثابت
static $staticVar = 'static';
المتغيرات الثابتة Static
ومجال رؤيتها
public static $publicStaticVar = 'publicStatic';
يمكن الوصول إليها خلال الصنف فقط
private static $privateStaticVar = 'privateStatic';
يمكن الوصول اليها من خلال الصنف والأصناف المشتقة
protected static $protectedStaticVar = 'protectedStatic';
يجب تحديد مجال الرؤية للخصائص Properties
public $property = 'public';
public $instanceProp;
protected $prot = 'protected';
يمكن الوصول إليها من الصنف والأصناف الفرعية
private $priv = 'private'; // يمكن الوصول إليها من الصنف فقط
قم بإنشاء الباني باستخدام __construct
public function __construct($instanceProp)
{
// $this قم بالوصول إلى متغيرات الحالة باستخدام
$this->instanceProp = $instanceProp;
}
تعرًف الطرق methods كدوال داخل الصنف
public function myMethod()
{
print 'MyClass';
}
تجعل الكلمة المفتاحية final
الدالة غير قابلة للتحميل الزائد unoverridable
final function youCannotOverrideMe()
{
}
الطرق السحرية Magic Methods
الطرق السحرية في PHP هي طرق أو وظائف خاصة يبدأ اسمها بشرطة سفلية مزدوجة تسمح لك بإضافة وظائف إلى الأصناف دون الحاجة لتعريف هذه الدوال بشكل صريح.
على سبيل المثال الدالة toString__ هي دالة سحرية تستدعى تلقائيًا عند استخدام عمليات أو وظائف معينة تتطلب تحويل الكائن إلى سلسلة نصية
public function __toString()
{
return $property;
}
ومن الدوال السجرية لدينا دالة الهدم ()destruct__
وهي عكس دالة البناء()construct__
وتستدعى عندما لا تعود هنالك حاجة لأن يكون العنصر مشارًا إليه كمرجع
public function __destruct()
{
print "Destroying";
}
الكلمة المفتاحية static في PHP
تستخدم الكلمة المفتاحية static في PHP لتعريف خصائص الصنف والطرق على أنها ثابتة وهذا يجعلها قابله للوصول بدون الحاجة إلى إنشاء كائن من الصنف. الخاصية المعرّفة بأنها ثابتة لا يمكن الوصول إليها من العنصر المشتق من الصنف (لكن يمكن ذلك في الطرق الثابتة)
public static function myStaticMethod()
{
print 'I am static';
}
ثوابت الصنف Class constants يمكن الوصول إليها دائمًا بشكل ثابت
echo MyClass::MY_CONST; // 'value' الخرج;
echo MyClass::$staticVar; // 'static' الخرج;
MyClass::myStaticMethod(); // 'I am static' الخرج;
اشتقاق حالات الأصناف instance
باستخدام new
$my_class = new MyClass('An instance property');
استخدام القوسين اختياري إذا كنت لا تريد تمرير أيّة معطيات
يمكننك الوصول إلى أعضاء الصنف class members باستخدام <-
echo $my_class->property; // => "public"
echo $my_class->instanceProp; // => "An instance property"
$my_class->myMethod(); // => "MyClass"
قم بتوسيع الصنف باستخدام extends
class MyOtherClass extends MyClass
{
function printProtectedProperty()
{
echo $this->prot;
}
// التحميل الزائد للطرق Override
function myMethod()
{
parent::myMethod();
print ' > MyOtherClass';
}
}
$my_other_class = new MyOtherClass('Instance prop');
$my_other_class->printProtectedProperty(); // => "protected" يطبع
$my_other_class->myMethod(); // "MyClass > MyOtherClass" يطبع
final class YouCannotExtendMe
{
}
يمكنك استخدام الطرق السحرية magic methods لإنشاء دوال الجلب أو الإرجاع getters وداول الاسناد setters
class MyMapClass
{
private $property;
public function __get($key)
{
return $this->$key;
}
public function __set($key, $value)
{
$this->$key = $value;
}
}
$x = new MyMapClass();
echo $x->property; // __get() سوف تستخدم طريقة
$x->property = 'Something'; // __set() سوف تستخدم طريقة
يمكن أن تكون الأصناف تجريدية (باستخدام الكلمة المفتاحية abstract) أو واجهات تنفيذ (باستخدام الكلمة المفتاحية implements).
الواجهات Interfaces في لغة PHP
الواجهات في PHP هي طريقة مجردة لتعريف الكائنات، ويصرح عن الواجهة بالكلمة المفتاحية interface.
interface InterfaceOne
{
public function doSomething();
}
interface InterfaceTwo
{
public function doSomethingElse();
}
يمكن أن توسّع الواجهات
interface InterfaceThree extends InterfaceTwo
{
public function doAnotherContract();
}
abstract class MyAbstractClass implements InterfaceOne
{
public $x = 'doSomething';
}
class MyConcreteClass extends MyAbstractClass implements InterfaceTwo
{
public function doSomething()
{
echo $x;
}
public function doSomethingElse()
{
echo 'doSomethingElse';
}
}
يمكن أن يكون للأصناف أكثر من واجهة واحدة
class SomeOtherClass implements InterfaceOne, InterfaceTwo
{
public function doSomething()
{
echo 'doSomething';
}
public function doSomethingElse()
{
echo 'doSomethingElse';
}
}
السمات Traits
trait هي ميزة تستخدم للسماح بإعادة استخدام مجموعة من الوظائف داخل الأصناف ويمكنك اعتبارها بمثابة طريقة لتضمين سلوك مشترك بين الأصناف وهي ميزة متوفره بدءًا من النسخة PHP 5.4.0 ويصرّح عنها باستخدام trait
trait MyTrait
{
public function myTraitMethod()
{
print 'I have MyTrait';
}
}
class MyTraitfulClass
{
use MyTrait;
}
$cls = new MyTraitfulClass();
$cls->myTraitMethod(); // Prints "I have MyTrait"
فضاءات الأسماء Namespaces في PHP
تستخدم فضاءات الأسماء في PHP لتنظيم الشيفرة وتجنب تعارض أسماء الأصناف والوظائف والمتغيرات فهي تجمع العناصر ضمن في مجموعات أو مساحات لها نفس الاسم لتميزها عن غيرها وللقيام بذلك نكتب namespace
كأول عبارة في الملف.
دعونا نتظاهر بأن هذا ليس هو الحال
<?php
افتراضيًا, توجد الأصناف في namespace
عام, ويمكن أن تستدعى صراحة بـ backslash
$cls = new \MyClass();
ضبط namespace
لملف
namespace My\Namespace;
class MyClass
{
}
من ملف آخر
$cls = new My\Namespace\MyClass;
أو من داخل namespace
آخر
namespace My\Other\Namespace;
use My\Namespace\MyClass;
$cls = new MyClass();
أو يمكنك استبدال namespace
باسم مستعار
namespace My\Other\Namespace;
use My\Namespace as SomeOtherNamespace;
$cls = new SomeOtherNamespace\MyClass();
الربط الساكن المتأخر Late Static Binding
class ParentClass
{
public static function who()
{
echo "I'm a " . __CLASS__ . "\n";
}
public static function test()
{
// على الصف الذي عُرّف التابع ضمنه self تؤشر
self::who();
// على الصف الذي استدعي التابع منه static تؤشر
static::who();
}
}
ParentClass::test();
/*
ParentClass أنا
ParentClass أنا
*/
class ChildClass extends ParentClass
{
public static function who()
{
echo "But I'm " . __CLASS__ . "\n";
}
}
ChildClass::test();
/*
ParentClass أنا
ChildClass ولكن أنا
*/
الثوابت السحرية Magic constants
الثوابت السحرية هي ثوابت معرفة مسبقًا في PHP يبدأ اسمها وينتهي بشرطتين سفليتين ولها استخداماات مختلفة، على سبيل المثال للحصول على اسم الصنف الحالي نستخدم الثابت السحري __CLASS__ داخل تصريح الصنف كما يلي:
echo "Current class name is " . __CLASS__;
وللحصول على مسار الدليل الكامل لملف نستخدم __DIR__
echo "Current directory is " . __DIR__;
الاستخدام النموذجي
require __DIR__ . '/vendor/autoload.php';
الحصول على المسار الكامل للملف
echo "Current file path is " . __FILE__;
الحصول على اسم الدالة الحالية
echo "Current function name is " . __FUNCTION__;
الحصول على رقم السطر الحالي
echo "Current line number is " . __LINE__;
الحصول على اسم الطريقة الحالية. يرجع قيمة فقط عندما يستخدم داخل تصريح سمة أو كائن
echo "Current method is " . __METHOD__;
الحصول على اسم namespace
الحالي
echo "Current namespace is " . __NAMESPACE__;
الحصول على اسم السمة الحالية. ترجع قيمة فقط عندما تستخدم داخل التصريح عن السمة أو الكائن.
echo "Current trait is " . __TRAIT__;
معالجة الأخطاء Error Handling في PHP
يمكن أن تتم معالجة أخطاء بسيطة باستخدام كتلة try catch
try {
// افعل شيء ما
} catch (Exception $e) {
// معالجة استثناء
}
عند استخدام كتلة try catch
في بيئة namespace
استخدم التالي
try {
// افعل شيء ما
} catch (\Exception $e) {
// معالجة استثناء
}
استثناءات مخصّصة
class MyException extends Exception {}
try {
$condition = true;
if ($condition) {
throw new MyException('Something just happened');
}
} catch (MyException $e) {
// معالجة استثنائية
}
ترجمة -وبتصرّف- للمقال Learn PHP in Y Minutes
أفضل التعليقات
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.