Я написал код, и у него есть странное поведение. Он генерирует смертельные ошибки для всех частных и защищенных переменных, которые я объявил, даже если я использую их с $this
перед ними. Похоже, что область действия переменной $this
не распознается.
Я использую версию PHP версии 7.1.0 и версию apache версии 2.4.23 (и я установил mpm worker), Netbeans, Ubuntu 16.04. Я также использую pThreads (https://pecl.php.net/package/pthreads). Я искал в Интернете и не нашел ничего подобного этим проблемам.
Класс пула, из которого распространяется мой класс, является классом pThreads. , например.
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;
}
}
И ошибка я получаю следующее:
PHP Fatal error: Uncaught Error: Cannot access private property interfacePool::$timeoutStart in /usr//local/apache2/htdocs/01_Web/controllers/interface.controller.php:21
трассировки стека:
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
Линия, на которой происходит ошибка является $this->timeoutStart = microtime(true)
.
Класс interfacePool
находится в файле interface.controller.php
(я не пытаюсь получить доступ к этим переменным из другого места). Эти ошибки происходят через весь проект; везде я защищал или закрывал переменные.
Пожалуйста отправьте свой класс "Pool" тоже. Изменить: Nevermind, это от расширения pthreads. –
Просьба предоставить код всех файлов из вашей трассы. Единственное, что я могу себе представить, это то, что у вас есть динамический вызов с вызываемым или другим. Поэтому вы находитесь вне сферы действия. –
класс пула от pthreads, вы можете увидеть его здесь: https://github.com/krakjoe/pthreads/blob/master/classes/pool.h –