An example of how it should be done:
<?php
class TestClass {
    private $args;
    function __construct($arg) {
        $this->args = $arg;
        $this->run();
    }
    private function run() {
        if ($this->args == 'run') {
            win32_start_service_ctrl_dispatcher('test_service');
            while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
                # do your work here.
                # try not to take up more than 30 seconds before going around the loop
                # again
            }
        }
    }
}
$object = new TestClass($argv[1]);
?>
Just to help a little, the service control command must be in the first script called. If you try to type this portion of code in a separate file and include it, the SCM will not get the controls. 
example :
- file1.inc :
<?PHP
class MyClass{
  
 function __construct() {
    $x = win32_start_service_ctrl_dispatcher('service');
    
    while (WIN32_SERVICE_CONTROL_STOP!=win32_get_last_control_message()){
        //your code
  }
}
?>
- service.php :
<?PHP
include("file1.inc");
$object = new MyClass();
?>
WON'T WORK !