PDA

View Full Version : سوال: متد private در کلاس php چیست



mosi2007
یک شنبه 06 فروردین 1391, 02:32 صبح
متد private در کلاس php چیست؟

narsic
یک شنبه 06 فروردین 1391, 10:10 صبح
Private یک متد نیست بلکه یک تعریف کننده است.
به کمک این تعریف کننده شما میتونید مشخص کنید که هیچ کلاس فرزندی و یا نمونه ایی از این کلاس نمیتونه به این تابع، متغیر و... دسترسی داشته باشه.
نحوه استفاده هم به این شکل

private function test() {}
private $test;
نوروزتون مبارک
موفق باشید

mosi2007
یک شنبه 06 فروردین 1391, 11:52 صبح
Private یک متد نیست بلکه یک تعریف کننده است.
به کمک این تعریف کننده شما میتونید مشخص کنید که هیچ کلاس فرزندی و یا نمونه ایی از این کلاس نمیتونه به این تابع، متغیر و... دسترسی داشته باشه.
نحوه استفاده هم به این شکل

private function test() {}
private $test;
نوروزتون مبارک
موفق باشید
خیلی سخت توضیح دادین اگه میشه با یه مثال کوچولو برام توضیح بدید

narsic
یک شنبه 06 فروردین 1391, 12:37 عصر
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 که اختلاف تاریخ ها رو به کمک اون تابع میگیرم و به خروجی میدم.
اگه جاییش ابهام دارید بگید تا مجدد توضیح بدم.