PDA

View Full Version : سوال: OOP یا برنامه نویسی شی گرا



engmmrj
پنج شنبه 05 بهمن 1391, 18:39 عصر
این متد های جادویی چه کارهایی انجام می دهند؟
__construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state و __clone
و
کلمه کلیدی Static

engmmrj
پنج شنبه 05 بهمن 1391, 18:51 عصر
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() called\n";
}

final public function moreTesting() {
echo "BaseClass::moreTesting() called\n";
}
}

class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() called\n";
}
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>
کلمه کلیدی final چیکار میکنه؟

MostafaEs3
پنج شنبه 05 بهمن 1391, 19:13 عصر
فاینال اگه روی کلاس بذاری باعث میشه نشه با extends ازش Children (فرزند) گرفت و قابل کپی گرفتن نباشه - اگه روی تابع بذاری نمیذاره توی کلاس فرزند یک تابع مشابه تابعی توی کلاس اصلی باشه و خطا میده
---------
که اگه دقت کنی روی همین مثال این اتفاق افتاده !! روی کلاس فرزند تابع moreTesting وجود داره ، همین تابع روی کلاس پدر هم هست - اگه حالت فاینال رو برداری تابعی که توی کلاس فرزند وجود داره توی اولویت قرار میگیره

mtchabok
جمعه 06 بهمن 1391, 02:38 صبح
سلام
دوست عزیز فکر کنم اگه به مثالهای منبع نگاهی بندازید تمام جوابهاتون رو میگیرید .
http://php.net/manual/en/language.oop5.magic.php

engmmrj
جمعه 06 بهمن 1391, 10:28 صبح
دوست عزیز فکر کنم اگه به مثالهای منبع نگاهی بندازید تمام جوابهاتون رو میگیرید .
خوب منم همون اول از رو سایت php.net اینارو دیدم که برام سوال پیش اومد که اینار کارشون چیه
مثال هاشون رو هم نگاه کردم ولی چیزی نفهمیدم

mtchabok
جمعه 06 بهمن 1391, 23:39 عصر
پس نگاهی به این بندازید .
http://php.net/manual/fa/language.oop5.magic.php

اگه مشکلی داشتید به این تاپیک سری بزنید
http://barnamenevis.org/showthread.php?83103

و قسمتهایی که متوجه نشدید رو بگید تا بنده یا دوستان کمکتون بکنیم

engmmrj
شنبه 07 بهمن 1391, 19:27 عصر
سایت خود php که درست توضیح نداده .
تو اون تاپیک هم فقط construct و destruct رو توضیح داده بود.
اگه میشه بقیه رو برام توضیح بدید.
موفق باشید:خجالت:

mtchabok
یک شنبه 08 بهمن 1391, 15:22 عصر
سلام
خوب سعی میکنم که خلاصه توضیح بدم . در ضمن مثالها هم در همون منبع هست و دوباره در اینجا نمی نویسم .



__toString
این متد رشته بر میگردونه و اگه در کلاس تعریف کنید از این پس شئی ساخته شده از کلاس قابلیت برگرداندن به صورت رشته را خواهد داشت ( در صورتیکه فقط خود متغیر شئی صدا زده شده باشد ) .

__isset
این متد مقدار بولین بر میگردونه و کارش این هست تشخیص بده که آیا پروپرتی مورد نظر که به صورت آرگومنت دریافت میکنه در شئی وجود داره یا نه .
در ضمن این متد به صورت اتوماتیک اگر وجود داشته باشد توسط تابع isset مورد استفاده قرار خواهد گرفت . اگه به صورت واقعی پروپرتی وجود داشته باشه از این متد استفاده نخواهد شد

__get
برای برگرداندن محتوای یک پروپرتی هست که نام پروپرتی توسط آرگومنت به این متد داده میشه . مقدار بازگشتی هم نوع پروپرتی درخواستی هست . اگر این متد در کلاس تعریف شود دیگر خطای وجود نداشتن پروپرتی در شئی داده نمیشود . در ضمن اگر پروپرتی به صورت واقعی در شئی وجود داشته باشه از این متد استفاده نمیشه .

__set
این متد به صورت void است یعنی مقدار بازگشتی ندارد البته دو آرگومنت دارد ، آرگومنت اول نام پروپرتی و آرگومنت دوم مقدار جدید برای پروپرتی مورد نظر . که هرگاه پروپرتی ای در شئی به صورت واقعی وجود نداشته از این متد استفاده میشه در هنگام مقدار دادن هب پروپرتی .

__unset
یک متد بدون بازگشت ، که فقط نام پروپرتی رو گرفته تا آنرا از شئی حذف کند . این متد توسط تابع unset صدا زده خواهد شد . البته اگه پروپرتی به صورت واقعی وجود داشته باشه از این متد استفاده نمیشه

__call
این متد برای صدا زدن متدها در کلاس هست ، البته متدهایی که وجود ندارند . دو آرگومنت دریافت می کند یکی نام متد و دومی نیز آرایه ای از آرگومنتهای ارسالی برای متد مورد نظر .

__sleep
این تابع پروپرتیهایی که قراره به صورت رشته در بیان رو به صورت آرایه بر میگردونه . این متد در تابع serialize مورد استفاده قرار میگیرد

__wakeup
این متد توسط تابع unserialize صدا زده میشه و کار به اصطلاح بیدار شدن رو انجام میده .

__invoke
این متد برای اجرای شئی به صورت یک تابع هست به صورتیکه بعد از ایجاد شئی می توان از متغیر ، مانند یک تابع استفاده کرد و آرگومنتهای __invoke آرگومنتهای همان تابع می باشد و همینطور بازگشت آن .