آیا میشه متد static فرزند از پراپرتی های پدر که static نیستند استفاده کند؟

پرسیده شده
فعالیت 1371 روز پیش
دیده شده 525 بار
0

سلام و احترام

من یه utility تعریف کردم که نیاز داره از کلاس model ارث بری کنه، این کلاس model قبلا توسط model های دیگه ارث بری میشد. اما الان من نیاز دارم که از متدهاش و پراپرتی هاش تو یک کلاس utility استفاده کنم. وقتی از model ارث بری میکنم بهم اجازه استفاده نمیده چون ساختاری که از قبل براش طراحی کردم برای utility کلاس ها نبود و عملا از متدهای static نمیتونه پشتیبانی کنه. به کد پایین توجه کنید

class User extends Model{
    
    protected $table = 'users';
    protected $id = 'id';

    public static function id($id){
        return parent::find($id);
    } 
}

من توی متد id تونستم به یکی از متدهای کلاس به ارث برده شده با parent دسترسی داشته باشم، اما اینجا نیاز دارم که اون دوتا پراپرتی که بالا وجود داره رو مقدار دهی کنم که این پرارتی ها هم برای کلاس پدر ینی model هستش. مشکل اینجاست که این دوتا رو نمیتونم مقداری دهی کنم تا دستور sqlم اجرا شه چون متد id به صورت static هستش. آیا راه حلی داره یا ن؟

فایل پیوست

امیر صالحی
امیر صالحی

2 مرداد 99

0
حذف شده

سلام و درود

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

الان من چیزی که از سوال شما فهمیدم میخوایین $id و $table رو مقدار دهی کنید

که چون از protected استفاده کردید باید برای مقدار دهیشون از setter استفاده کنید

class User extends Model{
    
    protected $table = 'users';
    protected $id = 'id';

    public static function id($id){
        return parent::find($id);
    } 


    public function setId($id){
        $this->$id=$id;
    }
}

 

اگه بخوایین متد setId هم static باشه باید protected هایی که تعریف کردین اونا هم static باشن تا بتونین بجای $this با استفاده از self:: مقدار بدین

فایل پیوست

امین رحیم زاده

توسط

امین رحیم زاده

2 مرداد 99

حذف شده
سلام مرسی از وقتی که گذاشتید. ن سوالم این بود که این دو تا پراپرتی برای کلاس پدر هستش و چون من دارم از static method استفاده میکنم این مقدار دهی ها جواب نمیده، چون مقدار درون این پراپرتی ها توی کلاس پدر استفاده میشه.
امیر صالحی

2 مرداد 99

حذف شده
برای اینکه بتونی از داخل کلاس User پراپرتی های table و id رو تغییر بدی مقدارشون رو که داخل کلاس پدر هم بشه ازش استفاده کرد، باید داخل کلاس پدر بجای استفاده از self:: از static:: استفاده کنی
امین رحیم زاده

2 مرداد 99

حذف شده
اینم بگم پراپرتی های داخل کلاس user هم static تعریف کن protected static $table = 'users';
امین رحیم زاده

2 مرداد 99