ধরা যাক আমার একটি ইন্টারফেস FooInterface
রয়েছে যার সাথে নিম্নলিখিত স্বাক্ষর রয়েছে:
interface FooInterface {
public function doSomething(SomethingInterface something);
}
এবং একটি কংক্রিট শ্রেণি ConcreteFoo
যা সেই ইন্টারফেস প্রয়োগ করে:
class ConcreteFoo implements FooInterface {
public function doSomething(SomethingInterface something) {
}
}
আমি ConcreteFoo::doSomething()
একটি বিশেষ ধরণের SomethingInterface
অবজেক্ট (যদি বলা যাক এটি বলা হয় SpecialSomething
) পাস করে তবে অনন্য কিছু করতে চাই ।
আমি যদি পদ্ধতিটির পূর্বশর্তগুলিকে আরও শক্তিশালী করি বা একটি নতুন ব্যতিক্রম ছুঁড়ে ফেলি তবে এটি অবশ্যই একটি এলএসপি লঙ্ঘন, তবে SpecialSomething
জেনেরিক SomethingInterface
অবজেক্টগুলির জন্য ফ্যালব্যাক সরবরাহের সময় যদি আমি বিশেষ-কেসযুক্ত বস্তুগুলি করি তবে এটি কি এলএসপি লঙ্ঘন হবে ? কিছুটা এইরকম:
class ConcreteFoo implements FooInterface {
public function doSomething(SomethingInterface something) {
if (something instanceof SpecialSomething) {
// Do SpecialSomething magic
}
else {
// Do generic SomethingInterface magic
}
}
}
doSomething()
পদ্ধতির উদ্দেশ্যটি হ'ল রূপান্তরিত হবেSpecialSomething
: এটি যদি এটি গ্রহণSpecialSomething
করে তবে কেবল এটি অবাস্তবহীন বস্তুটি ফিরিয়ে দেবে, অন্যদিকে যদি এটি একটি জেনেরিকSomethingInterface
বস্তু গ্রহণ করে তবে এটি একটি বস্তুর মধ্যে রূপান্তর করতে একটি অ্যালগরিদম চালায়SpecialSomething
। পূর্ব শর্ত এবং পোস্টকন্ডিশনগুলি একই থাকায়, আমি বিশ্বাস করি না যে চুক্তি লঙ্ঘিত হয়েছে।