আপডেট : পিএইচপি 7.4 এখন সমবায়তা এবং বিপরীতে সমর্থন করে যা এই প্রশ্নটিতে উত্থাপিত প্রধান সমস্যাটিকে সম্বোধন করে।
আমি পিএইচপি ইঙ্গিত রিটার্ন টাইপ ব্যবহার করে একটি বিষয় কিছু পাতিত আছে 7. আমার বোঝার যে ইঙ্গিত হয় : self
মানে যে আপনি একটি বাস্তবায়নের বর্গ জন্য মনস্থ করা নিজেই দেখাবে। তাই আমি : self
এটি চিহ্নিত করতে আমার ইন্টারফেসগুলিতে ব্যবহার করেছি, তবে আমি যখন ইন্টারফেসটি বাস্তবায়নের চেষ্টা করেছি তখন আমি সামঞ্জস্যতার ত্রুটি পেয়েছি।
নীচে আমি যে ইস্যুটি চালিয়েছি তার একটি সহজ বোধ করা হল:
interface iFoo
{
public function bar (string $baz) : self;
}
class Foo implements iFoo
{
public function bar (string $baz) : self
{
echo $baz . PHP_EOL;
return $this;
}
}
(new Foo ()) -> bar ("Fred")
-> bar ("Wilma")
-> bar ("Barney")
-> bar ("Betty");
প্রত্যাশিত আউটপুটটি ছিল:
ফ্রেড উইলমা বার্নি বেটি
আমি আসলে যা পাই তা হ'ল:
পিএইচপি মারাত্মক ত্রুটি: ফুঃ এর ঘোষণা :: বার (ইন্টা-বাজ): ফু অবশ্যই আইএফও :: বার (ইনট-বাজ) এর সাথে সামঞ্জস্যপূর্ণ: আইফু line লাইনে টেস্ট.এফপি
জিনিসটি হ'ল ফু হ'ল আইফো-র একটি বাস্তবায়ন, তাই যতদূর আমি বলতে পারি প্রয়োগটি প্রদত্ত ইন্টারফেসের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ হওয়া উচিত। আমি ইন্টারফেস বা প্রয়োগকারী শ্রেণি (অথবা উভয়) এর পরিবর্তে নাম বদলে ইন্টিফেসটি ব্যবহার না করে পরিবর্তনের মাধ্যমে এই সমস্যাটি সংশোধন করতে পারলাম self
, তবে আমার বোঝার self
অর্থ হল যে শব্দটির অর্থ "আপনি যে ক্লাসটি চালু করেছেন সেটির উদাহরণটি ফিরে আসুন " "। সুতরাং ইন্টারফেসে এটির পরিবর্তনের অর্থ তাত্ত্বিক অর্থ হ'ল আমি যখন এমন কোনও ঘটনার প্রত্যাবর্তন করতে পারলাম যা ইন্টারফেস প্রয়োগ করে তখন আমার উদ্দেশ্যটি হ'ল প্রত্যাবর্তিত দৃষ্টান্তটিই ফিরে আসবে।
এটি কি পিএইচপি-তে কোনও তদারকি বা এটি ইচ্ছাকৃতভাবে ডিজাইনের সিদ্ধান্ত? যদি এটি প্রাক্তন থাকে তবে এটি পিএইচপি 7.1-এ স্থির দেখার কোনও সম্ভাবনা আছে? যদি তা না হয় তবে ইঙ্গিত দেওয়ার সঠিক উপায়টি কী যা আপনার ইন্টারফেসটি প্রত্যাশা করে যে আপনি যে শৃঙ্খলার জন্য পদ্ধতিটি সবেমাত্র ডেকেছেন তা ফিরে আসবে?