سلام بر دوستان عزیز
سوالم شاید کمی سطح پایین باشه برای اون عزیزان که خب سالهاست دارن برنامه نویسی میکنن
اما به شخصه برام سوالی مطرح شده در بحث کلاس نویسی قسمت معرفی پراپرتی ها که بر سه دسته هستند
اصلا ما در چه جاهایی و بر اساس چه منطقی میتونیم تشخیص بدیم که در کجا بهتره وضعیت پراپرتی ما در حالت private باشه یا protected چرا اصلا همه رو در حالت public در نظر نمیگیریم
چیزی که من متوجه شدم اینکه خب اطلاعاتی که محرمانه هستند برای سایت مثل اتصال به دیتابانک خب باید در حالت خصوصی باشند اما در بقیه موارد چطور میتونیم تشخیص درستی بدیم اصلا الان واسه این وضعیت کدوم حالت بهتر هستش
ممنون میشم از راهنمایی های شما عزیزان :)
سلام
@intersubjektiv
خوب به عنوان مثال شما 2 تا پراپرتی میخوای تعریف کنی داخل کلاس
اگر public بذاری به این معنی هست که در همه جا به پراپرتی دسترسی داری چه داخل کلاس چه خارج کلاس
اما یه سری اوقات شما میخوای سطح دسترسی برای پراپرتی یا متدهات مشخص کنی که میتونی از private یا protected استفاده کنی
به عنوان مثال شما مثلا میخوای اون پراپرتی و متدی که تعریف میکنی فقط در داخل همون کلاس قابل استفاده باشه و بیرون از کلاس و حتی کلاس های فرزند همقابل دسترسی نباشه برای این حالت از private استفاده میکنید که اصطلاحا بهش Implementaion hiding یا پیاده سازی پنهان میگن که البته با متدهای setter و getter میتونیم به مقادیر private دسترسی پیدا کنیم
یه زمانی هم میخواید علاوه بر این کلاس در کلاس فرزند هم قابل دسترس باشه که از protected استفاده میکنی
@dfardabasi
ابتدا تشکر میکنم از کامنتتون
اما شما تعریفی کردید از خصیصه پراپرتی ها که خب این کاملا مشخصه چیکار دارند میکنند
اما سوال من اینکه خب اکی دسترسی اصلا پیدا کنن چه اشکالی داره ! از یه طرف ما میاییم اونها رو protected یا private معرفی مکنیم بعد دوباره برای دسترسی به همونها میاییم متدی پابلیک ایجاد میکنیم که دسترسی داشته باشیم بهش
من منطق داستان برام سوال برانگیزه که خب اخه واسه چی !!
یا چه الگویی و معماری درستی وجود داره که بشه واقعا درک کرد که خب در اینجا من الزام این رو دارم که اینکارو بکنم
میدونی منظورم چیه ! من واقعا گاهی وقتی میخوام پراپرتی ها رو معرفی کنم گیج میشم خب این و الان خصیصه چی بهش بدم !!!
درود
ببینید ما در برنامه نویسی شئ گرا، مبحثی داریم به نام Encapsulation یا کپسوله سازی. میتونید به عنوان ساختن یه جعبه سیاه به دور آبجکتها بهش نگاه کنید که در مواقع لازم دسترسی به پراپرتی و متدها رو کنترل میکنه:
چه برای پراپرتی ها و چه برای متد ها میتونید تعیین کنید که
یه مثال:
کلاس 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 دسترسی داشته باشیم... پس این متد رو کپسوله میکنیم...
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟