Используйте переменную из __construct () в других методах

Я определил новую переменную в __construct() и я хочу использовать ее в другой function этого class . Но моя переменная пуста в другой функции!

это мой код:

 class testObject{ function __construct() { global $c; $data = array("name"=>$c['name'], "family"=>$c['family']); } function showInfo() { global $data; print_r($data); } } 

Related of "Используйте переменную из __construct () в других методах"

Объявить переменную $data как глобальную внутри конструктора:

  function __construct() { global $c; global $data; $data = array("name"=>$c['name'], "family"=>$c['family']); } 

Затем он будет виден и в другой функции.

Обратите внимание, что широкое использование глобальных переменных сильно обескуражено , подумайте о том, чтобы перепроектировать ваш класс для использования переменных класса с помощью getters + seters.

Более правильным способом было бы использовать

 class testObject { private $data; function __construct(array $c) { $this->data = array( "name"=>$c['name'], "family"=>$c['family'] ); } function showInfo() { print_r($this->data); } // getter: if you need to access data from outside this class function getData() { return $this->data; } } 

Также рассмотрим разделение полей данных на отдельные переменные класса следующим образом. Тогда у вас есть типичный чистый класс данных.

 class testObject { private $name; private $family; function __construct($name, $family) { $this->name = $name; $this->family = $family; } function showInfo() { print("name: " . $this->name . ", family: " . $this->family); } // getters function getName() { return $this->name; } function getFamily() { return $this->family; } } 

И вы даже можете построить этот объект с данными из вашей глобальной переменной $c пока не устраните ее из своего кода:

 new testObject($c['name'], $c['family']) 

Вы можете сделать это. Вместо объявления $data как global переменной объявлять как public или private или protected переменную внутри класса в зависимости от вашего использования. Затем установите данные внутри _construct .

Использование глобального внутри класса не является хорошим методом. Вы можете использовать свойства класса.

 class testObject{ public $data; function __construct() { global $c; $this->data = array("name"=>$c['name'], "family"=>$c['family']); } function showInfo() { print_r($this->data); } }