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


issa issa

يشرح هذا المقال +PHP 5. يجب أن تكون شفرة PHP مغلقة بوسوم php?> ومن الأفضل عمليًا تجاهل وسم الإغلاق إذا كان ملف php يحتوي على شفرة php فقط، لتلافي نتيجة خرج غير متوقعة.

// استخدم علامة القوسين المائلين // لبدأ تعليق بسطر واحد 
// يمكن استخدام العلامة # لكن علامة // أكثر شيوعيا. 

/*
إحاطة نص بالقوس المائل متبوعا بالنجمة بداية وبالنجمة
 متبوعة بالقوس المائل نهاية يجعل من هذا النص تعليقا متعدد الأسطر
*/

استخدم "echo" أو "print" لطباعة الخرج.

print('Hello '); // بدون سطر فاصل "Hello "  طباعة

استخدام القوسين ( ) اختياري مع تعليمتي echo و print

echo "World\n";  // مع سطر فاصل "World" طباعة

كل العبارات يجب أنت تنتهي بالفاصلة المنقوطة ";" وأي شيء مكتوب خارج وسوم php?> ستتم طباعته على الشاشة بشكل تلقائي.

الأنماط Types والمتغيرات Variables

تبدأ المتغيرات بالرمز $

أسماء المتغيرات المقبولة تبدأ بحرف أو تسطيرة سفلية متبوعة بأي عدد من الأحرف، الأرقام أو التسطيرة السفلية. والمتغيرات المنطقية حساسة لحالة الأحرف.

$boolean = true;  // TRUE أو True
$boolean = false; // FALSE أو False

الأعداد الصحيحة

$int1 = 12;   // => 12
$int2 = -12;  // => -12
$int3 = 012;  // => 10 (البادئة 0 تدل على عدد ثماني) 
$int4 = 0x0F; // => 15 (0x تدل على رقم ستة عشري)

المحارف الصحيحة الثنائية متاحة اعتبارًا من PHP 5.4.0

$int5 = 0b11111111; // 255 (0b يدل على عدد ثنائي)

الأرقام العائمة Floats أو (المضاعفة doubles)

$float = 1.234;
$float = 1.2e3;
$float = 7E-10;

حذف متغير

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 قسمة واسناد ناتج القسمة إلى

النصوص يجب أن تكون محدودة ضمن إشارة تنصيص واحدة() من كل جانب

$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' يعيد 

الثوابت

يعرّف الثابت باستخدام ()define ولا يمكن تغيير قيمته خلال فترة التشغيل. ويجب أن تبدأ أسماء الثوابت الصحيحة بحرف أو تسطيرة سفلية, متبوعة بأية حروف أو أرقام أو تسطيرات سفلية.

define("FOO", "something");

الوصول إلى المتغير الثابت متاح دون الحاجة الى استخدام الرمز $

echo FOO; // 'something' يعيد 

echo 'This outputs ' . FOO; // 'This outputs something' يعيد 

المصفوفات Arrays

كل المصفوفات في 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]);

الخرج Output

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 بنى التحكم

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 ($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

عرّف الدالة باستخدام 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 |

التضمين includes

يجب أيضًا وضع وسم البداية لـ PHP في الملفات المتضمنة


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 الأصناف

يتم تعريف الأصناف باستخدام العبارة 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
ماذا تفعل إذا تمت معاملة العنصر كنص (سلسلة)


public function __toString()
{
     return $property;
}

()destruct__ هو عكس الباني ()construct__ ويستدعى عندما لا تعود هنالك حاجة لأن يكون العنصر مشارًا إليه كمرجع


public function __destruct()
{
    print "Destroying";
}

تعريف خصائص الصنف والطرق كثابت يجعلها قابله للوصول بدون الحاجة إلى تجسيد الصنف. الخاصية المعرّفة بأنها ثابتة لا يمكن الوصول إليها من العنصر المشتق من الصنف (لكن يمكن ذلك في الطرق الثابتة)


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).
يصرح عن الواجهة بالكلمة المفتاحية 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 

هذا مقطع منفصل, لأن التصريح عن 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 الثوابت السحرية

الحصول على اسم الصنف الحالي. يجب أن تستخدم داخل تصريح الصنف.


echo "Current class name is " . __CLASS__;

الحصول على مسار الدليل الكامل لملف


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 معالجة الأخطاء

يمكن أن تتم معالجة أخطاء بسيطة باستخدام كتلة 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



1 شخص أعجب بهذا


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


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



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن