interobject communcation when objects are not inside another:

---------------------------------------------------------------------------------
versionA:

class some_classA{
    global $semaphore;
    function use_semphore(){;}
    function write_semaphore(){;}
    function read_semaphore(){;}
}
class some_classB{
    global $semaphore;
    function use_semphore(){;}
    function write_semaphore(){;}
    function read_semaphore(){;}
}

$semaphore;
$objectA  = new classA;
$objectB = new classB;

while( $some_condition ){
   $some_classA->use_semaphore();
   $some_classB->use_semaphore();
}

---------------------------------------------------------------------------------
versionB:

class some_classA{
    function some_classA( &$semaphore ){ $this->semaphore = $semaphore; } 
    &$semaphore;
    function use_semphore(){;}
    function write_semaphore(){;}
    function read_semaphore(){;}
}
class some_classB{
    function some_classB( &$semaphore ){ $this->semaphore = $semaphore; } 
    &$semaphore;
    function use_semphore(){;}
    function write_semaphore(){;}
    function read_semaphore(){;}
}

$semaphore;
$objectA  = new classA( &$semaphore );
$objectB = new classB( &$semaphore );

while( $some_condition ){
   $some_classA->use_semaphore();
   $some_classB->use_semaphore();
}
---------------------------------------------------------------------------------
The above versions are basically a small RTOS, real time operating system.
Obviously, it doesn't keep running like a real RTOS would you have a process
timeout, like in a script:-) But it is useful in scripts WHILE they are
processing something.
---------------------------------------------------------------------------------
VersionC:

class some_classA{
    function use_semphore(){;}
    function write_semaphore(){;}
    function read_semaphore(){;}
}
class some_classB{
    function use_semphore(){;}
    function write_semaphore(){;}
    function read_semaphore(){;}
}
class some_classC{
   var &$semaphore;
   var $objectA  = new classA;
   var $objectB = new classB;
   function done_once( $some_var ){
      $this->semaphore = $some_var;
      $this->objectA->use_semaphore();
      $this->objectB->use_semaphore();
   }
}
---------------------------------------------------------------------------------
MANY, MANY other ways to talk between objects are possible, and may more uses
than this shows. The basic idea is to have a variable both, or all,
communicating
objects know the location of, usally through:
        1/ A reference in at the time of object construction.
        2/ A reference passed as an argument to a main function in a class/object
                at time of invocation.
        3/ A global variable whose name is known ahead of time.

        1 is best, because it is simplest, but needs a variable one up in
                namespace location, which means it can be seen and written
                by functions/objects above. If global, that means it can
                be written by the PHP_VARS under the wrong setting.
        2 is OK, but you have to write in the name of the variable to pass in
                each time, more trouble, spelling errors, and messier, but maybe
                safer.
        3 is least safe, but least trouble in coding.
        4, is to make the WHOLE script a single function of an object, and the
                semaphore is a 'var' in the object, which is passed in as a reference
                to any objects created in the main object. Safest, but more difficult
                to set up or possibly to visualize.
---------------------------------------------------------------------------------

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to