如何访问具有美元符号的PHP对象属性?

如何访问具有美元符号的PHP对象属性?,php,oop,Php,Oop,我有一个PHP对象,其属性中有一个美元($)符号 如何访问此属性的内容 例如: echo $object->variable; // Ok echo $object->variable$WithDollar; // Syntax error :-( 与: 带花括号: echo $object->{'variable$WithDollar'}; 我假设您希望动态访问具有变量名的属性。为此,试试看 echo $object->{"variable".$yourVar

我有一个PHP对象,其属性中有一个美元($)符号

如何访问此属性的内容

例如:

echo $object->variable; // Ok

echo $object->variable$WithDollar; // Syntax error :-(
  • 与:

  • 带花括号:

    echo $object->{'variable$WithDollar'};
    

  • 我假设您希望动态访问具有变量名的属性。为此,试试看

    echo $object->{"variable".$yourVariable}
    

    还有一些反射方法也允许您构造方法和属性名称,这些名称可以由变量生成,也可以包含特殊字符。您可以使用ReflectionClass::getProperty(字符串$name)方法

    
    $object->getProperty('variable$WithDollar');
    

    你没有

    美元符号在PHP中具有特殊意义。尽管在取消引用类/对象属性时可以绕过变量替换,但您永远不应该这样做

    不要试图用文本“$”来声明变量

    如果你不得不处理别人的烂摊子——首先修复他们写的代码,然后去砍掉他们的手指


    C.

    多亏了你的回答,我才知道我是如何按照我的意愿做到这一点的:

    echo $object->{'variable$WithDollar'}; // works !
    

    我很确定我以前尝试过所有可能的组合。

    你的意思是,使用字符串变量?不,变量变量是正确的术语。但是$在变量名中是非法的…@Jan,这并不能改变这样一个事实,即你可以得到一个变量或一个名称中带有$的属性…哦,这似乎有效!有没有办法不使用第二个变量($myVar)?类似于:echo$object->“variable$WithDollar”;)@凯文:我在回答中指出了怎么做。但是你首先想要达到什么目的呢?至少可以说,字段名中带有$的mySQL结果集很奇怪。我没有创建它们,它们是SQL查询的结果。这不是我想做的,你可以这么做。试试这个:
    x='a$b'$$x=‘foo’;print_r(get_defined_vars())首先尝试这样做:
    vardump($object)
    ,然后检查结果。如果它来自SQL查询,也许您应该在SQL中重命名该字段(即,“选择变量$withDollar作为varwithoutdollar”)。@code Duck:是的,我本可以这样做的,直到现在,我试图找出直接在PHP中是否可行。我想说Duck在评论中给出的解决方案代码是唯一合理的。编写、读取和维护充斥着无效变量名和黑客代码的代码来绕过这些问题将耗费不必要的时间,并将导致bug和其他无法预见的问题,而这些问题反过来又需要更多的黑客。尽可能接近问题的根源来解决问题。正如我在下面的评论中所说,我没有任何选择。我要查询的系统已经有20年的历史了,你不能在运行中改变这样的东西。我完全同意你的看法,一般来说,最好的方法是解决问题的根源,但我找到了一种非黑客的方法来做我想做的事情。这不再是问题了。你必须在那里使用单引号。一些主要运行数据库的软件已经有20年的历史了。相信我,我只希望有可读的列名称(而不是AF$AT1),我正在与数据库通信,不能对其进行任何更改!
    echo $object->{'variable$WithDollar'}; // works !