gpt4 book ai didi

php - 如何以编程方式从其中一种方法中查找类的公共(public)属性

转载 作者:IT王子 更新时间:2023-10-29 00:08:45 26 4
gpt4 key购买 nike

我有一个类 Foo 具有公共(public)和 protected 属性。 Foo 需要一个非静态方法,getPublicVars() 返回 Foo 的所有公共(public)属性的列表(这只是一个例如,我从外部知道调用 get_object_vars()Foo 对象将完成此操作,并且不需要我的 getPublicVars() 方法)。

Note: This must also return dynamically declared properties assigned at runtime to the class instance (object) that aren't defined in the class's definition.

例子如下:

class Foo{
private $bar = '123';
protect $boo = '456';
public $beer = 'yum';

//will return an array or comma seperated list
public function getPublicVars(){
// thar' be magic here...
}
}

$foo = new Foo();
$foo->tricky = 'dynamically added var';

$result = $foo->getPublicVars();
var_dump($result); // array or comma list with 'tricky' and 'beer'

从类自己的方法中获取对象的唯一公共(public)属性(其中 public 和 protected 都可见)的最简洁方法是什么?

我看过:

但这似乎并没有解决我的问题,因为它指向从对象外部使用 get_object_vars()

最佳答案

正如您已经意识到的,PHP 的内置 get_object_vars是范围敏感的。您只需要 public 对象属性。

因此从该函数到公共(public)变体并不是很大的一步:

function get_object_public_vars($object) {
return get_object_vars($object);
}

调用此 get_object_public_vars 将只为您提供公共(public)属性,因为它超出了当前对象的范围。

如果您需要更细粒度的控制,您还可以使用 ReflectionObject :

(new ReflectionObject($this))->getProperties(ReflectionProperty::IS_PUBLIC);

这样做的好处是您不需要在全局命名空间中引入另一个函数。

关于php - 如何以编程方式从其中一种方法中查找类的公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124072/

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