@astrotrain

Ассоциативный массив как свойство объекта в PHP?

Вот есть пример кода:

class GetInfo {    
        
        private $domains_ip = array();
        
        ...
        
        function get_ip($domain)
        {
            ...
    		
    		$ip = gethostbyname($domain);		
    		$this->domains_ip[$ip] = $domain;		
    		return $ip;      
            
        }
        
    }


Но если вывести $this->domains_ip то он все время пустой, то есть новое значение не добавляется. Почему так происходит и как пофиксить. Спасибо!

<?php 

class GetInfo {    
    
    private $domains_ip = array();
      
    function get_ip($domain)
    {
        
		print_r($this->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");


В общем вот пример, в котором показано, что, почему-то не работает как положено.
  • Вопрос задан
  • 783 просмотра
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Вроде все работает:
80adf4323aff4915b5bf94ebcd3438c1.png

В каком состоянии находится $domains_ip на момент добавления данных?
function get_ip($domain)
{
  $ip = gethostbyname($domain);

  var_dump($this->domains_ip);

  if (!is_array($this->domains_ip))
  {
    echo 'domains_ip не является массивом!';
  }

  $this->domains_ip[$ip] = $domain;
  return $ip;   
}

Что происходит после добавления?
function get_ip($domain)
{
  $ip = gethostbyname($domain);		
  $this->domains_ip[$ip] = $domain;

  var_dump($ip);
  var_dump($this->domains_ip);

  return $ip;      
}

Что будет, если массив объявить вот так:
private $domains_ip = [];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы