2010-01-19 59 views
11

我有一个具有美元($)符号的属性的PHP对象。如何访问具有美元符号的PHP对象属性?

如何访问此属性的内容?

实施例:

echo $object->variable; // Ok 

echo $object->variable$WithDollar; // Syntax error :-(
+0

尝试首先执行此操作:'vardump($ object);',然后检查结果。 – 2010-01-19 12:06:24

+2

如果它来自SQL查询,那么可能应该在SQL中重命名该字段(即'选择变量$ withDollar as varwithoutdollar')。 – JAL 2010-01-19 13:38:12

+0

@Code Duck:是的,我可以,这就是我到现在为止所做的,我试图找出它是否可以直接在PHP中使用。 – kevin 2010-01-19 14:02:06

回答

37
  1. 随着variable variables

    $myVar = 'variable$WithDollar'; 
    echo $object->$myVar; 
    
  2. 随着大括号:

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

你的意思是,与字符串变量? – 2010-01-19 11:48:57

+0

不,变量是正确的。但$是变量名称是非法的...... – 2010-01-19 11:49:46

+1

@Jan,这并不改变你可以得到一个变量或名称为$的属性... – nickf 2010-01-19 11:52:29

3

我假设您想要随时访问具有变量名称的属性。为此,尝试

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

我没有创建它们,它们是SQL查询的结果。这不是我想要做的。 – kevin 2010-01-19 11:50:33

+0

你可以。试试这个:'$ x ='a $ b'; $$ x ='foo'; print_r(get_defined_vars());' – nickf 2010-01-19 11:51:35

+0

@nickf:好点,删除。 – 2010-01-19 12:02:03

1

有反射法也可用来构建方法和属性可以由变量建成或包含特殊字符的名称。您可以使用ReflectionClass :: getProperty(字符串$ name)方法。

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

+2

你必须在那里使用单引号。 – nickf 2010-01-19 12:40:21

1

你不知道。

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

不要尝试用文字'$'声明变量。

如果你不得不处理someoneelse的混乱 - 首先修复他们写的代码来删除美元,然后去掉他们的手指。

C.

+1

主要运行数据库的一些软件已有20年的历史。相信我,我很想拥有可读的列名(例如不是AF $ AT1),我正在与数据库通信,并且无法更改任何内容! – kevin 2010-01-19 13:45:51

3

感谢您的回答,我刚刚发现我怎么能做到这一点的方式,我打算:

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

我敢肯定我尝试过每一个组合可能。