I am confused by the results from the following simplified code.
A Threaded object MyPool is to instantiate a variable number of MyWorker objects. As each MyWorker object is correctly instantiated, it should increment the $counter inside the MyPool class, to reflect how many correctly instantiated workers there are.
When called from inside a MyWorker object, the increaseCounter() function appears to execute (as per echo statement), but has no affect on the $counter property. However calling the same from the main thread works as expected.
How do I implement this simple concept?
<?php
error_reporting(E_ALL & ~E_NOTICE);
class MyPool extends Threaded
{
public static $counter;
public $workers;
public function __construct()
{
self::$counter = (int) 0;
$workers[] = new MyWorker();
$workers[] = new MyWorker();
$workers[] = new MyWorker();
$workers[0]->start();
$workers[1]->start();
$workers[2]->start();
}
public static function getCounter()
{
return self::$counter;
}
public static function increaseCounter()
{
self::$counter++;
echo "counter has been increased inside MyPool\n";
}
}
class MyWorker extends Worker
{
public function __construct()
{
}
public function run()
{
// do something then
$this->WorkerActive();
}
public function WorkerActive()
{
MyPool::$counter++;
MyPool::increaseCounter();
}
}
$MyPool = new MyPool();
echo "counter = ".MyPool::$counter."\n";
echo "counter = ".$MyPool->getCounter()."\n";
echo "counter = ".MyPool::getCounter()."\n";
MyPool::$counter++;
MyPool::increaseCounter();
echo "counter = ".MyPool::$counter."\n";
echo "counter = ".$MyPool->getCounter()."\n";
echo "counter = ".MyPool::getCounter()."\n";
The output is:
counter has been increased inside MyPool
counter has been increased inside MyPool
counter has been increased inside MyPool
counter = 0
counter = 0
counter = 0
counter has been increased inside MyPool
counter = 2
counter = 2
counter = 2