* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ namespace PrestaShop\Module\PsAccounts\Hook; trait HookableTrait { /** * @param string $methodName * * @return mixed * * @throws \Exception */ private function executeHook($methodName, array $params = []) { $hookNamespace = __NAMESPACE__; if (strpos($methodName, 'hook') === 0) { $class = $hookNamespace . '\\' . ucfirst(preg_replace('/^hook/', '', $methodName)); $method = 'execute'; if (is_a($class, Hook::class, true)) { $this->getLogger()->debug("execute hook : [{$class}]"); $hook = (new $class($this)); return $hook->$method($params); } } return null; } /** * @param string $name * @param array $arguments * * @return mixed * * @throws \Exception */ public function __call($name, array $arguments) { return $this->executeHook($name, $arguments[0]); } }