آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

فیلد خصوصی در کلاس Db

مهدی  9 سال پیش  9 سال پیش
0 0

با سلام

در قسمت اتصال PHP به پایگاه داده یک فیلد خصوصی به نام $connection تعریف شده است و تمامی فراخوانی سایر متد های تابع از طریق این متغیر انجام شده است.

من چندین بار این قسمت رو مشاهده کردم اما متاسفانه متوجه نشدم دقیقا چرا ما امدیم چنین کاری رو کردیم و اصلا چه نیازی بود به این کار

ممنون میشم یکی از دوستان 1- کارکرد این متغیر رو تشریح کنه 2- چه نیازی به انجام این کار بود؟ 3- اگر این متغیر تعریف نمیشد راهکار دیگری هم وجود داشت؟

 

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
محمد  9 سال پیش
0 0

سلام علیکم

این متغیر برای وصل شدن به دیتابیس هست

برای اینکه صفحه ای ک شما طراحی کردید اطلاعاتش در جایی ذخیره بشه نیازمند این هست

که یک فضایی موجود باشه تا ما اطلاعاتمون رو داخلش ذخیره کنیم!

این فضا اسمش دیتابیس هست

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

کاربرد این متغیر هم این هست ک( حالا حتما همین اسم نباید باشه میتونه اسم دیگه ای باشه)

طبق اون چیزهایی ک داخلش میریزیم (ک استاد جلوش نوشتن)باعث میشه ما طبق اون دستور به دیتابیس خودمون متصل بشیم

db هم مخفف همین دیتابیس هست و کلا اون کلاس برای وصل شدن به دیتابیس و اطلاعات ریختن داخل دیتابیس و حذف کردن و کارهایی ک لازم داریم از دیتابیس هست

استاد یک کلاس بااین نام نوشتن و ما هر کاری ک بخوایم با دیتایبسمون انجام بدیم رو داخل این کلاس مینویسیم و فقط فراخوانیش میکنیم!

فرض بفرمایید ک مثلا شما یک خانه دارید حالا تو این خانه یک اشپز خانه هم دارید خب وسایل مربوط به اشپز خانه رو دراین محل میگذارید مثلا  یخچال یا فریزر یا گاز و ظروف و ... دیگه ماشین خودتون رو یا شارژر گوشیتون رو یابقیه ی وسایل نامربوط رو اینجا قرار نمیدید! بعد هرزمان ک فرضا گرسنه شدید یا تشنه شدید یابرای رفتن به پیکنیک میخواستید یک سری وسایل مربوطه شو بردارید و ازاین دست کارها به اشپز خانه مراجعه میکنید ! چون میدونید تمام اون وسایل مورد نیاز رو در این محل گذاشتید!

این کلاس هم یک همچین وضعیتی داره

یکی از قسمت هاش وصل شدن به دیتابیس هست همین متغیر ک شما نوشتید ک میتونه حالا اسم دلخواه شما رو داشته باشه

و بعدا خواهید دید توابع دیگه ای رو استاد داخل این کلاس مینویسند مثلا delete یا insert و چیزهای دیگه

و بعدا در هرصفحه ای ک طراحی میشه مثلا پروژه ی نوت اون قسمتی ک قراره اطلاعاتمون رو ذخیره کنیم که از بین نره!از این کلاس استفاده میکنیم و به دیتابیس وصل میشیم و از توابع موجودش استفاده میکنیم

حالا بعدا بخاطر اینکه امنیت کارما بیشتر بشه و .... یک فایلی به نام کانفیگ ایجاد میکنن ک در این فایل تنظیمات رو قرار میدیم ازجمله رمز ورود نام کاربری و اطلاعاتی ک برای وصل شدن به دیتابیس لازم داریم رو دراین فایل قرار میدیم!و این فایل رو داخل اون صفحه ای ک کلاس دی بی رو داخلش نوشتیم ایمپورت (اسم اون کلمه ی اصلی در خاطرم نیست! ولی خودتون متوجه منظور من شدید یا خواهید شد )میکنیم و وصلش میکنیم به صفجه ای ک کلاس دی بی رو داخلش نوشتیم! و بعدا خواهید دید ک این ایمپورت کردن ها به قدری زیاد میشه ک ما گاهی فراموش میکنیم ک بخوایم یکیش رو ایمپورت کنیم و دراینجاست ک استاد وارد فاز جدیدی میشن و موضوعی رو مطرح میکنن ک کار راحت تر میکنه و اون این هست که شما دیگه نمیاید تمام صفحات رو یکی یکی در هر صفحه ای ایمپورت کنید! و همه رو در یک صفحه به نام فرضا main ایمپورت میکنید و بعد این تک صفحه رو تنها در  صفحاتی ک باید ایمپورت کنید ، ایمپورت میکنید ک باعث میشه تمام صفحات دیگه ای ک باید ایمپورت میکردید به طبع همین ک ایمپورت کردید ، ایمپورت بشن! :)   D:

اگر پاسخ سوالتون رو گرفتید لطفا در نظرات تشکر نکنید! و به لایک کردن پاسخم بسنده کنید (درابتدای پاسخم و سمت چپ :) )

امیدوارم جواب سوالتون رو گرفته باشید یاعلی

پاسخ به سوال 
کاشی زاده  9 سال پیش
+3 0

شما در کلاس Db متد های مختلفی جهت برقراری ارتباط با دیتابیس دارید که شامل :

  1.  متد first
  2. متد query
  3. متد modify
  4. متد insert
  5. متد close

برای برقراری ارتباط با دیتابیس نیاز هست که ما به پایگاه داده متاصل بشیم و برای اتصال به پایگاه داده از این دستورات استفاده کردیم :

       $host = $config['db']['host'];
$user = $config['db']['user'];
$pass = $config['db']['pass'];
$name = $config['db']['name'];


$this->connection = new mysqli($host, $user, $pass, $name);
if ($this->connection->connect_error) {
echo "Connection failed: " . $this->connection->connect_error;
exit;
}
$this->connection->query("SET NAMES 'utf8'");

خب حالا اگر قرار باشه برای هر متد اینو تکرار کنیم کد ما بدون جهت طولانی میشه .

پس ما یک constructor ایجاد کردیم و این کد هارو داخلش ریختیم و گفتیم هروقت نمونه ای از کلاس Db ایجاد شد تو با دیتابیس با استفاده از کد ها ارتباط برقرار کن.

حالا برای اینکه به connection برقرار شده در همه متد ها و کلاس Db دسترسی داشته باشیم به یک متغیر private تبدیلش کردیم.

 

پاسخ به سوال 
مهدی  9 سال پیش
+1 0

تشکر از هر دو دوست عزیز

کاملا متوجه شدم که چرا این متغیر خصوصی تعریف شده :)

اما واقعا یک چیز  رو اصلا نفهمیدم :(

یک متد connection نیز تعریف شده که داخل این متد دستور زیر درج شده است

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

کار این متد چیست؟ من وقتی از این متد خروجی می گیرم و چاپ می کنم 100 ارور داده میشه :((

0 0
همونطور که گفتید این فیلد به صورت خصوصی (private) پس خارج از کلاس Db بهش دسترسی نیست ، حالا اگر نیاز داشته باشیم که خارج از این کلاس هم به این فیلد دسترسی وجود داشته باشه میتونیم از این متد استفاده کنیم . اگر خطایی میده باید ببنید خطا چیه . (9 سال پیش)
0 0
جناب کاشی زاده ممنونم از شما مگر فیلد کانکشین تنها برای این نیست که بتونم ازش داخل خود کلاس استفاده کنیم؟(برای جلوگیری از تعداد کانکشن بالا به پایگاه داده) حالا چه نیازی داریم که خارج از کلاس به این فیلد دسترسی داشته باشم؟ (9 سال پیش)
+1 0
کانکشن یکبار برقرار میشه ولی شما میتونید به جای اینکه از safeQuery استفاده کنید خودتون مستقیم درخواست بزنید به سرور که در این شرایط امنیت دیتابیس رو باید خودتون کنترل کنید ، بیشتر برای شما جنبه آموزشی داره که چطوری از یک فیلد private بشه استفاده کرد به این کار نوشتن getter میگن ولی میتونید حذفش کنید . (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .