class test {
private $variablePrivate;
public funtion setVariablePrivate($value) {
$this->variablePrivate = $value;
}
public function getVariablePrivate() {
return $this->variablePrivate;
}
private function functionPrivate() {
return 'Private Function Called';
}
public function callPrivateFunction() {
return $this->functionPrivate();
}
}
$sajad = new test;
$sajad->variablePrivate = 'som Data'; // Error
$sajad->setVariablePrivate('som Data'); //0k
echo $sajad->variablePrivate; //Error
echo $this->getVariablePrivate(); //0k
echo $this->functionPrivate(); //Error
echo $this->callPrivateFunction(); //0k
همونطوری که میبینید من در کد بالا متغیر variablePrivate رو به صورت Private تعریف کردم به خاطر همین اگه بخوام از نمونه ساخته شده از کلاسم به صورت مستقیم بهش دسترسی پیدا کنم با خطا مواجه میشم پس برای مقدار دهی به اون باید از تابعی که در کلاس قرار داره استفاده کنم و برای دریافتش هم همچنین . اما این کار چه فایده ایی داره این کار بیشتر برای زمانی استفاده میشه که شما میخواید یک متغیر با مقداری که کاربر میده تکمیل نکنید و قبل از مقدار دهی به اون خودتون دست کاری روی مقدار انجام بدید و چند مورد دیگه.
مثال زیر رو ببینید
class customDate {
private $startDate;
public function setStartDate($value) {
$this->startDate = strtotime($value);
}
public function getStartDate() {
return timetostr($this->startDate);
}
public function diffDate() {
return $this->startDate - now();
}
}
$diffDate = new customDate;
$diffDate->setStartDate($_POST['start_date']);
echo 'Diff Date: '. $diffDate->diffDate();
در این کد متغیر startDate رو به صورت private معرفی کردم که در کد مجبور باشم برای مقدار دهی این متغیر از تابع setStartDate استفاده کنم که قبل از مقدار دهی تاریخ ارسال شده رو به timestamp تبدیل کنم و بعد به متغیر بدمش و برای خوندن مقدار متغیر هم تابع getStartDate رو ایجاد کردم که در تابع قبل از خروجی دادن مقدار متغیر اون مقدار رو به همون تاریخ معمولی بر میگردونم.
و یه تابع هم تعریف کردم به نام diffDate که اختلاف تاریخ ها رو به کمک اون تابع میگیرم و به خروجی میدم.
اگه جاییش ابهام دارید بگید تا مجدد توضیح بدم.