परिदृश्य:विशेषता फ़ंक्शन को ओवरराइड कैसे करें और इसे ओवरराइड फ़ंक्शन से कॉल करें?
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A;
function calc($v) {
$v++;
return A::calc($v);
}
}
print (new MyClass())->calc(2); // should print 4
इस कोड काम नहीं करता है, और मैं एक तरह से है जैसे कि यह विरासत में मिला था एक विशेषता समारोह कॉल करने के लिए नहीं मिल रहा। मैं self::calc($v)
, static::calc($v)
, parent::calc($v)
, A::calc($v)
बुला की कोशिश की है और निम्नलिखित:
trait A {
function calc($v) {
return $v+1;
}
}
class MyClass {
use A {
calc as traitcalc;
}
function calc($v) {
$v++;
return traitcalc($v);
}
}
कुछ भी नहीं काम करता है।
वहाँ या यह काम करने के लिए एक रास्ता है मैं पूरी तरह से विशेषता समारोह जो और अधिक जटिल है की तुलना में इस :)
बिल्कुल सही! धन्यवाद! जाहिर है कि मेरा दिमाग बेकार पिघल गया था। :) – Shu
सिर्फ स्पष्टीकरण के लिए - एक बार आपकी कक्षा एक ही विधि को परिभाषित करती है, तो यह स्वचालित रूप से विशेषता को ओवरराइड करता है। इस विधि में विशेषता भर जाती है क्योंकि @ रिककैक्सेल खाली होता है जब यह खाली होता है। – Yehosef
अभी तक अज्ञात कारणों से इसने पूरी तरह से एक विशेषता को खराब कर दिया है, मैंने इसे लागू किया है। जब आप यह कर रहे हैं तो अन्य तरीकों की विशेषता के रूप में अपेक्षित काम नहीं कर सकते हैं। –