2013-04-24 52 views
2

我正在尝试使用OOP和PHP。如何访问无键阵列的内容到对象转换?

我不知道为什么我会需要做这样的事情,但我想知道它将如何完成,无法在网上找到它。

class Example{ 

public $a = 'aye'; 
public $b = 'bee'; 
public $c = 'see'; 

public function how(){ 
    return (object)array(
         $this->a, 
         $this->b, 
         $this->c 
         ); 
    }  
} 

$example = new Example; 
$how = $example->how(); 
echo $how->1; //I thought would print bee 

我知道,给数组键愿意让我做

echo $how->beekey //which would give me beekey's value 

回答

2

这基本上是不可能的,因为在这个bug report解释;数字对象属性是PHP中的一个灰色区域。

但是,你可以投对象返回到一个数组和参考价值:

$arr = (array)$how; 
echo $arr[1]; 

或者,作为一个班轮:

echo current(array_slice((array)$how, 1, 1)); 

最好的建议我可以给你是不是把它变成一个物体摆在首位:

public function how() 
{ 
    return array(
     $this->a, 
     $this->b, 
     $this->c 
    ); 
}  

然后就是其引用为$how[1]

顺便说一句,$how->{1}used to work在PHP 4 :)

+0

感谢您的回应。在OOP中返回数组是否是常见做法? – chris 2013-04-24 06:55:43

+0

@chris唔,不;但为了做“OO”而将数组转换为匿名对象通常不会完成。不过你可以使用['ArrayObject'](http://php.net/arrayobject)。 – 2013-04-24 07:04:02

0

有关使用一个循环是什么?

foreach($how as $value) 
{ 
    echo $value .'<br>'; //this print your values: aye<br>bee<br>see 
} 
+0

你并不需要为'foreach'循环计数器。只需回显'$价值'。 – Pankucins 2013-04-24 06:23:24

+0

@Pankucins这是正确的,谢谢 – Fabio 2013-04-24 06:24:23

+1

你的循环中仍然有'$ i ++'。虽然这种方法可行,但它不会让开发人员直接访问元素。我认为$ how - > {1}可能会挽救一天,但不幸的是它会返回空值。 – Pankucins 2013-04-24 06:27:03