Proper way of using functions in action hook?

Yes, you can. But you have to be careful, since some special cases may occur. Some of them are:

1. Function may be class method and not a global function:

class SomeClass {
   ...
   function some_function() { ... }
   ...
}

In such case, you can use it only if:
– it’s a static function
– it’s public method and you have access to some object of that class.

2. File with that function may not be included always:

function do_something() {
    if ( condition_met() ) {
        include_once( 'parent_theme_hooks.php' );
    }
}

In such case the functions from that file won’t be accessible always.

3. Function may be declared inside if statement:

if ( class_exists( 'SomeClass' ) ) {
    function some_function() { ... }
}

Again – if given class doesn’t exist, then the function won’t be accessible.

4. File is not loaded yet

If the function comes with a plugin or a theme, then it may be declared using some action hook.

In such case the function won’t be accessible before that hook is fired up.

Another example of this case is using functions from parent theme inside child theme. functions.php file from parent theme comes after the same file from child theme. So you can’t use parent functions directly in child themes functions.php file.

But…

There are some ways you can make your code more reliable when using such functions:

  1. Always try to understand when and how is that function declared.
  2. Check if the function exists with if ( function_exists( 'function_name' ) ) and call it only if it does. You can also provide some alternative solution (fallback), if it doesn’t exist.