gpt4 book ai didi

php - get_class_vars() 未显示变量,但在同一类上运行的 property_exists() 返回 true

转载 作者:可可西里 更新时间:2023-11-01 00:52:07 26 4
gpt4 key购买 nike

我正在学习 PHP,我已经开始玩类了——下面可能是最基本的对象,哈哈。

<?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';

?>

然后上面的运行,它应该输出一些数据。在类(class)中(Kevin Skoglund 的视频培训系列,“PHP: Beyond the Basics”),Kevin 的屏幕看起来是正确的(他使用的是 5.2.6。)

我的 WAMP 安装在 5.3 上,我的类 Person 的“first_name”属性没有被循环吐出...但是 echo property_exists("person","first_name") ? 'true' : 'false'; 返回 true。

任何人都可以帮助我了解出了什么问题吗?

最佳答案

property_exists 如果属性存在,则返回 true,无论属性的范围和调用者是什么。

get_class_vars 将返回所有可从当前范围访问的属性,以及它们的静态值或默认值(对于未声明为静态的属性)。但是,它不会返回未在类主体中声明的属性,也不会接受对象参数。

请注意,如果使用类名查询未在类主体(即:对象上下文)中声明的属性,property_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"

关于php - get_class_vars() 未显示变量,但在同一类上运行的 property_exists() 返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5011618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com