Я определил новую переменную в __construct()
и я хочу использовать ее в другой function
этого class
. Но моя переменная пуста в другой функции!
это мой код:
class testObject{ function __construct() { global $c; $data = array("name"=>$c['name'], "family"=>$c['family']); } function showInfo() { global $data; print_r($data); } }
Объявить переменную $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); } }