Php get_class_vars()未显示变量,但在同一类上运行的属性_exists()返回true
我在学习PHP,并且开始玩类——下面可能是有史以来最基本的对象,lolPhp get_class_vars()未显示变量,但在同一类上运行的属性_exists()返回true,php,class,object,Php,Class,Object,我在学习PHP,并且开始玩类——下面可能是有史以来最基本的对象,lol <?php class Person { var $first_name; var $last_name; var $arm_count = 2; var $leg_count = 2; function say_hello() { echo "Hello from inside the class
<?php
class Person {
var $first_name;
var $last_name;
var $arm_count = 2;
var $leg_count = 2;
function say_hello() {
echo "Hello from inside the class " . get_class($this) .".<br />";
}
function full_name() {
return $this->first_name . " " . $this->last_name;
}
}
$person = new Person();
echo $person->arm_count . "<br />";
$person->first_name = 'Lucy';
$person->last_name = 'Ricardo';
echo $person->full_name() . "<br />";
$vars = get_class_vars('Person');
foreach($vars as $var => $value) {
echo "{$var}: {$value}<br />";
}
echo property_exists("person","first_name") ? 'true' : 'false';
?>
然后运行上面的程序,它应该输出一些数据。在本课中(由“,”编写的视频培训系列),Kevin的屏幕看起来是正确的(他使用的是5.2.6)
我的WAMP安装在5.3上,我的类Person的“first_name”属性没有被循环吐出。。。然而,echo属性存在(“person”,“first-name”)?'真’:‘假’代码>返回true
有人能帮我了解出了什么问题吗?get\u class\u vars()只返回公共访问变量,而property\u exists()检查公共、受保护和私有变量
vs。
属性\u exists
如果属性存在,则无论属性的范围和调用方是什么,都将返回true
get\u class\u vars
将返回可从当前作用域访问的所有属性,以及它们的静态值或默认值(对于未声明为静态的属性)。但是,它不会返回未在类主体中声明的属性,也不会接受对象参数
请注意,如果使用类名查询未在类主体(即:对象上下文)中声明的属性,则属性\u exists
也将返回false
每个示例:
class Foo {
public $foo;
private $bar;
public function test() {
var_dump(get_class_vars(__CLASS__));
}
}
$obj = new Foo;
$obj->baz = 'hello';
property_exists($obj, 'bar'); // true
property_exists($obj, 'baz'); // true
property_exists(get_class($obj), 'baz'); // false
get_class_vars(get_class($obj)); // you get "foo" only
$obj->test(); // you get "foo" and "bar", not "baz"
@netcoder——啊,我明白了——那么我的var$first\u name
没有被声明为公共的原因是什么?我理解两者之间的区别,但不是我为什么会遇到这种区别…@朱利安:这是公开的。但它返回默认值,即null
(即:打印时没有任何内容)。@Julian:您可能应该将其声明为public
,而不是var
。)@netcoder-我知道它将返回null
,但让我重新表述一下问题:为什么每个其他变量(包括last_name
,也是null
)都会显示在foreach
循环的输出中?将public
添加到first\u name
不会改变任何内容。。。它仍然没有得到吐痰的循环@朱利安:不幸的是,我没有任何Windows机器,所以我不能测试它。但是就像我说的,你真的应该升级到至少5.3.1。它解决了很多问题。