2012-12-11 33 views
10

मैं एक विशेषतापीएचपी विशेषता कॉल विरासत में मिला समारोह

trait Foo{ 

    protected static function foo(){ 
     echo 'Hello'; 
    } 
} 

और एक वर्ग

class Bar{ 
    use Foo; 

    private static function foo(){ 
     Foo::foo(); 

     echo ' World!'; 
    } 
} 

मैं Foo:foo() उपयोग नहीं कर सकते मिला है। वांछित प्रभाव प्राप्त करने के लिए मैं क्या कर सकता हूं?

संपादित

use Foo {foo as parentFoo} 

private static function foo(){ 

    self::parentFoo(); 

    echo ' World!'; 

} 

का उपयोग चाल किया था।

+4

संघर्ष समाधान http://php.net/manual/en/language.oop5.traits.php – goat

+0

अरे, आप एक गैर स्थैतिक विधि कॉल करने की कोशिश कर रहे देखना एक स्थिर तरीके से। आपको इसके बारे में एक चेतावनी देखना चाहिए। शायद आपको अपना 'error_reporting' स्तर चालू करना चाहिए। – Charles

+0

ओह, ओह, मैं विवरण में स्थिर कीवर्ड जोड़ना भूल गया। वे वास्तविकता में स्थिर दोनों हैं। - @rambocoder: धन्यवाद, संपादन देखें। यह चाल है। – arik

उत्तर

11

आप कुछ इस तरह कर सकते हैं:

class Bar{ 

    use Foo { 
     Foo::foo as foofoo; 
    } 

    private static function foo(){ 

     self::foofoo(); 

     echo ' World!'; 

    } 

} 
+0

हाँ, ठीक है, अर्धविराम स्थिति और स्थिर कीवर्ड को छोड़कर;) धन्यवाद। – arik

+0

हां, प्रश्न में परिवर्तन 'स्थिर' में नहीं देखा। –

0

क्या आपको अपनी विशेषता विधि fooo का नाम बदलने की अनुमति है?

यदि हाँ, क्या करना है और की जगह कृपया फू :: foo() फू के साथ: fooo() अपनी कक्षा विधि शरीर में

<?php 

trait Foo 
{ 
    protected static function Fooo() 
    { 
     echo 'Hello'; 
    } 
} 

class Bar 
{ 
    use Foo; 

    private static function foo() 
    { 
     self::fooo(); 

     echo ' World!'; 
    } 

    public static function expose() 
    { 
     echo self::foo(); 
    } 
} 

echo Bar::expose(); 
(अपने विशेषता समारोह परिभाषा को स्थिर कीवर्ड जोड़कर) स्थिर कॉल वाक्य रचना पालन करने से पहले

संपादित करें:

जाहिर है, मेरे प्रश्न का उत्तर "नहीं, आपको विशेषता विधि का नाम बदलने की अनुमति नहीं है", इस मामले के लिए, आपने PHP में एम्बेडेड देशी संघर्ष समाधान से संबंधित समाधान को इंगित किया है: http://php.net/manual/en/language.oop5.traits.php#language.oop5.traits.conflict