Странности do while

  • Автор темы Автор темы kode
  • Дата начала Дата начала

kode

never knows best
Странности do while

Есть код:

Код:
[PHP]
public function readAll(){
	$data = "";
	$buffer = "";

	do{
		$buffer = $this->read();
		$data .= $buffer;
	}while(!$buffer);
		
	return $data;
}
[/PHP]

Но отрабатыват он странно: сначала всё нормально работает, но потом подвисает, посему добавил после $data .= $buffer var_dump($buffer);

и выводит он вот что:

Код:
.....(очень много раз string(0) "")
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""

PS/Класс в котором это всё находится наследует класс-фасад socket
 
В общем проблему через select() решил, но блин шозанах?

-~{}~ 22.01.08 14:07:

через empty() тоже самое
 
PHP:
while ($buffer = $this->read()) {
    $data .= $buffer;
}

-~{}~ 22.01.08 21:11:

но блин шозанах?
код работает так, как и ожидается, странно что ты ожидаешь от него чего-то иного
 
PHP:
while ($buffer = $this->read()) { 
    $data .= $buffer; 
}

это был изначальный вариант :)

Дело в том что read блокирует пока не появляются данные или ошибка....

PHP:
public function read($length=1024,$type=PHP_BINARY_READ){
	$data = socket_read($this->socket,$length,$type);
	if($data === false){
		throw new Exception($this->getError());
	}
	return $data;
}
 
Дело в том что read блокирует пока не появляются данные или ошибка....
вполне нормальной практикой является описание проблемы, а не приведение кода...
твой код можно трактовать так:

инициализировали переменную, открыли цикл, который повторяется до тех пор, пока $this->read вернёт не (bool)false

и что тут работает не так как ты хочешь?
ps: хочу напомнить, что ты так же не озвучил - и чего ты хочешь
 
.

Окей, озвучу: почему (bool) string(0) "" якобы возвращает true....
 
чёто меня сглючило чтоли....ну в общем всем спасибо, всем пока :) через recv прекрасно работает :P
 
Сверху