Stay hungry, Stay foolish

0%

get_class_vars在两个版本下的异同

环境

  • php5.2.6、apache2.2.8、mysql5.0.51b、xp(虚拟机)
  • php5.3.5、apache2.2.17、mysql5.5.8、win7

实例

外部调用

1
2
3
4
5
6
7
8
class ClassTest{
public $_publicT;
protected $_protectedT;
private $_privateT;
}

$classT = new ClassTest();
var_dump(get_class_vars(get_class($classT)));

结果

两个环境下相同:

‘_publicT’ => null

内部调用

1
2
3
4
5
6
7
8
9
10
class ClassTest{
pulblic $_publicT;
protected $_protectedT;
private $_privateT;
public funciton getVars(){
var_dump(get_class_vars(get_class($this)));
}
}
$classT = new ClassTest();
$classT->getVars();

结果

两个环境下相同:

‘_publicT’ => null

‘_protectedT’ => null

‘_privateT’ => null

###继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class ClassA{
public function getVars(){
var_dump(get_class_vars(get_class($this)));
}
}
class ClassB extends ClassA{
public $_publicB;
protected $_protectedB;
private $_privateB;
}

class ClassC extends ClassB{
public $_publicC;
protected $_protectedC;
private $_privateC;
}

$classC = new ClassC();
$classC->getVars();

结果

  • 环境1

    ‘_publicC’ => null

    ‘_publicB’ => null

  • 环境2

    ‘_publicC’ => null

    ‘_protectedC’ => null

    ‘_publicB’ => null

    ‘_protectedB’ => null

结论

get_class_vars和get_object_vars用来获取类变量。

  1. 在类的外部使用,仅显示public;

  2. 在类的内部使用,显示所有的(public、protected、private);

  3. 方法放在父类,子类通过继承来调用:

在PHP5.2中仅显示public,而PHP5.3中会显示public和protected。

据说打赏我的人,代码没有BUG