تعریف کلاس و استفاده از پرنت

[rtl]

یه توضیح کوتاه در مورد کد زیر میخوام دوستان لطف کنن که این توع تعریف چیه[/rtl]




    public static function model($className=__CLASS__)     {         return parent::model($className);     }

    public function tableName()     {         return 'tbl_persons';     }



[rtl]و این که نام تابع tableName مختص خود فریم ورک هستش؟[/rtl]

[right]

در مورد تابع اول پرنتی که دارد از آن استفاده می کند اشاره به کلاسی دارد که این مدل از آن اکستند شده است که در اینجا اکتیورکورد می باشد و از این تابع که یک تابع استاتیک می باشد در مواردی مانند مثال زیر استفاده می کنیم

Post::model()->findAll();

که همانطور که میبینید از طریق این تابع از تابع جستجو در اکتیورکورد استفاده می کنیم

در مورد تابع دوم هم باید بگم که از این تابع بیشتر خود فرم ورک بزای شناسایی جدول دیتابیسی که مدلمان با آن در ارتباط است استفاده می کند و خیلی برای ما قابلیت استفاده در برنامه نویسی ندارد

[/right]

[rtl]سلام. من الان این تیکه رو درست متوجه نشدم[/rtl]


 return parent::model($className);

[rtl]یعنی پرنت به کلاس پدری اشاره میکنه که مدل توشه؟ کارش اینه که یه فایند آل میزنه به دیتابیس؟

این تکه کد زیر هم تو مودل دموی بلاگ هستش:

[/rtl]


	protected function afterSave()

	{

		parent::afterSave();

		Tag::model()->updateFrequency($this->_oldTags, $this->tags);

	}



[rtl]

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

[/rtl]

[rtl]سلام.کسي اين مورد بالايي روتوضيح ميده[/rtl]

[rtl]اون فراخوانی که انجام شده آمده پرنت از کلاس پدرش را فراخوانی کرده البته خود همین کلاس هم میتونه متدی به همان نام داشته باشه. اینه مربوط به مباحث شئ گرایی میشه.

خط آخر هم اومده متد updateFrequency() از مدل Tag را فرا خونی کرده است.

[/rtl]

[rtl] اینکه فراخانی کرده رو میدونم ولی معنیش چیه؟ نه چیزی ارسال کرده و نه چیزی گرفته

الان این فراخانی به چه درد میخوره؟

[/rtl]

[rtl]توی همون داک مثال بلاگ گفته. اگر دست یادم باشه این متد برای شمارش تعداد تگهای هر مطلب باید باشه.

[/rtl]

[rtl]

[font="Tahoma"]

اینجا فقط همین متد رو از کلاس parent فراخونی کرده و لازم نیست که حتما ورودی یا خروجی داشته باشه، در برنامه نویسی شی گرا اگه هدف از بازنویسی (override) یک متد از کلاس parent گسترش و نه تغییر اون متد باشه، و از اونجا که معمولا این گسترش در امتداد کارهای انجام شده در parent هست، متد مورد نظر از کلاس parent رو فراخونی میکنند.

در این مورد متد afterSave از کلاس CActiveRecord ایونت onAfterSave رو اجرا کرده بنابراین برای اجرای این event باید این متد رو در کلاسهای child فراخونی کنیم.

[/font]

[/rtl]