我在__construct()
中定义了一个新变量,我希望在此function
的另一个class
中使用它。
但是我的变量在另一个函数中是空的!
这是我的代码:
class testObject{
function __construct() {
global $c;
$data = array("name"=>$c['name'],
"family"=>$c['family']);
}
function showInfo() {
global $data;
print_r($data);
}
}
答案 0 :(得分:10)
在构造函数中声明变量$data
为全局:
function __construct() {
global $c;
global $data;
$data = array("name"=>$c['name'],
"family"=>$c['family']);
}
然后,它也会在其他功能中可见。
请注意,强烈建议广泛使用全局变量,考虑重新设计类以使用带有getter + setter的类变量。
更合适的方法是使用
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'])
答案 1 :(得分:2)
你可以这样做。而不是将$data
声明为global
变量,而是根据您的用途在类中声明为public
或private
或protected
变量。然后在_construct
。
在类中使用global不是一个好方法。您可以使用类属性。
class testObject{
public $data;
function __construct() {
global $c;
$this->data = array("name"=>$c['name'],
"family"=>$c['family']);
}
function showInfo() {
print_r($this->data);
}
}