আমি কি কনস্ট্রাক্টর থেকে ব্যতিক্রম নিক্ষেপ করা উচিত?


46

আমি জানি আমি পিএইচপি-তে কনস্ট্রাক্টর থেকে ব্যতিক্রম ছুঁড়ে ফেলতে পারি তবে আমার এটি করা উচিত? উদাহরণস্বরূপ, যদি কোনও প্যারামিটারের মানটি আমার প্রত্যাশা মতো না হয়।

অথবা কোনও পদ্ধতি চালিত না হওয়া পর্যন্ত আমার কোনও ব্যতিক্রম ছোঁড়া উচিত। উভয় ক্ষেত্রে সুবিধা এবং অসুবিধাগুলি কী?


প্রশ্নটি কি আপনি চান আপনার ব্যবহারকারীরা কুৎসিত ব্যতিক্রম ত্রুটি বার্তাগুলি দেখতে চান?

15
@ লরেন্সচেরোন না, এটি প্রশ্ন নয়। একদমই না. প্রশ্নটি হল যে যখন সিটির দ্বারা প্রদত্ত যুক্তিগুলি থেকে অবৈধটিকে বৈধ অবস্থায় সেট করতে না পারে বা অবিলম্বে কোনও অবৈধ অবস্থা উত্থাপন করা হয় বা অবৈধ অবস্থার সাথে এই পদ্ধতিতে পরিচালিত কোনও পদ্ধতি না বলা পর্যন্ত স্থগিত করা হয়। যদিও প্রোগ্রামারদের জন্য আরও উপযুক্ত।

4
@ লরেন্সচেরোন আপনি ঠিক বলেছেন কোনও সফ্টওয়্যার কখনও ইচ্ছাকৃতভাবে কখনও ব্যর্থ হয় না; এটি কেবল চালিয়ে যেতে হবে এবং দেখুন কী ঘটে। / s
ব্যবহারকারী 253751

@ ইমিবিস ভাল কটাক্ষ ভাল।
কোডেয়ার্ট

এটি একটি দুর্দান্ত প্রশ্ন !!! আমি আজ অবধি এই ধারণাটি বিবেচনা করি নি।
রাইস জনস

উত্তর:


75

আপনি ব্যতিক্রম নিক্ষেপ কেন স্থগিত করবেন?

যদি আপনি জানেন যে অবজেক্টটি প্রদত্ত প্যারামিটারগুলি সঠিকভাবে ইনস্ট্যান্ট করতে পারে না, তবে অবশ্যই আপনার একটি ব্যতিক্রম ছুঁড়ে ফেলা উচিত।

অন্যথায়, কেউ হয়ত আপনার বস্তুকে শূন্যের জন্য পরীক্ষা করতে পারে, যা এটি হবে না এবং এটি প্রত্যাশার মতো হয়ে গেছে বলে ধরে নিতে পারে।

আপনার বস্তুটিতে এটির কোনও পদ্ধতি না বলেও অনেক কিছু করা যায়: এটি একটি তালিকায় যুক্ত করা যেতে পারে, এটি তুলনা করা যায়, এটি প্যারামিটার হিসাবে প্রেরণ করা যেতে পারে ইত্যাদি ইত্যাদি these এই সমস্ত জিনিস এটি হওয়া উচিত ছিল না, এটি কোনও বৈধ অবজেক্ট নয় considering


21

যদি আপনার কনস্ট্রাক্টরকে খারাপ পরামিতি (গুলি) দিয়ে থাকে তবে আপনার (অবশ্যই?) একটি ব্যতিক্রম ছোঁড়া উচিত। আপনি যদি তা না করেন তবে আপনি কোনও খারাপ জিনিস পেতে পারেন যা প্রত্যাশার সাথে আচরণ করবে না।


17

একেবারে !!

চুক্তি অনুসারে যদি অবজেক্টটি নির্মানের প্যারামিটারগুলি বৈধ না হয় বা না হয় তবে আপনার ব্যতিক্রম ছুঁড়ে ফেলা উচিত। অজানাটি খারাপ ডেটা দিয়ে তৈরি করা হয়েছে যা আপনি কলকারীকে এগিয়ে যাওয়ার অনুমতি দিলে অনেক সমস্যার কারণ হতে পারে তা জেনে প্রবাহের সাথে এগিয়ে যাওয়া ভাল ধারণা নয় ।

" সর্বদা ব্যর্থ এবং ব্যর্থ" বরাবরই ভাল is


7

আমি জানি আমি পিএইচপি-তে কনস্ট্রাক্টর থেকে ব্যতিক্রম ছুঁড়ে ফেলতে পারি তবে আমার এটি করা উচিত?

অবজেক্ট নির্মাণ ব্যর্থ হয়েছে তা জানাতে একমাত্র বুদ্ধিমান উপায়।


2

আপনি কেন নিজের অবজেক্টটি ইনস্ট্যান্ট করার আগে প্যারামিটার সেটটি বৈধ করবেন না? এটি করা নিশ্চিত করে যে আপনার অবজেক্টটি তৈরি হবে, সুতরাং, কোনও দিক সরিয়ে ফেললে এটির ব্যর্থতা হতে পারে affects

যদিও আমি জানি আপনি আপনার নির্মাতার জিনিসগুলি পরীক্ষা করতে পারেন এবং ব্যতিক্রম টস করতে পারেন, তবে আমি আমার নির্মাতাদের এমনভাবে লিখতে পছন্দ করি যাতে তারা ব্যর্থ হয় না। আমি অবজেক্টগুলি ইনস্ট্যান্ট করার আগে প্যারামিটার বৈধতা সম্পাদন করি যা আমার কনস্ট্রাক্টর ব্যর্থ না হয়েই ব্যতিক্রম টস করতে পারি। আমি সাধারণত আমার নির্মাতাদের মধ্যে নতুন অবজেক্টগুলি ইনস্ট্যান্ট করার চেষ্টা করি না, পরিবর্তে তাদের প্রয়োজন হিসাবে ইনস্ট্যান্ট করার চেষ্টা করে choosing

শুধুমাত্র আমার অভিমত. পিএইচপি প্রচুর স্বাধীনতার অফার দেয় - উপভোগ করুন!


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