2015-02-03 2 views
0

У меня есть метод в моем классе, который я хочу, чтобы вернуть более чем одно значение:Возвращаясь несколько значений из функции/метода

public function lockFields($lockFieldsDBs, $lockValueConstant) { 
    if ($lockFieldsDBs == $lockValueConstant) { 
     $lockFieldValue = 'readonly="readonly"'; 
     $lockImage  = 'image_url_goes_here'; 
    } 
    else { 
     $lockFieldValue = null; 
     $lockImage = null; 
    } 

    return $lockField; 
    return $lockImage; 
} 


........... 


$lockFieldsDBs = 'OK'; 
$lockValueConstant = 'OK'; 

$formHandler->lockFields($lockFieldsDBs, $lockValue); 

При попытке распечатать значение, как это: echo $lockImage;, я получаю Undefined variable: lockImage.

Почему не возвращается значение?

+3

Я предполагаю, что вы не можете вернуться множественными переменные – Phate01

+0

пункт 1: вы пропускаете что-либо, если условие истинно, точка 2: вы не можете вернуть 2 переменные, если вам нужны оба, вернуть массив – donald123

+3

Возврат находится за пределами if(), это просто плохое форматирование. – Jessica

ответ

4

Вы можете вернуть два или более значений из функции с помощью list() языка построения:

public function lockFields($lockFieldsDBs, $lockValueConstant) { 
    if($lockFieldsDBs == $lockValueConstant){ 
     $lockFieldValue = 'readonly="readonly"'; 
     $lockImage = 'image_url_goes_here'; 
    } 
    else { 
     $lockFieldValue = null; 
     $lockImage = null; 
    } 

    return [$lockField, $lockImage]; 
} 



list($lockField, $lockImage) = $formHandler->lockFields($lockFieldsDBs, $lockValue); 
+2

есть точка для использование списка :) – Dave

+0

Привет, должна ли строка списка в классе или когда я вызываю класс. Спасибо. – ZYZ123ABC242526

+0

@ ZYZ123ABC242526 Вне класса, прямо там, где вы вызываете метод. – silkfire

0

Вы можете вернуть только одну переменную в функции PHP. Если вам нужно вернуть два, вам нужно использовать массив (или объект).

public function lockFields($lockFieldsDBs,$lockValueConstant) 
{ 
    if($lockFieldsDBs == $lockValueConstant){ 
     $lockFieldValue = 'readonly="readonly"'; 
     $lockImage = 'image_url_goes_here'; 
    } else { 
     $lockFieldValue = null; 
     $lockImage = null; 
    } 
    return ['lockField'=>$lockField, 'lockImage'=>$lockImage]; 
} 
+0

Или 'yield', но это немного усложняется;) –

0

Вы не можете вернуть две переменные в функции PHP:

return $lockField; 
return $lockImage; 

Вы можете поместить их в массив:

return array($lockField, $lockImage); 

использовать его:

$response = $formHandler->lockFields($lockFieldsDB,$lockValue) 
echo $response[0]; // this is $lockField in your function 
echo $response[1]; // this is $lockImage in your function 
0

$ lockImage - это переменная внутри метода. Почему, по вашему мнению, он будет доступен во всем мире? Должно быть ясным:

public function lockFields($lockFieldsDBs,$lockValueConstant){ 
    $lockImage = "some value"; 
    return $lockImage; 
} 

$formHandler->lockFields($lockFieldsDB,$lockValue); 
echo $lockImage; // variable $lockImage does not exists 

не будет работать. Это должно быть:

public function lockFields($lockFieldsDBs,$lockValueConstant){ 
    $lockImage = "some value"; 
    return $lockImage; 
} 

$lockImage = $formHandler->lockFields($lockFieldsDB,$lockValue); 
echo $lockImage; // "some value" 

Другие ответы указывают, что вам необходимо правильно вернуть значение. Но я думаю, что вы также не получите возврат правильно.

1

Проблема в том, вы возвращаете более одной переменной формы вы действуете. Вы не можете. Вы должны присвоить массив или список, чтобы сделать эту работу, чтобы сделать это можно использовать либо из этих кодов до окончания вашей функции:

return ['lockField'=>$lockField, 'lockImage'=>$lockImage]; 

или

return array($lockField, $lockImage); 
Смежные вопросы