جلوگیری از بازنویسی(override)یک تابع خاص در php

PHP

توسط majidmagic در 4 سال پیش
0 1.2k 8 4 سال پیش
majidmagicsamanelitephp1reza-irdev
0

سلام. من دارم یه کلاس مینویسم که توش چند تا تابع داره و من نمیخوام کسی بتونه با child گرفتن اون تابع رو override کنه آیا راهی هست که بتونم اینکارو انجام بدم؟ همه جارو گشتم نبود :(

0

سلام من خیلی حرفه ای نیستم اما خوب وقتی سورس دست خودته دیگه نیازی به این کار نیست که خوب override نکن!

0

یکم بیشتر توضیح بده منظورت از child گرفتن چیه؟ تا حالا چنین چیزی نشنیدم

0

> سلام من خیلی حرفه ای نیستم اما خوب وقتی سورس دست خودته دیگه نیازی به این کار نیست که خوب override نکن!
دوست عزیز این به عقل منم میرسه! اینطوری نیست.
> یکم بیشتر توضیح بده منظورت از child گرفتن چیه؟ تا حالا چنین چیزی نشنیدم
منظورم ایجاد یک child از یه کلاسه که با کلمه extends انجام میشه
0

فکر نمیکنم چنین چیزی وجود داشته باشه من خیلی از کتابهای php رو خوندم ولی چنین چیزی ندیدم.

0

maJID maGIC@ از کلمه کلیدی [color=#0000ff]final[/color] استفاده کنید. میتونید هم یک کلاس و هم یک متد رو Final کنید.

مثال:

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }
   
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called\n";
   }
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>

Php1@ فرض کنید ما یه web app نوشتیم که در یکی از کلاس های ما تابعی وجود داره که اگر تغییر کنه سیستم دچار مشکل میشه، حالا یکی میخواد بیاد واسه این سیستم یه پلاگین بسازه اینجا اگر اون یه کلاس فرزند از کلاس ما بسازه میتونه تابع ما رو هم override کنه اما دیگه نمیتونه به کلاس اصلی دسترسی داشته باشه چون خیلیا دارن از این سیستم استفاده میکنن. این وظیفه ماست که اینها رو کنترل کنیم.

0

SOFTAFZAR@ :73: ممنون از توضیح کاملتون

0

> از کلمه کلیدی final استفاده کنید. میتونید هم یک کلاس و هم یک متد رو Final کنید.
یه سوال برام پیش اومد ، بعد اگر کلاس رو final کنیم متدهای اونم بطور خودکار final میشن یا باید اونا رو هم final کنیم؟
0

> یه سوال برام پیش اومد ، بعد اگر کلاس رو final کنیم متدهای اونم بطور خودکار final میشن یا باید اونا رو هم final کنیم؟
وقتی کلاس رو final میکنید دیگه نمیتونید کلاس فرزند برای اون بسازید و دیگه نمیتونید متدی بنویسید تا متد والد رو override کنه، در نتیجه دیگه final کردن متدهای داخل کلاس بی معنیه.

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید