2011-12-27 3 views
1

У меня есть следующие функции:Как мне конденсировать это утверждение?

<?php 
class Test{ 
function myFunction(){ 
    return array('first','second','third'); 
} 
} 
?> 

И я могу распечатать элементы массива:

$var=new Test(); 
$varr=$var->myFunction(); 
print($varr[1]); 

Есть ли способ, чтобы уплотнить это утверждение, так что я не должен назначать $ var-> myFunction() ко второй переменной (в данном случае $ varr)?

+0

Что делать, если вы передаете индекс массива в 'myFunction()' и вернете ли это значение? –

+0

Вопросник хотел узнать о чем-то в ООП, а не о базовом программировании. –

ответ

2

PHP не поддерживает это очень хорошо (начиная с PHP 5.3) как Tim Cooper already highlighted. Поэтому вам нужно подумать дважды, если вам действительно нужно это уплотнить.

Вы можете делать вещи довольно динамично, например. путь возвращать ArrayObject вместо массива:

class Test 
{ 
    function myFunction() 
    { 
     return new ArrayObject(array('first','second','third'), 3); 
    } 
} 

$var = new Test(); 
print($var->myFunction()->{1}); 

Каких украсят данные массива с некоторыми дополнительными методами и способами доступа. Другим способом было бы для функций без параметров, чтобы обмануть PHP парсер и предложить свойство вместо функции динамически:

class Test 
{ 
    function myFunction() 
    { 
     return array('first','second','third'); 
    } 
    public function __get($name) 
    { 
     return $this->$name(); 
    } 
} 

$var = new Test(); 
print($var->myFunction[1]); 

Но я не знаю, если это действительно полезно в приложении.

Так что проверьте свою мотивацию, почему вы хотите скомбинировать код, а затем самостоятельно решить.

2

В PHP 5.4 вы сможете сделать:

$varr=$var->myFunction()[1]; 

До тех пор, используя list не может помочь:

list(,$varr) = $var->myFunction(); 

Другим решением является модифицировать свой метод, чтобы принять дополнительный индекс элемента для возврата:

function myFunction($index = null){ 
    $arr = array('first','second','third'); 
    return $index == null ? $arr : $arr[$index]; 
} 
$varr = $var->myFunction(1); 
+0

hmmmm. Я придерживаюсь v. 5.2. Похоже, мне придется подождать, пока не выйдет 5,4 стабильный ... облом! –

+0

@ user522962: Я просто добавил еще одно возможное решение для моего ответа –

+0

Любые причины для downvote? –

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