<?php namespace WPDesk\PluginBuilder\Plugin; trait HookableParent { /** * Hookable objects. * * @var array[Hookable] */ private $hookable_objects = array(); /** * Add hookable object. * * @param Hookable|HookablePluginDependant $hookable_object Hookable object. */ public function add_hookable( Hookable $hookable_object ) { if ( $hookable_object instanceof HookablePluginDependant ) { $hookable_object->set_plugin( $this ); } $this->hookable_objects[] = $hookable_object; } /** * Get hookable instance. * * @param string $class_name Class name. * * @return false|Hookable */ public function get_hookable_instance_by_class_name( $class_name ) { foreach ( $this->hookable_objects as $hookable_object ) { if ( $hookable_object instanceof $class_name ) { return $hookable_object; } } return false; } /** * Run hooks method on all hookable objects. */ protected function hooks_on_hookable_objects() { /** @var Hookable $hookable_object $hookable_object */ foreach ( $this->hookable_objects as $hookable_object ) { if ($hookable_object instanceof Conditional) { if ($hookable_object::is_needed()) { $hookable_object->hooks(); } } else { $hookable_object->hooks(); } } } }