🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ امیر صالحی
آیا میشه متد static فرزند از پراپرتی‌های پدر که static نیستند استفاده کند؟
جامعه پی اچ پی ایجاد شده در ۰۲ مرداد ۱۳۹۹

سلام و احترام

من یه 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 هستش. آیا راه حلی داره یا ن؟

سلام و درود

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

الان من چیزی که از سوال شما فهمیدم میخوایین $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:: مقدار بدین

امین رحیم زاده ۰۲ مرداد ۱۳۹۹، ۱۹:۵۳