मैं एक वर्ग में कई बार एक कार्यक्षमता का पुन: उपयोग करना चाहता हूं। इस कार्यशीलता के लिए एक निजी चर पर निर्भर करता है:एक विशेषता के लिए एक परिवर्तनीय निजी बनाने के लिए कैसे?
class User {
use Address {
getAddress as getHomeAddress;
setAddress as setHomeAddress;
getAddress as getWorkAddress;
setAddress as setWorkAddress;
}
}
समस्या है, ऐसा करके, निजी चर $address
साझा किया जाता है:
trait Address {
private $address;
public function getAddress() {
return $this->address;
}
public function setAddress($address) {
$this->address = $address;
}
}
एक ही रास्ता मैं use the trait twice पाया है, तो निम्न है विभिन्न तरीकों, और कोड भर में अपेक्षा के अनुरूप काम नहीं करेगा:
$user = new User();
$user->setHomeAddress('21 Jump Street');
echo $user->getWorkAddress(); // 21 Jump Street
वहाँ एक समाधान वास्तव में विशेषता का उपयोग करने के दो बार है, जबकि इसकी जनसंपर्क साझा नहीं ivate चर?
हालांकि मैं समझता हूँ कि लक्षण * instantiated नहीं कर रहे हैं *, मैं अभी भी अपने निजी चर उम्मीद कर रहा था उन्हें प्रयोग है, इस प्रकार संभावित उन्हें एक ही कक्षा में कई बार उपयोग करने की अनुमति वर्ग को दिखाई नहीं हो सकता है, aliased विधि के साथ नाम। ऐसा लगता है कि मैं गलत था, इसलिए आपके उत्तर के लिए धन्यवाद! – Benjamin
@ उस विशेषता का उपयोग करते हुए प्रत्येक वर्ग में बेंजामिन का '$ पता' चर का अपना उदाहरण होगा, लेकिन यह स्पष्ट रूप से कक्षा का उपयोग करके कक्षा के लिए दृश्यमान होगा, क्योंकि लक्षण केवल कक्षाओं में कुछ व्यवहार जोड़ते हैं। –
@ मैटेटे हाँ, यह मेरे सिर में थोड़ा स्पष्ट हो रहा है ... यह एकाधिक विरासत से अलग है, क्योंकि विरासत के साथ चर केवल सुपरक्लास में दिखाई देगा, जहां यहां विशेषता से निजी चर केवल "प्रतिलिपि" है वास्तविक वर्ग – Benjamin