اذهب إلى المحتوى

الدليل السريع إلى لغة البرمجة PHP


Ali Issa

في مقال اليوم نقدم دليلًا سريعًا مدعمًا بالأمثلة العملية شرح لغة PHP التي تعد واحدة من لغات البرمجة القوية المستخدمة بشكل أساسي لتطوير الويب، فعلى الرغم من ظهور العديد من لغات البرمجة الأحدث في مجال تطوير الويب إلا أن لغة PHP لا تزال اللغة الأكثر شيوعًا واستخدامًا، وهي تتطور باستمرار لإصلاح أي عيوب أو أخطاء فيها وتعزيز أمان وأداء المواقع المبنية باستخدامها.

نبذة مختصرة عن لغة PHP

what-is-php.png

يشير اسم 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


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...