2014-01-04 2 views
1

У меня возникла проблема с разработкой приложения с поддержкой pthreads. Если я не вызываю функцию pthreads (start()), все работает так, как планировалось. Но с вызовом функции start() пространство имен разбивается (я так думаю), и мой класс ничего не делает. Вот пример:PHP pthreads namespace проходящий выпуск

namespace LF\Utility; 
use LF\Utility\Callme; 

class Threaded extends \Thread { 

    public function __construct(){ 
     //Constructor stuff 
    } 

    public function run(){ 
     echo "in thread"; 
     $test = new Callme(1); 
    } 
} 

И Callme:

namespace LF\Utility; 

class Callme { 

    public function __construct($val) 
    { 
     echo "num: " . $val; 
    } 

} 

Использование $ резьбовых> Выполнить() дает правильный результат, вызывая $ резьбовых> начать() не вызывая CallME конструктор. Во-вторых, я не могу отлаживать часть кода с помощью xDebug, есть ли простой способ сделать это?

Спасибо за ваше время!

ответ

1

Следующий код отлично подходит для меня.

<?php 
namespace LF\Utility; 

require_once 'callme.php'; 

use LF\Utility\Callme; 

class Threaded extends \Thread { 

    public function __construct(){ 
     //Constructor stuff 
    } 

    public function run(){ 
     echo "in thread" . PHP_EOL; 
     $test = new Callme(1); 
    } 
} 

$t = new Threaded(); 
$t->start(); 

Как вы загружаете класс «Callme» в основной класс? Автопогрузчик? Или что-то другое? Пожалуйста, проверьте это.

+0

Я загружаю этот класс с использованием признаков, я не хочу использовать 'require' /' requre_once', поскольку он должен работать с 'use' вызовами, иначе я потеряю все остальные классы, уже загруженные или я должен позвонить их со смешным способом, например. 'base \ LF \ Profile \ ClassName' – Trouble

+0

О, как я писал - он работает с $ t-> run(), только start() вызывает эти проблемы. – Trouble

+0

@Trouble Он отлично работает с start(), как вы можете видеть из моего кода. – masnun

Смежные вопросы