Ассоциативный массив как свойство объекта в PHP? Вот есть пример кода:class GetInfo {

private $domains_ip = array();

...

function get_ip($domain)
{
...

$ip = gethostbyname($domain);
$this->domains_ip[$ip] = $domain;
return $ip;

}

}
Но если вывести $this->domains_ip то он все время пустой, то есть новое значение не добавляется. Почему так происходит и как пофиксить. Спасибо!domains_ip);
$ip = gethostbyname($domain);
$this->domains_ip[$ip] = $domain;
return $ip;

}

}
//echo $o->get_ip("google.com");
//echo $o->get_ip("pivo.com");
//echo $o->get_ip("kone.ru");
class my_thread extends Thread {

private $get_info_object;

function __construct(GetInfo $obj)
{
$this->get_info_object = $obj;
}

function check_ip($domain)
{
echo $this->get_info_object->get_ip($domain);
}

}
$o = new GetInfo();
$t = new my_thread($o);
$t->check_ip("google.com");
$t->check_ip("pivo.com");
В общем вот пример, в котором показано, что, почему-то не работает как положено.

21 Авг 2019 в 07:05
193 +1
0
Ответы
1

Проблема заключается в том, что каждый раз при создании нового экземпляра класса my_thread присваивается новый объект GetInfo, а не передается существующий. Таким образом, каждый поток работает с собственным экземпляром GetInfo, и поэтому массив $domains_ip не заполняется.

Чтобы исправить эту проблему, вам нужно передавать один и тот же объект GetInfo в каждый экземпляр my_thread. Пример исправления:

class my_thread extends Thread {
private $get_info_object;
function __construct(GetInfo $obj)
{
$this->get_info_object = $obj;
}
function check_ip($domain)
{
echo $this->get_info_object->get_ip($domain);
}
}
$o = new GetInfo();
$t1 = new my_thread($o);
$t2 = new my_thread($o);
$t1->check_ip("google.com");
$t2->check_ip("pivo.com");

Теперь оба потока будут использовать один и тот же объект GetInfo, и массив $domains_ip будет заполняться правильно.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир