যাদু পদ্ধতিরtrigger_error
প্রসঙ্গে সঠিক ব্যবহার (যদি থাকে তবে) নিয়ে আমি একজন সহকর্মীর সাথে বিতর্ক করছি । প্রথমত, আমি মনে করি যে এটিকে একটি মামলা বাদ দিয়ে এড়ানো উচিত ।trigger_error
বলুন আমাদের একটি পদ্ধতি সহ একটি ক্লাস রয়েছে foo()
class A {
public function foo() {
echo 'bar';
}
}
এখন বলুন আমরা ঠিক একই ইন্টারফেসটি সরবরাহ করতে চাই তবে সমস্ত পদ্ধতি কলগুলি ধরতে একটি যাদু পদ্ধতি ব্যবহার করি
class B {
public function __call($method, $args) {
switch (strtolower($method)) {
case 'foo':
echo 'bar';
break;
}
}
}
$a = new A;
$b = new B;
$a->foo(); //bar
$b->foo(); //bar
উভয় শ্রেণিই তারা যেভাবে সাড়া দেয় সেভাবে একই foo()
তবে একটি অবৈধ পদ্ধতিতে কল করার সময় পৃথক।
$a->doesntexist(); //Error
$b->doesntexist(); //Does nothing
আমার যুক্তিটি হল যে trigger_error
কোনও অজানা পদ্ধতি ধরা পড়লে যাদু পদ্ধতিগুলি কল করা উচিত
class B {
public function __call($method, $args) {
switch (strtolower($method)) {
case 'foo':
echo 'bar';
break;
default:
$class = get_class($this);
$trace = debug_backtrace();
$file = $trace[0]['file'];
$line = $trace[0]['line'];
trigger_error("Call to undefined method $class::$method() in $file on line $line", E_USER_ERROR);
break;
}
}
}
যাতে উভয় শ্রেণিই (প্রায়) একইরকম আচরণ করে
$a->badMethod(); //Call to undefined method A::badMethod() in [..] on line 28
$b->badMethod(); //Call to undefined method B::badMethod() in [..] on line 32
আমার ব্যবহারের ক্ষেত্রে একটি অ্যাক্টিভেকর্ড বাস্তবায়ন। আমি __call
সেই পদ্ধতিগুলি ধরতে ও পরিচালনা করতে ব্যবহার করি যা মূলত একই জিনিসটি করে তবে সংশোধক যেমন Distinct
বা Ignore
, যেমন
selectDistinct()
selectDistinctColumn($column, ..)
selectAll()
selectOne()
select()
অথবা
insert()
replace()
insertIgnore()
replaceIgnore()
মত পদ্ধতি where()
, from()
, groupBy()
, ইত্যাদি হার্ড কোডেড হয়।
আপনি দুর্ঘটনাক্রমে কল করলে আমার যুক্তি হাইলাইট হয় insret()
। আমার সক্রিয় রেকর্ড বাস্তবায়ন যদি সমস্ত পদ্ধতির হার্ডকোড করে থাকে তবে এটি ত্রুটি হবে।
যে কোনও ভাল বিমূর্ততা হিসাবে, ব্যবহারকারীর প্রয়োগের বিবরণ সম্পর্কে অবহিত হওয়া উচিত এবং সম্পূর্ণ ইন্টারফেসের উপর নির্ভর করা উচিত। যাদু পদ্ধতি ব্যবহার করে এমন বাস্তবায়ন কেন অন্যরকম আচরণ করবে? উভয় একটি ত্রুটি হওয়া উচিত।
4.something
?