function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
function my_own_function ( $my_first_parameter , $my_second_parameter ) { global $phpbb_hook ; if ( $phpbb_hook -> call_hook ( __FUNCTION__ , $my_first_parameter , $my_second_parameter ) ) { if ( $phpbb_hook -> hook_return ( __FUNCTION__ ) ) { return $phpbb_hook -> hook_return_result ( __FUNCTION__ ) ; } } [ ] }
- class my_hookable_object
- {
- function hook_me ( $ my_first_parameter , $ my_second_parameter )
- {
- global $ phpbb_hook ;
- if ( $ phpbb_hook -> call_hook ( array ( __CLASS__ , __FUNCTION__ )) , $ my_first_parameter , $ my_second_parameter ) )
- {
- if ( $ phpbb_hook -> hook_return ( array ( __CLASS__ , __FUNCTION__ ) ) )
- {
- return $ phpbb_hook -> hook_return_result ( array ( __CLASS__ , __FUNCTION__ ) ) ;
- }
- }
- [ HERE YOUR CODE ]
- }
- }
- // add your own function that can
- // catch traps
- $ phpbb_hook -> add_hook ( 'my_own_function' ) ;
- // add your own method that can
- // catch traps
- $ phpbb_hook -> add_hook ( array ( 'my_hookable_object' , 'hook_me' ) ) ;
- class my_append_sid_class {
- // our functions
- function my_append_sid ( & $ hook , $ url , $ params = false , $ is_amp = true , $ session_id = false ) {
- // get the possible results of the previous trap
- $ result = $ hook -> previous_hook_result ( 'append_sid' ) ;
- return $ result [ 'result' ] . "<br /> I was the second." ;
- }
- }
- // one more class
- class my_second_append_sid_class {
- function my_append_sid ( & $ hook , $ url , $ params = false , $ is_amp = true , $ session_id = false ) {
- // get the possible results of the previous trap
- $ result = $ hook -> previous_hook_result ( 'append_sid' ) ;
- echo $ result [ 'result' ] . "<br /> I am the third." ;
- }
- }
- // normal function
- function my_append_sid ( & $ hook , $ url , $ params = false , $ is_amp = true , $ session_id = false ) {
- // get the possible results of the previous trap
- $ result = $ hook -> previous_hook_result ( 'append_sid' ) ;
- return "I was called first" ;
- }
- // initialize second class
- $ my_second_append_sid_class = new my_second_append_sid_class ( ) ;
- // Now we will register our “substitutes” for the append_sid function in order ...
- // Register the function (called first)
- $ phpbb_hook -> register ( 'append_sid' , 'my_append_sid' ) ;
- // Register first class
- $ phpbb_hook -> register ( 'append_sid' , array ( 'my_append_sid_class' , 'my_append_sid' ) ) ;
- // .. and second class
- $ phpbb_hook -> register ( 'append_sid' , array ( & $ my_second_append_sid_class , 'my_append_sid' ) ) ;
- // Register the trap that phpbb will intercept
- $ phpbb_hook -> register ( 'append_sid' , 'my_own_append_sid' ) ;
- // Add a function that will intercept traps
- $ phpbb_hook -> add_hook ( 'my_own_append_sid' ) ;
- // Register the trap that will be intercepted by our function
- $ phpbb_hook -> register ( 'my_own_append_sid' , 'also_my_own_append_sid' ) ;
- class my_hookable_object {
- function blabla ( )
- {
- }
- }
- class my_hookable_object2 extends my_hookable_object
- {
- var $ call_hook = true ;
- function hook_me ( $ my_first_parameter , $ my_second_parameter )
- {
- if ( $ this -> call_hook )
- {
- global $ phpbb_hook ;
- if ( $ phpbb_hook -> call_hook ( array ( __CLASS__ , __FUNCTION__ )) , $ my_first_parameter , $ my_second_parameter ) )
- {
- if ( $ phpbb_hook -> hook_return ( array ( __CLASS__ , __FUNCTION__ ) ) )
- {
- return $ phpbb_hook -> hook_return_result ( array ( __CLASS__ , __FUNCTION__ ) ) ;
- }
- }
- }
- return 'not hooked' ;
- }
- }
- function hooking ( & $ hook , $ first , $ second )
- {
- return 'hooked' ;
- }
- $ first_object = new my_hookable_object2 ( ) ;
- $ second_object = new my_hookable_object2 ( ) ;
- $ phpbb_hook -> add_hook ( array ( 'my_hookable_object2' , 'hook_me' ) ) ;
- $ phpbb_hook -> register ( array ( 'my_hookable_object2' , 'hook_me' ) , 'hooking' ) ;
- // Do not call a trap for $ first_object
- $ first_object -> call_hook = false ;
- echo $ first_object -> hook_me ( 'first' , 'second' ) . '<br />' ;
- echo $ second_object -> hook_me ( 'first' , 'second' ) . '<br />' ;
- //Conclusion:
- not hooked
- hooked
- class my_hookable_object {
- function blabla ( )
- {
- }
- }
- class my_hookable_object2 extends my_hookable_object
- {
- function hook_me ( $ my_first_parameter , $ my_second_parameter , $ hook_me = true )
- {
- if ( $ hook_me )
- {
- global $ phpbb_hook ;
- if ( $ phpbb_hook -> call_hook ( array ( __CLASS__ , __FUNCTION__ )) , $ my_first_parameter , $ my_second_parameter ) )
- {
- if ( $ phpbb_hook -> hook_return ( array ( __CLASS__ , __FUNCTION__ ) ) )
- {
- return $ phpbb_hook -> hook_return_result ( array ( __CLASS__ , __FUNCTION__ ) ) ;
- }
- }
- }
- return 'not hooked' ;
- }
- }
- function hooking ( & $ hook , $ first , $ second )
- {
- return 'hooked' ;
- }
- $ first_object = new my_hookable_object2 ( ) ;
- $ second_object = new my_hookable_object2 ( ) ;
- $ phpbb_hook -> add_hook ( array ( 'my_hookable_object2' , 'hook_me' ) ) ;
- $ phpbb_hook -> register ( array ( 'my_hookable_object2' , 'hook_me' ) , 'hooking' ) ;
- echo $ first_object -> hook_me ( 'first' , 'second' , false ) . '<br />' ;
- echo $ second_object -> hook_me ( 'first' , 'second' ) . '<br />' ;
- // Conclusion:
- not hooked
- hooked
- function append_sid ( $ url , $ params = false , $ is_amp = true , $ session_id = false ) {
- global $ _SID , $ _EXTRA_URL , $ phpbb_hook ;
- // Developers using traps need to do
- // global $ _SID and $ _EXTRA_URL in their own
- // functions and skillfully manage them.
- // Most of the code can be simply copied from here.
- if ( $ phpbb_hook -> call_hook ( __FUNCTION__ , $ url , $ params , $ is_amp , $ session_id ) ) {
- if ( $ phpbb_hook -> hook_return ( __FUNCTION__ ) )
- {
- return $ phpbb_hook -> hook_return_result ( __FUNCTION__ ) ;
- }
- }
- [ ... ]
- }
- // Intercepted function
- function my_append_sid ( & $ hook , $ url , $ params = false , $ is_amp = true , $ session_id = false )
- {
- // Get possible results
- $ result = $ hook -> previous_hook_result ( 'append_sid' ) ;
- return 'After I return something, the append_sid () function will return my result' ;
- }
- function append_sid ( $ url , $ params = false , $ is_amp = true , $ session_id = false )
- {
- global $ _SID , $ _EXTRA_URL , $ phpbb_hook ;
- if ( $ phpbb_hook -> call_hook ( __FUNCTION__ , $ url , $ params , $ is_amp , $ session_id ) )
- {
- if ( $ phpbb_hook -> hook_return ( __FUNCTION__ ) )
- {
- return $ phpbb_hook -> hook_return_result ( __FUNCTION__ ) ;
- }
- }
- [ ... ]
- }
- // Intercepted function
- function my_append_sid ( & $ hook , $ url , $ params = false , $ is_amp = true , $ session_id = false )
- {
- // Get possible results
- $ result = $ hook -> previous_hook_result ( 'append_sid' ) ;
- [ ... ]
- // I only overwrite some variables and do not return anything, so the append_sid () function will not return anything.
- }
- // Intercepted function
- function my_append_sid ( & $ hook , $ url , $ params = false , $ is_amp = true , $ session_id = false )
- {
- // Get possible results
- $ result = $ hook -> previous_hook_result ( 'append_sid' ) ;
- // $ result variable does not contain value
- return 'FILLED' ;
- }
- // This function is also registered and executed after my_append_sid ()
- function my_own_append_sid ( & $ hook , $ url , $ params = false , $ is_amp = true , $ session_id = false )
- {
- $ result = $ hook -> previous_hook_result ( 'append_sid' ) ;
- // $ result variable is filled with 'FILLED'
- // But, since I do not return anything, the append_sid () function will continue its execution
- }
- // The way to register both functions
- $ phpbb_hook -> register ( 'append_sid' , 'my_append_sid' ) ;
- $ phpbb_hook -> register ( 'append_sid' , 'my_own_append_sid' ) ;
- // My function, which is executed inside the constructor
- function phpbb_hook_register ( & $ hook )
- {
- $ hook -> register ( 'append_sid' , 'my_append_sid' ) ;
- }
- [ ... ]
Source: https://habr.com/ru/post/131074/
All Articles