don_inter
5 سال پیش توسط don_inter مطرح شد
3 پاسخ

کلاس نویسی

سلام بر دوستان عزیز
سوالم شاید کمی سطح پایین باشه برای اون عزیزان که خب سالهاست دارن برنامه نویسی میکنن
اما به شخصه برام سوالی مطرح شده در بحث کلاس نویسی قسمت معرفی پراپرتی ها که بر سه دسته هستند
اصلا ما در چه جاهایی و بر اساس چه منطقی میتونیم تشخیص بدیم که در کجا بهتره وضعیت پراپرتی ما در حالت private باشه یا protected چرا اصلا همه رو در حالت public در نظر نمیگیریم
چیزی که من متوجه شدم اینکه خب اطلاعاتی که محرمانه هستند برای سایت مثل اتصال به دیتابانک خب باید در حالت خصوصی باشند اما در بقیه موارد چطور میتونیم تشخیص درستی بدیم اصلا الان واسه این وضعیت کدوم حالت بهتر هستش
ممنون میشم از راهنمایی های شما عزیزان :)


ثبت پرسش جدید
Davood
تخصص : PHP - Laravel
@dfardabasi 5 سال پیش مطرح شد
1

سلام
@intersubjektiv

خوب به عنوان مثال شما 2 تا پراپرتی میخوای تعریف کنی داخل کلاس

اگر public بذاری به این معنی هست که در همه جا به پراپرتی دسترسی داری چه داخل کلاس چه خارج کلاس

اما یه سری اوقات شما میخوای سطح دسترسی برای پراپرتی یا متدهات مشخص کنی که میتونی از private یا protected استفاده کنی

به عنوان مثال شما مثلا میخوای اون پراپرتی و متدی که تعریف میکنی فقط در داخل همون کلاس قابل استفاده باشه و بیرون از کلاس و حتی کلاس های فرزند همقابل دسترسی نباشه برای این حالت از private استفاده میکنید که اصطلاحا بهش Implementaion hiding یا پیاده سازی پنهان میگن که البته با متدهای setter و getter میتونیم به مقادیر private دسترسی پیدا کنیم

یه زمانی هم میخواید علاوه بر این کلاس در کلاس فرزند هم قابل دسترس باشه که از protected استفاده میکنی


don_inter
تخصص : web developer
@intersubjektiv 5 سال پیش مطرح شد
0

@dfardabasi
ابتدا تشکر میکنم از کامنتتون
اما شما تعریفی کردید از خصیصه پراپرتی ها که خب این کاملا مشخصه چیکار دارند میکنند
اما سوال من اینکه خب اکی دسترسی اصلا پیدا کنن چه اشکالی داره ! از یه طرف ما میاییم اونها رو protected یا private معرفی مکنیم بعد دوباره برای دسترسی به همونها میاییم متدی پابلیک ایجاد میکنیم که دسترسی داشته باشیم بهش
من منطق داستان برام سوال برانگیزه که خب اخه واسه چی !!
یا چه الگویی و معماری درستی وجود داره که بشه واقعا درک کرد که خب در اینجا من الزام این رو دارم که اینکارو بکنم
میدونی منظورم چیه ! من واقعا گاهی وقتی میخوام پراپرتی ها رو معرفی کنم گیج میشم خب این و الان خصیصه چی بهش بدم !!!


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

درود

ببینید ما در برنامه نویسی شئ گرا، مبحثی داریم به نام Encapsulation یا کپسوله سازی. میتونید به عنوان ساختن یه جعبه سیاه به دور آبجکت‌ها بهش نگاه کنید که در مواقع لازم دسترسی به پراپرتی و متدها رو کنترل میکنه:

چه برای پراپرتی ها و چه برای متد ها میتونید تعیین کنید که

  • از خارج کلاس چه چیزهایی قابل دسترسیه (public)
  • چه چیزهایی تنها در داخل کلاس قابل دسترسیه (private)
  • چه چیزهایی تنها در داخل کلاس و کلاس های ارث‌برده قابل دسترسیه (protected)

یه مثال:
کلاس App رو در نظر بگیرید که مسئول اجرای برنامه شماست و متدی داره به نام run که این کارو انجام میده

Class App {

    public function run() 
    {
        $this->connect();
        $this->connect();
        $this->connect();
        return ;
    }

    protected function connect() 
    {

    }

    protected function queryDatabase() 
    {

    }

    protected function fetchDatabaseResults() 
    {

    }

}

متد run در واقع داره متدهای دیگه رو فراخوانی میکنه و نتیجه رو بر میگردونه , و خیلی ساده میشه بهش دسترسی داشت:

(new App)->run();

در مثال بالا تنها چیزی ما برای اجرا لازم داریم همون run هست و مثلا احتیاجی نداریم مستقیما به متد fetchDatabaseResults دسترسی داشته باشیم... پس این متد رو کپسوله میکنیم...


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام