আমি ভাবছিলাম যে কেন protectedপদ্ধতিগুলির জন্য প্লাগিন তৈরি করা সম্ভব নয় । কোডের এই টুকরোটিতে রয়েছে Magento\Framework\Interception\Code\Generator\Interceptor:
protected function _getClassMethods()
{
$methods = [$this->_getDefaultConstructorDefinition()];
$reflectionClass = new \ReflectionClass($this->getSourceClassName());
$publicMethods = $reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC);
foreach ($publicMethods as $method) {
if ($this->isInterceptedMethod($method)) {
$methods[] = $this->_getMethodInfo($method);
}
}
return $methods;
}
এটি পরীক্ষা করে যে পদ্ধতিটি publicবাধা দেওয়ার অনুমতি দেওয়ার আগে রয়েছে কিনা । এটা সহজেই একটি তৈরি করে পরিবর্তন করা যাবে preferenceমধ্যে di.xmlঅবশ্যই, নিজের মডিউল, এই মত:
<?xml version="1.0"?>
<config>
<preference for="Magento\Framework\Interception\Code\Generator\Interceptor" type="MyVendor\MyModule\Model\MyInterceptorModel" />
</config>
এবং rewriting _getClassMethodsসঙ্গে \ReflectionMethod::IS_PUBLICপরিবর্তিত \ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTEDপদ্ধতির ভিতরে।
তবে আমি ভাবছি কেন মূল পদ্ধতির সংজ্ঞায় সুরক্ষিত পদ্ধতিগুলিতে বাধা দেওয়া সম্ভব নয়? পারফরম্যান্সে এটির কি বড় প্রভাব রয়েছে, বা তৃতীয় পক্ষের মডিউলগুলিকে ম্যাগেন্টো যুক্তিটিকে খুব "অগোছালো" করার অনুমতি দেওয়ার মতো কোনও কারণ আছে?