PDA

View Full Version : توضيح تيكه كد زير



soonami
دوشنبه 08 آبان 1391, 01:25 صبح
<?php

class MyClass
{
public $prop1 = "I'm a class property!";

public function __construct()
{
echo 'The class "', __CLASS__, '" was initiated!<br />';
}
public function __destruct()
{
echo 'The class "', __CLASS__, '" was destroyed.<br />';
}

public function __toString()
{
echo "Using the toString method: ";
return $this->getProperty();
}

public function setProperty($newval)
{
$this->prop1 = $newval;
}

public function getProperty()
{
return $this->prop1 . "<br />";
}
}

class MyOtherClass extends MyClass
{
public function __construct()
{
echo "A new constructor in " . __CLASS__ . ".<br />";
}

public function newMethod()
{
echo "From a new method in " . __CLASS__ . ".<br />";
}
}

// Create a new object
$newobj = new MyOtherClass;

// Output the object as a string
echo $newobj->newMethod();

// Use a method from the parent class
echo $newobj->getProperty();

?>

خروجی
A new constructor in MyOtherClass.
From a new method in MyOtherClass.
I'm a class property!
The class "MyClass" was destroyed.



بعضي جاهاشو ميدونم ولي بعضي جاهاشو نمي فهمم ميشه توضيح بدهيد
ممنون ميشم

colors
دوشنبه 08 آبان 1391, 09:14 صبح
بعضي جاهاشو ميدونم ولي بعضي جاهاشو نمي فهمم ميشه توضيح بدهيد
ممنون ميشم

سلام

بفرما...

<?php

// ساخت یک کلاس با نام MyClass
class MyClass
{
// یک خصوصیت(متغیر) با میدان دید عمومی که یک رشته را در خود نگه می دارد
public $prop1 = "I'm a class property!";

// متد(تابع) سازنده عمومی، که ترکیبی از نام کلاس جاری و یک رشته را چاپ میکند
public function __construct()
{
// چاپ پیغام. راه اندازی کلاس
echo 'The class "', __CLASS__, '" was initiated!';
}

// متد مخرب عمومی، که ترکیبی از نام کلاس جاری و یک رشته را چاپ میکند
public function __destruct()
{
// چاپ پیغام. نابود کردن کلاس
echo 'The class "', __CLASS__, '" was destroyed.';
}

// یک متد بازگشتی با میدان دید عمومی که یک ابتدا یک رشته را چاپ و بعدا از کلاس جاری متد
// getProperty()
// را فراخوانی میکند
public function __toString()
{
// چاپ یک رشته
echo "Using the toString method: ";
// فراخوانی متد و بازگشت آن
return $this->getProperty();
}

// متدی با میدان دید عمومی که یک پارامتر میگیرید و آنرا در خصوصیت
// $prop1
// میریزد. با این کار مقدار اولیه خصوصیت از بین می رود
public function setProperty($newval)
{
// ست کردن مقدار جدید خصوصیت با پارامتری که به تابع ارسال شده است
$this->prop1 = $newval;
}

// یک متد بازگشتی با میدان دید عمومی که مقدار نال را به انتهای خصوصیت
// $prop1
// اضافه می کند و آنرا برمیگرداند
public function getProperty()
{
// اضافه کردن مقدار نال به انتهای خصوصیت و بازگشت آن
return $this->prop1 . "";
}
}

// ساخت یک کلاس جدید که از کلاس بالای ارث می برد
class MyOtherClass extends MyClass
{
// متد(تابع) سازنده عمومی، که ترکیبی از نام کلاس جاری و یک رشته را چاپ میکند
public function __construct()
{
// چاپ پیغام. این یک سازنده جدید است
echo "A new constructor in " . __CLASS__ . ".";
}

// متدی با میدان دید عمومی که نام کلاس جاری و یک رشته را چاپ میکند
public function newMethod()
{
// چاپ رشته و نام کلاس جاری
echo "From a new method in " . __CLASS__ . ".";
}
}

// ساخت یک شی از کلاس MyOtherClass
// کلاس دومی(کلاس فرزند) می باشد که از کلاس اولی ارث برده است
$newobj = new MyOtherClass;

// فراخوانی متد
// newMethod()
// از کلاس اول با استفاده از شیء که از آن ساختیم
echo $newobj->newMethod();

// و فراخوانی متد
// getProperty()
// که از کلاس اولی(کلاس والد) به ارث برده شده است
echo $newobj->getProperty();

?>

soonami
دوشنبه 08 آبان 1391, 15:40 عصر
public function __construct()
{
// چاپ پیغام. راه اندازی کلاس
echo 'The class "', __CLASS__, '" was initiated!';
}

// متد مخرب عمومی، که ترکیبی از نام کلاس جاری و یک رشته را چاپ میکند
public function __destruct()
{
// چاپ پیغام. نابود کردن کلاس
echo 'The class "', __CLASS__, '" was destroyed.';
}





پس چرا اول اينو چاپ نمي كنه ؟؟؟؟؟

سوال 2 ارث بري چطوري بفهمونم بهش ؟ ميدونم با exten ولي

ايجا

// فراخوانی متد // newMethod()
// از کلاس اول با استفاده از شیء که از آن ساختیم
echo $newobj->newMethod();

// و فراخوانی متد
// getProperty()
// که از کلاس اولی(کلاس والد) به ارث برده شده است
echo $newobj->getProperty();

?>

اين مفهومه ميشه توضيح بدهيد بقيه قسمت ها عالي بود ممنون

colors
دوشنبه 08 آبان 1391, 16:57 عصر
چون هر دو تا کلاس تابع سازنده دارند، سازنده ی کلاسی که مستقیما صدا زده شده اولیت داره.

ارث بری یعنی اینکه هر خصوصیت(متغیر) یا متد(تابع) ای در کلاسی که میدان دید آن private نباشد در کلاسهای که از این کلاس ارث برده اند، قابل دستیابی هستند.
اصلا ارث بری رو فقط واسه این درست کردن که بتونی به خصوصیات و متدهای یک کلاس دیگر دسترسی داشته باشی به شرطی که از آن ارث ببری.

الان متد getProperty از کلاس پدر(اولی) میاد.
دقیقا هیچ فرقی نمیکنه انگار که خود اون متد رو تو کلاس دومی نوشتی.