का PHP ओवरराइड विशेषता विधि मैं लैरवेल 5.1 का उपयोग कर रहा हूं लेकिन यह उस ढांचे के लिए विशिष्ट नहीं है, यह एक सामान्य PHP प्रश्न है।PHP क्लास क्लास की विशेषता
namespace Illuminate\Foundation\Auth;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements
AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract {
use Authenticatable, Authorizable, CanResetPassword;
}
तो मेरे पास है उपयोगकर्ता वर्ग मैं उस से विस्तार के साथ चिंतित हूँ:
namespace App\Api\V1\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
class User extends Authenticatable {
use EntrustUserTrait {
EntrustUserTrait::can insteadof \Illuminate\Foundation\Auth\Access\Authorizable;
}
}
EntrustUserTrait
एक can()
विधि का विरोध करता है
निर्दिष्ट लक्षण के साथ एक माता पिता के वर्ग नहीं है Authorizable
विशेषता। हालांकि, Authorizable
विशेषता मूल वर्ग पर है, इसलिए यह Required Trait wasn't added to App\Api\V1\Models\User
त्रुटि उत्पन्न करता है।
मैंने चारों ओर खोज की है और बच्चे वर्ग में घोषित ओवरराइडिंग लक्षणों पर बहुत सारी जानकारी है, लेकिन मुझे मूल वर्ग से ओवरराइडिंग लक्षणों के बारे में कुछ भी नहीं मिल रहा है।
<?php
trait AA {
function f() {
echo "I'm AA::f".PHP_EOL;
}
}
class A {
use AA;
}
trait BB {
function f() {
echo "I'm BB::f".PHP_EOL;
}
}
class B extends A {
use BB;
}
$b = new B();
$b->f();
मैं बी बी :: च
मुझे विश्वास है कि लक्षण कॉपी-पेस्ट कोड की तरह काम करते हैं:
आपको इसके बजाय बिल्कुल करने की आवश्यकता नहीं है। 'can' माता-पिता के 'can' को ओवरराइड कर देगा। – apokryfos
इसके अलावा, यह विशेषता को लागू न करने के बारे में एक त्रुटि फेंकता है क्योंकि यह किसी अन्य विशेषता के साथ संघर्ष करता है। मुझे लगता है कि यह कुछ बढ़त मामला है, हालांकि, नीचे दिया गया उदाहरण काम करता है और अन्य विशेषता को ओवरराइड करता है। मुझे बिल्कुल यकीन नहीं है कि अंतर क्या है, हालांकि। – jdforsythe