使用 ReflectionClass 获取运行时属性

     2023-02-25     169

关键词:

【中文标题】使用 ReflectionClass 获取运行时属性【英文标题】:Getting runtime properties with ReflectionClass 【发布时间】:2015-08-16 09:17:51 【问题描述】:

所以我正在探索反射类的使用。我注意到了几件事。 必须先设置我的属性的可访问性,然后才能在 Origin 类中使用 Even 属性的值或名称。

我想知道的是可以通过ReflectionClass 在运行时设置属性。例如

class MyClass

    public $bathroom = 'Dirty';
    protected $individual = 'President';
    private $conversation = '****************';

    function outputReflectedPublic()
    
        $reflection = new ReflectionClass($this);
        $props = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);
        foreach($props as $prop)
            echo $prop->getName() . ' : ' . $prop->getValue($this);
    


$obj = new MyClass();
$obj->outputReflectedPublic();//bathroom : Dirty
//now we add a new property
$obj->$ect = 'ify';
$obj->outputReflectedPublic();//bathroom : Dirty  //same as before

现在我对此并不感到惊讶。 我试图使用 ReflectionProperty::IS_PRIVATEReflectionProperty::IS_PROTECTEDReflectionProperty::IS_STATIC 来查看该属性是否作为受保护/私有/静态存在于实例中

我还使用了$prop->setAccessible(true) 来防止出现无法访问的错误。 我无法看到 $ect 属性。

我能够通过这样的内部函数获得$ect 属性:

function getAll()

    foreach($this as $key=>$val)
        echo $key . ' : ' . $val . '<br>';

浴室:脏

个人:总裁

转化:****************

ect : 确认

有没有办法从 ReflectionClass 的对象中获取 ($ect) 类型的属性?这些属性的正式名称是什么?

【问题讨论】:

ReflectionClass 明确反映了;你想要的是反射对象实例,ReflectionObject 是正确的反射器。 【参考方案1】:

ReflectionClass::getProperties() 仅获取由类显式定义的属性。要反映您在对象上设置的所有属性,包括动态属性,请使用从 ReflectionClass 继承并适用于运行时实例的 ReflectionObject:

$reflect = new ReflectionObject($this);

【讨论】:

哦,太好了,这仍然允许IS_PUBLIC 过滤器等吗?动态属性是运行时集属性的正式名称吗? 由于它派生自 ReflectionClass,它支持您可以与该类一起使用的所有接口,包括带有过滤器的 getProperties。 您知道使用ReflectionObject 超过ReflectionClass 是否会影响性能?在对象可能有也可能没有额外属性的情况下

如何使用 C++ 在运行时获取内存使用情况?

】如何使用C++在运行时获取内存使用情况?【英文标题】:HowtogetmemoryusageatruntimeusingC++?【发布时间】:2010-10-1417:49:02【问题描述】:我需要在我的程序运行时获取内存使用VIRT和RES并显示它们。到目前为止我尝试了什么:getrusage(... 查看详情

如何使用 C++ 在运行时获取内存使用情况?

】如何使用C++在运行时获取内存使用情况?【英文标题】:HowtogetmemoryusageatruntimeusingC++?【发布时间】:2010-10-1417:49:02【问题描述】:我需要在我的程序运行时获取内存使用VIRT和RES并显示它们。到目前为止我尝试了什么:getrusage(... 查看详情

如何获取使用 nohup 运行的程序列表

】如何获取使用nohup运行的程序列表【英文标题】:Howtogetalistofprogramsrunningwithnohup【发布时间】:2013-05-2410:23:11【问题描述】:我正在通过SSH连接访问运行CentOS(Linux发行版)的服务器。因为我不能一直保持登录状态,所以我使... 查看详情

使用循环运行后台获取时出现 NSInternalInconsistencyException

】使用循环运行后台获取时出现NSInternalInconsistencyException【英文标题】:NSInternalInconsistencyExceptionwhenrunningbackgroundfetchwithaloop【发布时间】:2015-05-1314:06:40【问题描述】:我有这段代码正在尝试对HealthKit数据进行后台提取。当我第... 查看详情

并行运行函数并使用队列获取输出

】并行运行函数并使用队列获取输出【英文标题】:RunfunctioninparallelandgraboutputsusingQueue【发布时间】:2021-10-3123:14:29【问题描述】:我想用不同的参数来取乐function。对于每个不同的参数,我想并行运行该函数,然后获取每次运... 查看详情

使用 sudo 运行时获取 shell 脚本

】使用sudo运行时获取shell脚本【英文标题】:Sourcingashellscript,whilerunningwithsudo【发布时间】:2011-06-0504:56:26【问题描述】:我想编写一个shell脚本来设置一个mercurial存储库,并允许组中的所有用户“开发者”来执行这个脚本。脚... 查看详情

获取 SequelizeConnectionRefusedError:使用 sequelize 运行 docker 时

】获取SequelizeConnectionRefusedError:使用sequelize运行docker时【英文标题】:GettingSequelizeConnectionRefusedError:whenrunningdockerwithsequelize【发布时间】:2017-07-1703:09:29【问题描述】:我正在使用以下配置运行dockerweb:image:ca9a385372b0volumes:-.:/srcp... 查看详情

使用 aws cli 获取环境的运行状况很热门

】使用awscli获取环境的运行状况很热门【英文标题】:HottogettheHealthofanenvironmentusingawscli【发布时间】:2017-07-0400:43:54【问题描述】:我正在使用cli使用命令“elasticbeanstalkupdate-environment”更新ebs环境,在此命令之后我想获取环境... 查看详情

如何使用 JDBC 获取正在运行的语句列表

】如何使用JDBC获取正在运行的语句列表【英文标题】:HowtogetalistofrunningstatementsusingJDBC【发布时间】:2016-10-0513:38:22【问题描述】:我正在使用DBCP和JDBC进行一些数据移动。有时,当某些查询运行时间过长时,应用程序可能会被... 查看详情

如何获取应用程序使用 typescript 运行的路径?

】如何获取应用程序使用typescript运行的路径?【英文标题】:HowcanIgetthepaththattheapplicationisrunningwithtypescript?【发布时间】:2016-09-0920:50:57【问题描述】:我正在尝试使用electron、angular2、typescript和neDB创建一个桌面应用程序。为了... 查看详情

如何使用 Java 在运行时获取当前 Cucumber 功能文件名

】如何使用Java在运行时获取当前Cucumber功能文件名【英文标题】:howtogetcurrentCucumberfeaturefilenameatruntimeusingJava【发布时间】:2017-05-1416:05:18【问题描述】:我想在运行时使用Java获取当前功能文件名。我在钩子中有场景信息,但无... 查看详情

使用 Python 运行 CMD 命令,打印输出并将输出作为变量获取

】使用Python运行CMD命令,打印输出并将输出作为变量获取【英文标题】:RunningaCMDcommandwithPython,printingtheoutputANDgettingtheoutputasvariable【发布时间】:2020-01-0713:51:01【问题描述】:我正在尝试构建一个脚本来使用pyinstaller自动构建桌... 查看详情

使用java获取正在运行的bash脚本的输出[重复]

】使用java获取正在运行的bash脚本的输出[重复]【英文标题】:Getoutputofarunningbashscriptwithjava[duplicate]【发布时间】:2017-02-2613:46:13【问题描述】:通常我使用这段代码来运行一个bash脚本并得到它的输出ProcessBuilderpb=newProcessBuilder("/... 查看详情

如何使用 PowerShell 或 VBScript 获取正在运行的应用程序列表

】如何使用PowerShell或VBScript获取正在运行的应用程序列表【英文标题】:HowtogetlistofrunningapplicationsusingPowerShellorVBScript【发布时间】:2010-09-1612:19:18【问题描述】:我需要使用PowerShell或VBScript以编程方式获取正在运行的应用程序... 查看详情

如何获取使用 perf stat 运行的程序的退出代码?

】如何获取使用perfstat运行的程序的退出代码?【英文标题】:HowcanIgetexitcodeofprogramrunwithperfstat?【发布时间】:2016-01-1410:30:32【问题描述】:我必须使用perfstat获取一些程序的统计信息,即perfstat-ostat.log./a.out我还必须获取这些程... 查看详情

使用 xcom 从 BigQueryOperator 获取正在运行的作业 ID

】使用xcom从BigQueryOperator获取正在运行的作业ID【英文标题】:gettingrunningjobidfromBigQueryOperatorusingxcom【发布时间】:2019-06-2010:01:52【问题描述】:我想从BigQueryOperator获取BigQuery的作业ID。我在bigquery_operator.py文件中看到以下行:cont... 查看详情

如何获取通过 symfony 进程运行的脚本的内存使用情况?

】如何获取通过symfony进程运行的脚本的内存使用情况?【英文标题】:Howtogetthememoryusageofascriptthatrunsviasymfony-process?【发布时间】:2021-09-1507:10:42【问题描述】:所以,这是这个wep应用程序,它愉快地运行python脚本,通过消息排... 查看详情

如果您正在运行 ***,请使用 PHP 获取 IP 地址

】如果您正在运行***,请使用PHP获取IP地址【英文标题】:gettingipaddressusingPHPincaseyouarerunning***【发布时间】:2010-09-2119:47:05【问题描述】:我正在使用***,因此如果我检查http://whatismyip.com,它会给我与$_SERVER[\'REMOTE_ADDR\']或getenv(\... 查看详情