Только переменная может передаваться по ссылке - вопрос opensocket - PullRequest
0 голосов
/ 17 декабря 2010

У меня было это:

final public function __construct()
{
  $this->_host = 'ssl://myserver.com';
  $this->_porto = 700;
  $this->_filePointer = false;

  try
  {
    $this->_filePointer = fsockopen($this->_host, $this->_porto);
    if ($this->_filePointer === FALSE)
    {
       throw new Exception('Cannot place filepointer on socket.');
    }
    else
    {
       return $this->_filePointer;
    }

 }

 catch(Exception $e)
 {
            echo "Connection error: " .$e->getMessage();
 }

}

Но я бы хотел добавить опцию тайм-аута в этот класс, поэтому я добавил:

final public function __construct()
{
  $this->_host = 'ssl://myserver.com';
  $this->_porto = 700;
  $this->_filePointer = false;
  $this->_timeout = 10;

  try
  {
    $this->_filePointer = fsockopen($this->_host, $this->_porto, '', '', $this->_timeout);
    if ($this->_filePointer === FALSE)
    {
       throw new Exception('Cannot place filepointer on socket.');
    }
    else
    {
       return $this->_filePointer;
    }

 }

 catch(Exception $e)
 {
            echo "Connection error: " .$e->getMessage();
 }

}

Я получаю сообщение об ошибке: " Только переменные могут передаваться по ссылке ."

Что происходит?

Обновление: Ошибка: "Только переменные могут передаватьсяссылка "относится к этой строке:

$this->_filePointer = fsockopen($this->_host, $this->_porto, '', '', $this->_timeout);

Большое спасибо, MEM

1 Ответ

3 голосов
/ 17 декабря 2010
fsockopen ( string $hostname [, int $port = -1 [, int &$errno [,
            string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

Параметры &$errno и &$errstr передаются по ссылке. Вы не можете использовать пустую строку '' в качестве аргумента, так как это не переменная, которую можно передать по ссылке.

Передайте имя переменной для этих параметров, даже если они вас не интересуют (хотя это и должно быть):

fsockopen($this->_host, $this->_porto, $errno, $errstr, $this->_timeout)

Будьте внимательны, чтобы не перезаписать существующие переменные с тем же именем.

...