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

السؤال

نشر

عندما نقوم بعمل تابع Method في صنف ما Class فإننا نقوم بتحديده كـ public أو private أو protected:

<?php
class User {
  public function SayHi() {
//^^^^^^
    ...
  }
}

لماذا علينا كتابة هذه الكلمة وما الفرق بين public و private و protected؟

Recommended Posts

  • 2
نشر

تستخدم محددات الوصول للتحكم في مسار الكود ولسهولة تتبعه وفهم آليه عمله وبالتالي تكون صيانته وحمايته من الأخطاء أسهل، هنا شرح لمعنى كلٍ منهم:

الكلمة المفتاحية public

public تعني عام ويمكن الوصول لأي تابع عام public method من داخل جميع التوابع الأخرى الموجودة داخل نفس الصنف وفي حالة الوراثة أو من خلال الكائن المنشأ من هذا الصنف.

<?php
class User {
  public function SayHi() {
    // ...
  }
  
  public function Hello() {
    $this->SayHi();	// في حالة الوصول إلى التابع من داخل تابع آخر في نفس الصنف
  }
}

$user = new User(); // حالة إنشاء كائن من الصنف
$user->SayHi();

class Admin extends User {
  public function Hello() {
    $this->sayHi();	// في حالة الوراثة
  }
}

الكلمة public هي إختيارية ويمكن عدم كتابتها كذلك بدون مشكلة، وأي تابع لم يتم تحديده (public أو private أو protected) فسوف يكون عام public بشكل إفتراضي، لكنها إجبارية في حالة الخواص properties

الكلمة المفتاحية private

private تعني خاص، فأي تابع يُعرف على أنه خاص لا يمكن إستخدامه إلا داخل الصنف class المعرف بها فقط فلا يمكن الوصول له من خلال كائن منشأ من هذا الصنف وأيضاً لا يمكن الوصول للمكونات الخاصة في حالة الوراثة.

<?php
class User {
  private function SayHi() {
    // ...
  }
  
  public function Hello() {
    $this->SayHi();	// في حالة الوصول إلى التابع من داخل تابع آخر في نفس الصنف
  }
}

$user = new User();
$user->SayHi();	//ERROR: حالة إنشاء كائن من الصنف

class Admin extends User {
  public function Hello() {
    $this->sayHi();	//ERROR: في حالة الوراثة
  }
}

الكلمة المفتاحية protected

protected تعني محمي، وهي أعم من الحالة السابقة فأي تابع يُعرف على أنه محمي protected يمكن إستخدامه داخل نفس الصنف وفي حالة الوراثة فقط ولكن لا يمكن الوصول لتوابع الصنف المحمية من خلال الكائن المنشأ من هذا الصنف:

<?php
class User {
  protected function SayHi() {
    // ...
  }
  
  public function Hello() {
    $this->SayHi();	// في حالة الوصول إلى التابع من داخل تابع آخر في نفس الصنف
  }
}

$user = new User();
$user->SayHi();	//ERROR: حالة إنشاء كائن من الصنف

class Admin extends User {
  public function Hello() {
    $this->sayHi();	// في حالة الوراثة لا يوجد مشكلة
  }
}

يمكنك معرفة المزيد من خلال موسوعة حسوب: قابلية الرؤية في كائنات PHP

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

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

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...