آموزش شی گرایی / OOP در PHP (متودهای جادویی)

صفحه اصلی » انجمن ها
« در صورت وجود هرگونه اشکال در این مطلب لطفا گزارش اشکال آن را ارسال نمایید »

در برنامه نامه نویسی شی گرایی متودهایی داریم که به طور پیش فرض توسط PHP نوشته شده است که به آن ها متودهای جاودیی گفته می شود. این متودها با __ شروع می شوند و برخی از این متودها قابلیت return کردن را ندارند. معمولا برای این متودها از تعریف سطح دسترسی هایی نظیر public و private و protected خود داری می شود.

مقالات و آموزش
بیشتر بخوانید
به طور کلی ۱۶ متود جادویی داریم که در این آموزش ۸ مورد از مهمترین و پر استفاده ترین متودها آموزش داده می شود.
معرفی متود construct
نام این متود "سازنده" می باشد و بلافاصله پس از فراخوانی کلاس مورد نظر، این متود اجرا خواهد شد.
عموما برای مقداردهی های اولیه از این متود استفاده می شود. این متود قابلیت دریافت پارامتر را مانند دیگر متودها دارد. اما قابلیت return کردن مقادیر را ندارد.
نمونه کد متود جادویی با متود "سازنده (construct)":
class Test {
        function __construct(){
                echo "create!";
        }
}

$test = new Test(); // Output: create!
همانطور که در کد بالا می بینید، پس از ساخته شدن "شی" جدید، بدون فراخوانی متود، مقدار متود construct چاپ شد.
همچنین برای ارسال پارامتر به این متود، می توان مقادیر را هنگام ساخت شی مانند کد زیر ارسال کرد:
class Test {
        function __construct($value){
                echo "hello ".$value;
        }
}

$test = new Test("Fidaxo"); // Output: hello Fidaxo
متود destruct
نام این متود "تخریب کننده" می باشد و برعکس متود construct عمل می کند.
این متود دقیقا قبل از پاک شدن "شی" از حافظه اجرا می شود و هیچ مقداری به این متود نمی توان ارسال کرد.
یک مثال ترکیبی از متود سازنده و متود تخریب کننده:
class Test {
        function __construct(){
                echo "create!";
        }

        function __destruct(){
                echo "remove!";
        }
}

$test = new Test(); // Output: create! remove!
متود call
این متود، "تابع ساز (function)" است و می توانیم بدون تعریف توابع در کلاس مورد نظر، یک تابع کوچک بسازیم.
این متود دو پارامتر دریافت می کند.
پارامتر اول نام تابع و پارامتر دوم مقادیر مورد نظرمان است که در یک آرایه ارسال می شود.
همانطور که در کد زیر می بینید تابع go ساخته و مقادیر داخلی آن نیز در یک آرایه دریافت می شود.
class Test {
        function __call($name, $arg){
                echo "Function name is : ".$name." and arg is: ";
                foreach($arg as $value){
                        echo $value.", ";
                }
        }
}

$test = new Test();
$test->go("bank", "school"); // Output: Function name is : go and arg is: bank, school,
متود callStatic
این متود دقیقا مانند متود call عمل می کند با این تفاوت که می توان آن را به صورت static ساخت.
توجه داشته باشید که تابع باید به صورت static باشد. (در جلسات بعدی توابع static آموزش داده خواهد شد):
class Test {
        public static function __callStatic($name, $arg){
                echo "Function name is : ".$name." and arg is: ";
                foreach($arg as $value){
                        echo $value.", ";
                }
        }
}

$test = new Test();
$test::go("bank", "school"); // Output: Function name is : go and arg is: bank, school,
متود set
این متود به طور اتوماتیک متغیر های خصوصی کلاس را مقدار دهی می کند و دو پارامتر دریافت می کند.
پارامتر اول نام "خصوصیت (Property)" و پارامتر دوم مقدار مورد نظر می باشد.
نکته: برای دسترسی به متغیر های هر کلاس، از کلمه کلیدی $this استفاده می شود. (در جلسات آینده آموزش داده خواهد شد):
class Test {
        private $age = 20;

        function __set($property, $value){
                $this->$property = $value;
        }

        public function run(){
                echo $this->age;
        }
}

$test = new Test();
$test->run(); // Output: 20
$test->age = 15;
$test->run(); // Output: 15
متود get
این متود برعکس متود set عمل می کند و متغیر های خصوصی هر کلاس را بر می گرداند.
class Test {
        private $age = 20;

        function __get($property){
                return $this->$property;
        }
}

$test = new Test();
echo $test->age; // Output: 20
متود isset
در زبان PHP تابعی به نام isset داریم. این تابع بررسی می کند آیا "متغیر (Variable)" ما ارسال شده است یا خیر.
به طور معمول برای متغیرهای public از یک کلاس، تابع isset عمل می کند اما برای متغیر های private این تابع عمل نمی کند.
برای رفع این مشکل از متود جادویی __isset می توان کمک گرفت:
class Test {
        private $name;
        private $age = 20;

        function __isset($property){
                return isset($this->$property);
        }
}

$test = new Test();
var_dump(isset($test->age)); // Output: true
var_dump(isset($test->name)); // Output: false
متود unset
این متود مانند متود isset عمل می کند با این تفاوت که مقادیر را از حافظه پاک می کند:
class Test {
        private $age = 20;

        function __unset($property){
                return isset($this->$property);
        }
}

$test = new Test();
unset($test->age);
دیگر متودهای جاودیی
sleep : این متود برای صدا زدن serialize در خارج از کلاس استفاده می شود wakeup : این متود برای صدا زدن unserialize در خارج از کلاس استفاده می شود toString : یک رشته را به طور اتوماتیک بر می گرداند invoke : زمانی که یک شی را به تنهایی صدا می زنید مقدار مورد نظر را بر می گرداند set_state : مانند var_dump مقادیر نهایی کلاس را بر می گرداند (با فراخوانی تابع var_export) clone : یک شی را در شی دیگر می توان کپی کرد autoload : این تابع برای فراخوانی اتوماتیک کلاس ها می باشد debugInfo : از طریق var_dump اجرا می شود و تمام خصوصیت ها را با جزییات چاپ می کند

اشتراک گذاری مطلب

این مطلب را با دوستانتان در شبکه های اجتماعی به اشتراک بگذارید و معرفی نمایید

لطفا جهت ثبت نظر یا پرسش و پاسخ ابتدا وارد سایت شوید یا ثبت نام نمایید
مــطالب مــرتبط با این مــوضـوع

دیگر مطالب خواندنی

آخرین اخبار تکنولوژی، آموزش برنامه نویسی، توسعه زبان ها و ... را در وبلاگ آکادمی فیداکسو دنبال کنید
همچنین از آخرین خبرها و تخفیفات سایت نیز اینجا آگاه شوید

تفاوت متودهای GET و POST

پروتکل http از این متودها برای ارسال و دریافت اطلاعات و مدیریت آن بین درخواست دهنده و سرور ...

بیشتر بخوانید »