A little bit of info regarding useful variables when writing your callback function.
There doesn't seem to be a way to set rl_basic_word_break_characters like with the pure C library, so as previous users have pointed out you'll only receive the current word in the input buffer within your callback.  If for example you're typing "big bro|ther", where the bar is the position of your cursor when you hit TAB, you'll receive (string) "brother" and (int) 4 as your callback parameters.
However, it is possible (easily) to get more useful information about what the user has typed into the readline buffer.  readline_info() is key here.  It will return an array containing:
"line_buffer" => (string)
   the entire contents of the line buffer (+ some bugs**)
"point" => (int)
   the current position of the cursor in the buffer
"end" => (int)
   the position of the last character in the buffer
So for the example above you'd get:
  * line_buffer => "big brother"
  * point => 7
  * end => 11
From this you can easily perform multi-word matches.
** NOTE: line_buffer seems to contain spurious data at the end of the string sometime.  Fortunately since $end is provided you can substr() it to get the correct value.
The matches you need to return are full words that can replace $input, so your algorithm might crudely look something like:
<?php
function your_callback($input, $index) {
  $rl_info = readline_info();
  
  $full_input = substr($rl_info['line_buffer'], 0, $rl_info['end']);
  
  $matches = array();
  
  foreach (phrases_that_begin_with($full_input) as $phrase) {
    $matches[] = substr($phrase, $index);
  }
  
  return $matches;
}
?>