Я определил новую переменную в __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); } }