আমি এর আগে আমার সাথে এই জাতীয় দার্শনিক বিতর্ক করেছি। আমি বেশিরভাগ সময় এখানে দাঁড়িয়েছি যদিও আমি বুঝতে পারি এটি একটি মতামত ভিত্তিক উত্তর:
একটি জিনিস যা আমি দেখতে পাচ্ছি যে প্রশ্নের উত্তর দিতে সহায়তা করতে পারে তা হ'ল $ প্যারামগুলি পাশ করা যা বৈশিষ্ট্য / অ্যারে সদস্যদের সেট করা থাকতে পারে বা নাও থাকতে পারে।
বছরের পর বছর ধরে আমি এই সিদ্ধান্তে পৌঁছেছি:
অ্যারে পাস করা এড়িয়ে চলুন।
কেন? ওয়েল, setচ্ছিক পাস হওয়া আর্গুমেন্টগুলির জন্য সংজ্ঞা নির্ধারণের বা সেন্ডিনেল মানানোর কোনও উপায় নেই।
অন্য কথায়, আপনি নির্দিষ্ট কোড সহ, আপনি এর মতো কিছু করতে পারবেন না:
function __construct($arg1 = NULL, $arg2 = DEFAULT_VAL) {
$this->arg1 = $arg1;
$this->arg2 = $arg2;
}
$ আরজি 1 এবং $ আরজি 2 হ'ল alচ্ছিক যুক্তি passed যদি পাস না হয় তবে তাদের যথাক্রমে NULL এবং DEFAULT_VAL থাকে - সুস্পষ্টভাবে পরীক্ষা করার প্রয়োজন নেই।
হতে পারে এটি একরকম স্বেচ্ছাচারী বলে মনে হচ্ছে।
আমি মনে করি আপনি যা অর্জন করার চেষ্টা করছেন তা পেয়েছি - বহু সংখ্যক যুক্তি বিরোধী হিসাবে একটি একক রেফারেন্স পাস করা। এটি আমার পরবর্তী উপসংহারে নিয়ে আসে:
যদি "পারমাণবিক" ভেরিয়েবলগুলি (স্ট্রিংস, পূর্ণসংখ্যা, আক্ষরিক) পাস না করে তবে অবজেক্টগুলি পাস করুন।
এখানে পারফরম্যান্স সুবিধাগুলি যেহেতু পাস করা অবজেক্টগুলি রেফারেন্সের মাধ্যমে সম্পন্ন হয় (যদিও অ্যারেগুলি আমি মনে করি পিএইচপি-র মধ্যে প্রায় একই রকম)।
সুতরাং আপনি যেমন কিছু করতে পারেন:
function __construct(MyAwesomeObject $oArg) {
$this->oArg = $oArg;
}
উত্তীর্ণ অবজেক্ট আর্গুমেন্টটি সম্ভবত "সম্পত্তি1", "সম্পত্তি2" সম্ভবত নিজেরাই ডিফল্ট মানগুলির সাথে গ্যারান্টিযুক্ত হবে।
অতিরিক্ত হিসাবে, এখানে আপনি ইঙ্গিতটি টাইপ করতে পারেন এবং একটি ভাল আইডিই সঠিকভাবে কোড সমাপ্তিরও অটোসগাস্ট করবে।
তবে আমরা দ্রুত বুঝতে পারি যে আমাদের একটি মুরগি এবং একটি ডিমের জিনিস চলছে: আপনি পাস করা অবজেক্ট যুক্তি দিয়ে একটি বস্তু তৈরি করছেন যা তাদের নিজেরাই কোনও পর্যায়ে নির্মাণের প্রয়োজন।
তাহলে এটি আমাদের ছেড়ে কোথায় যায়? ভাল, আমি এই সিদ্ধান্তে পৌঁছেছি যে অবশেষে সমস্ত শ্রেণি উন্নত শর্তের অভাবে "পারমাণবিক" ভেরিয়েবলগুলি (স্ট্রিংস, ফ্লোটস, ডাবলস, ইনটস, রিসোর্সগুলি যে আপনি আমার পয়েন্টটি পেয়েছেন) অবিচ্ছিন্ন হয়ে যায় এবং আমি চেষ্টা করার ঝোঁক এই পরিবর্তনশীল ধরণের বা অবজেক্টের সাথে সমস্ত শ্রেণি নির্মান করতে - তবে অ্যারে নয়।
তাহলে আমি কি আপনার প্রশ্নের উত্তর দিয়েছি? সম্ভবত ঠিক না। তবে আমি আশা করি কিছুটা স্টাইলিস্টিক হলেও আমি দরকারী কিছু চিত্রিত করেছি। আমি মনে করি কোডটি কিছুটা পরিষ্কার, আরও পঠনযোগ্য এবং কম ব্যয়বহুল।
এখন, এটি আপনার ইনপুটটি স্যানিটাইজ করা উচিত নয় বলে নয়। এটি পুরোপুরি আরেকটি আলোচনা।
আশাকরি এটা সাহায্য করবে.
new object($param1,-some default value so I can specify the next parameter-, $param3);