পিএইচপি-তে স্থির বৈশিষ্ট্যগুলি ওভারলোড করার কোনও সুবিধা নেই কেন?


13

ইন্ট্রো

পিএইচপি আপনাকে ক্লাসে ম্যাজিক পদ্ধতি ঘোষণা করে পদ্ধতি কল এবং সম্পত্তি অ্যাক্সেসগুলি ওভারলোড করতে দেয় । এটি কোডগুলি সক্ষম করে:

class Foo {
    public function __get($name) { return 42; }
}

$foo = new Foo;
echo $foo->missingProperty; // prints "42"

ওভারলোডিং ইনস্ট্যান্সের বৈশিষ্ট্য এবং পদ্ধতিগুলি ছাড়াও পিএইচপি 5.3.0 থেকে আমরা staticযাদু পদ্ধতিতে ওভাররাইড করে পদ্ধতিগুলি ওভারলোড করতে পারি __callStatic

অনুপস্থিত কিছু

উপলভ্য কার্যকারিতা থেকে যা স্পষ্টতই অনুপস্থিত তা হ'ল স্থির বৈশিষ্ট্যগুলি ওভারলোড করার ক্ষমতা , উদাহরণস্বরূপ:

echo Foo::$missingProperty; // fatal error: access to undeclared static property

এই সীমাবদ্ধতা স্পষ্টভাবে নথিভুক্ত করা হয় :

সম্পত্তি ওভারলোডিং কেবল বস্তুর প্রসঙ্গে কাজ করে। এই যাদু পদ্ধতিগুলি স্থির প্রসঙ্গে ট্রিগার করা হবে না। সুতরাং এই পদ্ধতিগুলি ঘোষণা করা উচিত নয় static। পিএইচপি 5.3.0 হিসাবে, যাদু ওভারলোডিংয়ের কোনও পদ্ধতি ঘোষণা করা থাকলে সতর্কতা জারি করা হয় static

কিন্তু কেন?

আমার প্রশ্নগুলি হ'ল:

  1. এই কার্যকারিতাটি বর্তমানে সমর্থিত নয় এমন কোনও প্রযুক্তিগত কারণ রয়েছে কি? বা সম্ভবত একটি (কাঁপুনি) রাজনৈতিক কারণ?
  2. অতীতে এই কার্যকারিতা যুক্ত করার জন্য কি কোনও বাতিল হওয়া প্রচেষ্টা রয়েছে?

সর্বাধিক গুরুত্বপূর্ণ, প্রশ্নটি নয় "আমি কীভাবে ব্যবহারকারীর দেশ পিএইচপি-তে ডায়নামিক স্ট্যাটিক বৈশিষ্ট্য রাখতে পারি?"। এটি বলেছে, আপনি যদি __callStaticভাগ করে নিতে চান তার উপর ভিত্তি করে কোনও বিশেষরূপে সুন্দর বাস্তবায়ন সম্পর্কে জানেন তবে তা সব উপায়ে করুন।

উত্তর:


11

Http://marc.info/?l=php-internals&m=121578194822276&w=2 উদ্ধৃত করা হচ্ছে

স্থির সদস্য ওভারলোডিং পিএইচপি 5.3 এ যোগ করা হয়েছিল? আমি লক্ষ্য করেছি যে স্থির পদ্ধতি ওভারলোডিং (__callStatic) ছিল। দু'জন একে অপরের পরিপূরক হবে এবং এগুলি যুক্ত করা ঠিক স্বাভাবিক বলে মনে হয়। আমি লক্ষ্য করেছি যে তারা "স্ট্যাটিক-ক্লাস" আরএফসি এবং একটি বাগ রিপোর্টের বাইরে রয়েছে তবে 5.3 এ এগুলি দেখতে ভাল লাগবে। এই সংযোজন এবং এলএসবি দিয়ে, পিএইচপি ক্লাসগুলি এত কিছু করতে পারে! উদা:

__setStatic()
__getStatic()
__issetStatic()
__unsetStatic()

ফলো-আপের উদ্ধৃতি http://marc.info/?l=php-internals&m=121578318524848&w=2

স্ট্যাটিক ক্লাসগুলির জন্য যদি আরএফসি গৃহীত হয়, স্থির সম্পত্তি ইন্টারসেপ্টরগুলি পরবর্তী পিএইচপি প্রধান সংস্করণ (এটি 5.4 বা 6 হতে পারে) এর অংশ হবে। সুতরাং এটি এটিকে 5.3 এ পরিণত করবে না, তবে ভবিষ্যতে আমাদের এটি আশাবাদী হবে।

স্ট্যাটিক ক্লাস আরএফসির লিঙ্ক:

আরএফসির স্থিতিটি "কাজগুলিতে" রয়েছে তবে এটি ২০০৮ সাল থেকে আপনি পিএইচপি.ইনটার্নালস মেইলিং লিস্টে অথবা ইএফনেট আইআরসি-তে # পিএইচপি.পেকলে জিজ্ঞাসা করতে চাইতে পারেন এটির কী হয়েছে।


ধন্যবাদ, গর্ডন, যথারীতি খুব সহায়ক ;-) স্ট্যাটিক ক্লাস জন্য RFC জন্য সমর্থন উত্থাপন করা বলে মনে হয় যদিও __getStatic()এবং __setStatic()উপর স্ট্যাটিক ক্লাস, এটি এখনও ইন্সটানসিএবেল শ্রেণীর জন্য এই কার্যকারিতা আছে দরকারী হবে। আপনি কি এই দিকে কোনও পদক্ষেপ সম্পর্কে সচেতন?
ডেভিড ওয়েনরব

@ ডেভিডউইনরউব না, দুঃখিত টিবিএইচ, আমি স্থিতিশীল পদ্ধতিগুলির সাথে সম্পর্কিত বিষয়গুলির বিষয়ে চিন্তা করি না। আমি প্রায়শই তাদের জন্য কোনও ভাল ব্যবহার খুঁজে পাই না এবং এগুলি খারাপ মিলন এবং বেদনাদায়ক পরীক্ষার দিকে পরিচালিত করে।
গর্ডন

সম্পূর্ণভাবে একমত! ;-) তবে আমার উপর জোর দেওয়া কিছু ফ্রেমওয়ার্কগুলি তাদের মডেল স্তরের জন্য স্ট্যাটিক্স ব্যবহার করে। __getStatic()আমার বিদ্যমান কোডটি প্রচুর পরিমাণে আপ করতে সক্ষম করবে। ধন্যবাদ!
ডেভিড ওয়েনরব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.