2013-04-24 3 views
2

Я экспериментирую с ООП и 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].

Btw, $how->{1}used to work в PHP 4 :)

+0

спасибо за ответ. Является ли обычной практикой возвращать массивы в ООП? – chris

+0

@chris Ну, нет; но превращение массивов в анонимные объекты ради выполнения «OO» обычно не выполняется. Однако вы можете использовать ['ArrayObject'] (http://php.net/arrayobject). –

0

Что об использовании цикл?

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

Вам не нужно счетчик для 'foreach' цикла. Просто откликните «$ value». – Pankucins

+0

@Pankucins это правильно, спасибо – Fabio

+1

В вашем цикле все еще есть '$ i ++'. Хотя этот подход работает, он не позволяет разработчику напрямую обращаться к элементам. Я думал, что $ how -> {1} может сохранить день, но, к сожалению, он возвращает пустое значение. – Pankucins

Смежные вопросы