Столкнулся с проблемой выполнения функции в функции и все это классе библиотеки (использую готовую библиотеку для работы потоков PHPThreads).Я передаю ей в качестве аргумента глобальный массив с данными.Необходимо чтобы функция выполнялась в функции класса корректно.
Сам код:
$mas = array(
'id1',
'id2',
'id3',
'id4',
);
function Eacher($m){
foreach ($m as $value) {
echo $value;
}
}
$Thread->Create(function() {
Eacher($mas);
});
$Thread->Run();
?>
Ответ
В вашем коде есть две проблемы:
Вы не инициализировали сессию. Похоже, что этот момент является критическим для работы используемой вами библиотеки.
Как уже сказал @Visman, вы неправильно передаете массив в новый тред. Вообще, в PHP для передачи значения в анонимные функции, нужно использовать замыкания. Однако, в вашем случае этот подход не годится, ведь выполнение задачи будет проходить в другом процессе. По этой же причине, вариант с глобальными переменными тоже вряд ли сработает. К счастью, используемая вами библиотека предоставляет специальные средства для передачи аргументов функции. Пример есть в readme
Таким образом, ваш код должен иметь вид:
session_start();
include 'lib/Threads.php';
$mas = array(
'id1',
'id2',
'id3',
'id4',
);
function Eacher($m){
foreach ($m as $value) {
echo $value;
}
}
$Thread->Create(function($vars) {
extract($vars);
Eacher($mas);
}, array(
'mas' => $mas,
));
$Thread->Run();
Комментариев нет:
Отправить комментарий