"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فهم معدّلات الوصول في PHP OOP: عامة ومحمية وخاصة

فهم معدّلات الوصول في PHP OOP: عامة ومحمية وخاصة

تم النشر بتاريخ 2024-11-08
تصفح:919

Understanding Access Modifiers in PHP OOP: Public, Protected, and Private

في PHP البرمجة الشيئية (OOP)، معدلات الوصول تتحكم في رؤية خصائص وأساليب الفئة. معدّلات الوصول الأساسية في PHP هي عامة ومحمية وخاصة.

سوف ترشدك هذه المقالة إلى غرض واستخدام معدلات الوصول هذه وتشرح كيفية تطبيقها بشكل فعال في PHP OOP.

1. معدّل الوصول العام

  • الكلمة الرئيسية: عامة
  • الرؤية: يمكن الوصول إليها من أي مكان — داخل الفصل الدراسي، وخارجه، وفي الفصول المشتقة.
  • حالة الاستخدام: استخدم public للخصائص أو الأساليب التي يجب الوصول إليها من أي سياق.

مثال:

class User {
    public $name = "John";

    public function greet() {
        return "Hello, " . $this->name;
    }
}

$user = new User();
echo $user->greet();  // Output: Hello, John

في هذا المثال، كل من الخاصية $name والطريقة Greeting() عامة، مما يسمح بالوصول إليهما مباشرة من خارج الفصل.

2. معدل الوصول المحمي

  • الكلمة الرئيسية: محمي
  • الرؤية: يمكن الوصول إليها داخل الفصل نفسه ومن خلال الفئات الفرعية (الفئات الفرعية)، ولكن ليس من خارج الفصل الفصل.
  • حالة الاستخدام: استخدم المحمي للسماح للفئات المشتقة بالوصول إلى خصائص أو أساليب معينة مع إبقائها مخفية عن التعليمات البرمجية الخارجية.

مثال مع الوصول الصحيح:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

class Employee extends Person {
    public function showAge() {
        return $this->getAge();  // Correct: Accesses protected method within a subclass
    }
}

$employee = new Employee();
echo $employee->showAge();  // Output: 30

في هذا المثال، getAge() هي طريقة محمية، والتي يمكن الوصول إليها ضمن فئة الموظف، وهي فئة فرعية من الشخص.

مثال مع الخطأ:

class Person {
    protected $age = 30;

    protected function getAge() {
        return $this->age;
    }
}

$person = new Person();
echo $person->getAge();  // Error: Cannot access protected method Person::getAge()

رسالة الخطأ: خطأ فادح: خطأ لم يتم اكتشافه: لا يمكن الوصول إلى الطريقة المحمية Person::getAge()

في هذه الحالة، محاولة الوصول إلى الأسلوب المحمي getAge() مباشرة من مثيل الشخص يؤدي إلى خطأ لأنه لا يمكن الوصول إلى الأساليب المحمية من خارج الفصل.

3. معدّل الوصول الخاص

  • الكلمة الرئيسية: خاص
  • الرؤية: يمكن الوصول إليها فقط داخل الفئة التي تم تعريفها فيها. لا يمكن الوصول إليه من الفئات الفرعية أو التعليمات البرمجية الخارجية.
  • حالة الاستخدام: استخدم الخاص لإخفاء الخصائص أو الأساليب من أي كود خارج الفئة، بما في ذلك الفئات المشتقة.

مثال مع الوصول الصحيح:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }

    public function showBalance() {
        return $this->getBalance();  // Correct: Accesses private method within the same class
    }
}

$account = new BankAccount();
echo $account->showBalance();  // Output: 1000

في هذا المثال، تعد طريقة getBalance() خاصة، لذا لا يمكن الوصول إليها إلا ضمن فئة BankAccount. طريقة showBalance() عامة ويمكن استخدامها للوصول بشكل غير مباشر إلى getBalance() الخاص.

مثال مع الخطأ:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
echo $account->getBalance();  // Error: Cannot access private method BankAccount::getBalance()

رسالة الخطأ: خطأ فادح: خطأ لم يتم اكتشافه: لا يمكن الوصول إلى الطريقة الخاصة BankAccount::getBalance()

في هذه الحالة، تؤدي محاولة الوصول إلى الطريقة الخاصة getBalance() مباشرة من مثيل BankAccount إلى حدوث خطأ لأنه لا يمكن الوصول إلى الطرق الخاصة من خارج الفصل.

مثال مع خطأ في فئة فرعية:

class BankAccount {
    private $balance = 1000;

    private function getBalance() {
        return $this->balance;
    }
}

class SavingsAccount extends BankAccount {
    public function showBalance() {
        return $this->getBalance();  // Error: Cannot access private method BankAccount::getBalance()
    }
}

$savings = new SavingsAccount();
echo $savings->showBalance();

رسالة الخطأ: خطأ فادح: خطأ لم يتم اكتشافه: لا يمكن الوصول إلى الطريقة الخاصة BankAccount::getBalance()

هنا، لا يمكن الوصول إلى الطريقة الخاصة getBalance() حتى للفئات الفرعية مثل SavingsAccount، مما يدل على أنه لا يمكن الوصول إلى الطرق الخاصة خارج الفئة المحددة لها.

4. ملخص معدّلات الوصول

التعديل داخل الفصل الفئة المشتقة خارج الفصل
عام نعم نعم نعم
محمي نعم نعم لا
خاص نعم لا لا

5. أفضل الممارسات

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

خاتمة

توفر معدّلات الوصول الخاصة بـ PHP (العامة والمحمية والخاصة) آلية لإدارة الرؤية والتغليف في OOP. من خلال فهم هذه المعدلات وتطبيقها بشكل صحيح، يمكنك إنشاء تعليمات برمجية أكثر أمانًا وقابلية للصيانة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/ialaminpro/understanding-access-modifiers-in-php-oop-public-protected-and-private-5bah?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3