ob_start(); starts output buffering to the internal buffer not (screen), then when you add ob_get_contents(); it copy the the output from internal buffer still nothing printed, and when ob_end_clean(); interpreted, it will clear all internal buffer memory, nothing outputed to screen.
Starting from ob_start(); to ob_end_clean(); nothing will be printed, I use this method when including file for preventing printing some white space before sending header.