Ich schrieb einige Code und es hat ein seltsames Verhalten. Es löst fatale Fehler für alle privaten und geschützten Variablen, die ich deklariert habe, auch wenn ich sie mit $this
davor verwenden. Es scheint, als ob der Umfang der $this
Variable nicht erkannt wird.
Ich benutze PHP Version 7.1.0 und Apache Version 2.4.23 (und ich installierte die mpm Worker), Netbeans, Ubuntu 16.04. Ich benutze auch pThreads (https://pecl.php.net/package/pthreads). Ich habe im Internet gesucht und nichts Ähnliches gefunden.
Die Pool-Klasse, aus der meine Klasse besteht, ist eine Klasse von pThreads. z.B.
class interfacePool extends Pool {
public $data = array();
private $workerCount;
private $timeoutStart;
private $timeout = 50;
public function process() {
$this->timeoutStart = microtime(true);
$this->workerCount = count($this->workers);
while ($this->workerCount > 0 && $this->timeoutStart + (float)$this->timeout > microtime(true)) {
$this->collect(function ($task) {
if ($task->isCompleted()) {
$this->data = array_merge($this->data, json_decode($task->data, true));
$this->workerCount--;
}
return $task->isCompleted();
});
}
$this->shutdown();
return $this->data;
}
}
Und der Fehler ich bin immer ist die folgende:
PHP Fatal error: Uncaught Error: Cannot access private property interfacePool::$timeoutStart in /usr//local/apache2/htdocs/01_Web/controllers/interface.controller.php:21
Stapelüberwachung:
0 /usr/local/apache2/htdocs/01_Web/controllers/interface.controller.php(110): interfacePool->process()
1 /usr/local/apache2/htdocs/01_Web/libs/core.class.php(221): interfaceCtrl->getTariffs()
2 /usr/local/apache2/htdocs/01_Web/index.php(35): core->run()
3 {main}
thrown in /usr/local/apache2/htdocs/01_Web/controllers/interface.controller.php on line 21
Die Linie, auf der der Fehler der $this->timeoutStart = microtime(true)
auftritt, ist.
Die Klasse interfacePool
befindet sich in der Datei interface.controller.php
(ich versuche nicht, von irgendwo anders auf diese Variablen zuzugreifen). Diese Fehler treten während des gesamten Projekts auf. überall habe ich geschützte oder private Variablen.
Bitte posten Sie Ihre "Pool" -Klasse. Bearbeiten: Nevermind, es ist von Pthreads Erweiterung. –
Bitte geben Sie den Code aller Dateien aus Ihrer Ablaufverfolgung an. Das einzige, was ich mir vorstellen kann, ist, dass Sie einen dynamischen Anruf mit einer aufrufbaren oder etwas anderem haben. Daher sind Sie außerhalb des Geltungsbereichs. –
die Pool-Klasse ist von Pthreads, können Sie es hier sehen: https://github.com/krakjoe/pthreads/blob/master/classes/pool.h –