• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Object Return Self
#1
سلام دوستان
دیدید بعضی جاها به این صورت کد می نویسند
کد پی‌اچ‌پی:
$MyClass->function1('value')->function2-()->anotherFunc->(); 
برای هر کسی این سوال پیش میاد که چطوری می شه اینطوری کد نویسی کرد ؟
از نظر خوانایی ، سرعت تایپ هم بهتر به نظر می یاد تا اینکه هر بار نام کلاس رو فراخوانی کنیم و بعد نام تابع و سمی کالن و بعد دوباره همین کار و بعد دوباره همین کار

این مثالی که می زنم خیلی سادست

کد پی‌اچ‌پی:
<?php

class MyClass {
    public function 
func1() {
        echo 
"func1()\n";
        return 
$this;
    }
    public function 
func2() {
        echo 
"func2()\n";
        return 
$this;
    }
    public function 
func3() {
        echo 
"func3()\n";
        return 
$this;
    }
    public function 
func4() {
        echo 
"func4()\n";
        return 
$this;
    }
}

$obj = new MyClass();

// You can do this:
$obj->func1();
$obj->func2();
$obj->func3();
$obj->func4();

// OR you can do this:
$obj->func1()->func2()->func3()->func4();
؟
در آینده روی این موضوع بیشتر بحث می کنیم البته بعد از مطرح کردن توابع جادویی
  پاسخ
تشکر شده توسط : HiddeN molana k2-4u parvane admin
#2
نقل قول:برای هر کسی این سوال پیش میاد که چطوری می شه اینطوری کد نویسی کرد ؟
ممنون که انقدر خوب مطالب تونو ارائه میدید و واقعا زحمت میکشید
-----------------
نقل قول:از نظر خوانایی ، سرعت تایپ هم بهتر به نظر می یاد تا اینکه هر بار نام کلاس رو فراخوانی کنیم و
به نظر من خوانایی کد ، سیستم انجام تغییر و به روز رسانی در کدهای بزرگ و پایین میاره
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط : molana
#3
نقل قول:به نظر من خوانایی کد ، سیستم انجام تغییر و به روز رسانی در کدهای بزرگ و پایین میاره
چطوری ؟
  پاسخ
تشکر شده توسط : k2-4u
#4
این قابلیت در جاوا اسکریپ chianable نام داره
http://forum.iranphp.org/Thread-مقاله-مب...در-شی-گرای
این تاپیک می تونه به شما نشون بده که این قابلیت . چه مواقعی میتونه به داد آدم برسه
  پاسخ
تشکر شده توسط : admin
#5
به نظر من روابط زنجیره ای فهم کد و دشوار میکنن
ابجکتها مستقل هستن. مستقل هستن یعنی هرکدوم تو سیستم یه موجودیت جداگانه دارن
پس باید هرکدوم با رابطه هاشون جدگانه به وجود بیان.
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#6
اگر یادتون باشه این سوال من بود. االبته نه به این صورت. بلگه استفاده زنجیر وار از چند کلاس
  پاسخ
تشکر شده توسط :
#7
یادم نیست من چی گفته بودم ، گفته بودم خوبه ؟
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#8
نقل قول:ابجکتها مستقل هستن. مستقل هستن یعنی هرکدوم تو سیستم یه موجودیت جداگانه دارن
بله ، این حرف شما کاملا درسته و بخاطر همین هست که این قابلیت به صورت پیش فرض وجود نداره و حتی در مانوال خود PHP هم از این روش هیچ جا استفاده نشده. اما کاربردش در بعضی مواقع غیر قابل تکذیبه
به عنوان مثال در Doctrine ORM شما می تونید به این صورت هم دستور SELECT رو پیاده سازی کنید
کد پی‌اچ‌پی:
$q Doctrine_Query::create()
       ->
select('u.username')
    ->
from('User u')
    ->
leftJoin('u.Phonenumbers p')
    ->
having('COUNT(p.id) > 3'

من فکر می کنم برای یه همچین کاری این بهترین راهه که بتونیم خیلی سریع و راحت بفهمیم که کد چه کاری انجام میده تا اینکه هر بار نام آبجکت رو فراخوانی کنیم و هر بار یه سمی کالون آخرش بزاریم ، دوباره اینتر و دوباره کار قبل رو تکرار کنیم. استفاده از این روش نمی تونه همیشه کاربرد داشته باشه. هرچند این قابلیت هنوز در PHP اضافه نشده اما به نظر من خوبه که یک متود جادویی برای این کار هم ساخته بشه تا بشه بهترین تصمیم رو بگیریم زمانی که کاربر کد رو به این صورت فراخوانی می کنه

نقل قول:اگر یادتون باشه این سوال من بود. االبته نه به این صورت. بلگه استفاده زنجیر وار از چند کلاس
امید وارم شما هم پاسخ خودتون رو گرفته باشید
  پاسخ
تشکر شده توسط : zoghal
#9
نه زیاد این لینک رو نگاه کنید.
http://forum.iranphp.org/Thread-%DA%A9%D...8%B9%DB%8C
  پاسخ
تشکر شده توسط :
#10
جواب سوال شما Delegation هست.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان