Co dokładnie próbujesz osiągnąć? Z pewnością, jeśli wyjaśnisz swój prawdziwy problem, ktoś tutaj może pomóc ci znaleźć eleganckie rozwiązanie.
Mike Daniels,
3
Pytanie nie rozróżnia między jedną lub dwiema wartościami, dwiema dwiema wartościami, a leniwą oceną nowego pojęcia jedną, a następnie dwiema wartościami. Pierwszy jest trywialny z dowolnym rodzajem przepływu warunkowego. Drugi jest dozwolony w pythonie: q, r = divmod (x, y); jak również Lisp; PHP wymaga listy ($ q, $ r) = twovals (); hack, gdzie funkcja twovals () {zwróć tablicę ($ a, $ b); }. Leniwa ocena jest raczej zaawansowana i jeszcze się nie przyjęła w PHP. Ponieważ pytanie nie jest precyzyjne, zalecamy nie używanie tego wpisu jako ostatecznego odniesienia do tego tematu.
DragonLord,
5
Jeśli potrzebujesz obu wartości, zwróć je do tablicy.
Pytanie jest zduplikowane, ale z bardziej zwięzłymi odpowiedziami, dzięki czemu szybciej dojdziesz do rzeczy: Zwracanie 2 wartości z funkcji .
Gras Double
Odpowiedzi:
162
Nie ma możliwości zwrócenia 2 zmiennych. Chociaż możesz propagować tablicę i zwracać ją; utwórz warunek zwrócenia zmiennej dynamicznej itp.
Na przykład funkcja ta zwróci $var2
function wtf($blahblah =true){
$var1 ="ONe";
$var2 ="tWo";if($blahblah ===true){return $var2;}return $var1;}
W aplikacji:
echo wtf();//would echo: tWo
echo wtf("not true, this is false");//would echo: ONe
Jeśli chcesz ich obu, możesz nieco zmodyfikować funkcję
function wtf($blahblah =true){
$var1 ="ONe";
$var2 ="tWo";if($blahblah ===true){return $var2;}if($blahblah =="both"){return array($var1, $var2);}return $var1;}
echo wtf("both")[0]//would echo: ONe
echo wtf("both")[1]//would echo: tWo
list($first, $second)= wtf("both")// value of $first would be $var1, value of $second would be $var2
IMHO odpowiedź ta byłaby lepsza, gdyby pominęła pierwszą część, która omawia, jak zwrócić jedną lub inną wartość, w zależności od pewnych warunków. Jestem pewien, że 99,999 +% osób biorących udział w tej dyskusji chce wiedzieć, jak zwrócić obie wartości w tym samym czasie. Zobacz najwyżej głosowaną odpowiedź.
ToolmakerSteve
401
Technicznie nie można zwrócić więcej niż jednej wartości. Istnieje jednak wiele sposobów obejścia tego ograniczenia. Sposób, który najbardziej przypomina zwracanie wielu wartości, to listsłowo kluczowe:
function getXYZ(){return array(4,5,6);}
list($x,$y,$z)= getXYZ();// Afterwards: $x == 4 && $y == 5 && $z == 6// (This will hold for all samples unless otherwise noted)
Technicznie rzecz biorąc, zwracasz tablicę i używasz listdo przechowywania elementów tej tablicy w różnych wartościach zamiast przechowywania rzeczywistej tablicy. Korzystanie z tej techniki sprawi, że poczujesz się jak w przypadku zwracania wielu wartości.
listRozwiązaniem jest rozwiązanie raczej specyficzny php. Istnieje kilka języków o podobnych strukturach, ale więcej języków nie. Istnieje inny sposób, który jest powszechnie używany do „zwracania” wielu wartości i jest dostępny w prawie każdym języku (w taki czy inny sposób). Jednak ta metoda będzie wyglądać zupełnie inaczej, więc może być konieczne przyzwyczajenie się.
// note that I named the arguments $a, $b and $c to show that// they don't need to be named $x, $y and $zfunction getXYZ(&$a,&$b,&$c){
$a =4;
$b =5;
$c =6;}
getXYZ($x, $y, $z);
Ta technika jest również używana w niektórych funkcjach zdefiniowanych przez sam php (np. $countW str_replace , $matchesw preg_match ). Może to wydawać się zupełnie inne niż zwracanie wielu wartości, ale warto przynajmniej wiedzieć o tym.
Trzecią metodą jest użycie obiektu do przechowywania różnych potrzebnych wartości. To jest więcej pisania, więc nie jest używane tak często, jak dwie powyższe metody. Może to mieć sens, gdy używasz tego samego zestawu zmiennych w wielu miejscach (lub oczywiście pracujesz w języku, który nie obsługuje powyższych metod lub pozwala ci to zrobić bez dodatkowego pisania).
Powyższe metody podsumowują główne sposoby zwracania wielu wartości z funkcji. Istnieją jednak różne metody tych metod. Najbardziej interesujące warianty do obejrzenia, to te, w których zwracasz tablicę, po prostu dlatego, że tak wiele możesz zrobić z tablicami w PHP.
Po pierwsze, możemy po prostu zwrócić tablicę i nie traktować jej jak nic innego jak tablicę:
Najbardziej interesującą częścią powyższego kodu jest to, że kod wewnątrz funkcji jest taki sam jak w pierwszym przykładzie, który podałem; zmienił się tylko kod wywołujący funkcję. Oznacza to, że to od wywołania funkcji zależy, jak traktować wynik, który zwraca funkcja.
Php ma compactfunkcję, która pozwala robić to samo co powyżej, ale pisząc mniej kodu. (Cóż, próbka nie będzie miała mniej kodu, ale prawdopodobnie byłaby to aplikacja w prawdziwym świecie). Myślę jednak, że oszczędność na pisaniu jest minimalna i sprawia, że kod jest trudniejszy do odczytania, więc nie zrobiłbym tego sam. Niemniej jednak oto próbka:
Należy zauważyć, że chociaż compactma odpowiednik, extractktóry może być użyty w kodzie wywołującym tutaj, ale ponieważ jest to zły pomysł, aby go użyć (szczególnie w przypadku czegoś tak prostego), nie podam nawet próbki. Problem polega na tym, że wykona „magię” i utworzy dla ciebie zmienne, podczas gdy nie możesz zobaczyć, które zmienne są tworzone bez przechodzenia do innych części kodu.
Na koniec chciałbym wspomnieć, że listtak naprawdę nie gra dobrze z tablicą asocjacyjną. Następujące czynności spełnią Twoje oczekiwania:
function getXYZ(){return array('x'=>4,'y'=>5,'z'=>6);}
$array = getXYZ();
list($x, $y, $z)= getXYZ();
Jeśli użyjesz listtablicy asocjacyjnej, a ktoś inny będzie musiał zmienić kod w wywoływanej funkcji w przyszłości (co może się zdarzyć niemal w każdej sytuacji), może się nagle zepsuć, więc odradzam łączenie listz tablicami asocjacyjnymi.
To kolejna opcja, ale nie wydaje mi się, że zwraca wiele wartości, podobnie jak zwraca tablicę. To może być tylko ja. Osobiście znajdowałbym return array('x' => $x, 'y' => $y, 'z' => $z)czystsze, ale do tego stopnia, że sam bym to napisał, nie do tego stopnia, że prosiłbym innych o użycie tego formatu.
Jasper
2
Użycie List () to świetna odpowiedź na podobny problem, jaki miałem. jest to doskonały sposób sprawdzania poprawności i zwracania wielu zmiennych z powrotem do funkcji. szybkie spojrzenie na dokumenty php rzuci więcej światła na tę funkcję i być może wyjaśni ją. php.net/manual/en/function.list.php .. dzięki Jasper!
JustinP,
2
+1 za tak obszerną odpowiedź, szczególnie na tak szerokie, ogólne pytanie. Mimo to ta odpowiedź bardzo mi pomogła.
Lee Blake,
2
@Mikey Przyczyny historyczne. Ta odpowiedź została pierwotnie opublikowana na inne pytanie, które zostało usunięte, ponieważ jest dokładną kopią tego pytania (pomimo faktu, że faktycznie było starsze). Odpowiedź została przeniesiona na to pytanie później niż ostatnia wizyta osoby, która zadała to pytanie.
Jasper
73
W twoim przykładzie drugi zwrot nigdy nie nastąpi - pierwszy zwrot jest ostatnią rzeczą, którą PHP uruchomi. Jeśli chcesz zwrócić wiele wartości, zwróć tablicę:
function multiple_return(){return['this','is','a','test'];}[$first, $second, $third, $fourth]= multiple_return();
echo($first);>this
echo($fourth);> test
Destrukturyzacja to bardzo potężne narzędzie. Potrafi także niszczyć pary klucz => pary wartości:
Chciałbym, aby StackOverflow miał taką funkcję, jak „polecana odpowiedź”, nawet jeśli nie jest akceptowana do czasu utworzenia pytania, ponieważ ta odpowiedź tutaj jest dość przydatna i zaktualizowana, ale oczywiście nie na temat.
Jonatas CD,
3
@JonatasCD - nie jestem pewien, dlaczego uważasz, że ta odpowiedź jest „nie na temat”. W php 7.1 jest to najwygodniejszy sposób na tworzenie i obsługę wielu zwracanych wartości z funkcji. Tak więc w przypadku nowszych wersji php jest to lepsza odpowiedź niż pierwotnie zaakceptowana odpowiedź.
ToolmakerSteve
@ToolmakerSteve Myślę, że źle mnie zrozumiałeś. „nie na temat” tego pytania była moja sugestia, że mogę zmienić to, co zostało zaakceptowane, w oparciu o przyszłe wdrożenia. To było nic przeciwko twojej odpowiedzi;)
Jonatas CD
@JonatasCD - Ahh to wyjaśnia. (To nie jest moja odpowiedź, byłem po prostu zdziwiony.) Przynajmniej tag, który mówi „to jest bardziej aktualne niż zaakceptowana odpowiedź”. Może trzy osoby muszą się zgodzić z tym tagiem, a potem zostanie on wyróżniony. :)
ToolmakerSteve
26
W PHP 5.5 istnieje również nowa koncepcja: generatorsgdzie można uzyskać wiele wartości z funkcji:
function hasMultipleValues(){yield"value1";yield"value2";}
$values = hasMultipleValues();foreach($values as $val){// $val will first be "value1" then "value2"}
Wiem, że jestem spóźniony, ale istnieje przyjemne i proste rozwiązanie tego problemu.
Możliwe jest zwracanie wielu wartości jednocześnie za pomocą destrukcji.
function test(){return['model'=>'someValue','data'=>'someothervalue'];}
Teraz możesz tego użyć
$result = test();
extract($result);
extracttworzy zmienną dla każdego elementu w tablicy, nazwaną na cześć tego elementu. Możesz teraz uzyskać dostęp $modeli$data
Nie jest możliwe, aby zawierały dwie instrukcje return. Nie generuje to jednak błędu, ale po wywołaniu funkcji otrzymasz tylko pierwszą wartość instrukcji return. Możemy użyć return tablicy, aby uzyskać w zamian wiele wartości. Na przykład:
function test($testvar){// do something//just assigning a string for example, we can assign any operation result
$var1 ="result1";
$var2 ="result2";return array('value1'=> $var1,'value2'=> $var2);}
Jednak, jak zakładałeś, ta wartość może być tablicą.
Więc na pewno możesz zrobić coś takiego:
<?PHP
function myfunc($a,$b){return array('foo'=>$a,'bar'=>$b);}
print_r(myfunc('baz','bork'));
To powiedziawszy, warto poświęcić chwilę i zastanowić się nad tym, co próbujesz rozwiązać. Chociaż zwracanie złożonej wartości wynikowej (takiej jak tablica lub obiekt) jest całkowicie poprawne, jeśli myślisz, że „chcę zwrócić dwie wartości”, być może projektujesz źle. Bez bardziej szczegółowego pytania trudno jest powiedzieć, ale nigdy nie boli zatrzymać się i pomyśleć dwa razy.
Odpowiedź, która jest podana powyżej zielonym ptaszkiem, jest właściwie nieprawidłowa. Możesz zwrócić wiele wartości w PHP, jeśli zwrócisz tablicę. Zobacz następujący kod na przykład:
<?php
function small_numbers(){return array (0,1,2);}
list ($zero, $one, $two)= small_numbers();
Ta odpowiedź odnosi się do przykładu kodu w pytaniu, więc nie jest ściśle niepoprawna. Ale pytanie jest dwuznaczne. Celem jest prawdopodobnie zwrócenie dwóch wartości z jednego wywołania funkcji.
Peter Mortensen,
3
Funkcje w PHP mogą zwracać tylko jedną zmienną. możesz użyć zmiennych o zasięgu globalnym, możesz zwrócić tablicę lub możesz przekazać zmienną przez odwołanie do funkcji, a następnie zmienić wartość, ale wszystko to zmniejszy czytelność twojego kodu. Proponuję zajrzeć do klas.
Pomyślałem, że rozwinę kilka odpowiedzi z góry ....
class nameCheck{public $name;publicfunction __construct(){
$this->name = $name;}function firstName(){// If a name has been entered..if(!empty($this->name)){
$name = $this->name;
$errflag =false;// Return a array with both the name and errflagreturn array($name, $errflag);// If its empty..}elseif(empty($this->name)){
$errmsg ='Please enter a name.';
$errflag =true;// Return both the Error message and Flagreturn array($errmsg, $errflag);}}}if($_POST['submit']){
$a =new nameCheck;
$a->name = $_POST['name'];// Assign a list of variables from the firstName function
list($name, $err)= $a->firstName();// Display the values..
echo 'Name: '. $name;
echo 'Errflag: '. $err;}?><form method="post" action="<?php $_SERVER['PHP_SELF']; ?>"><input name="name"/><input type="submit" name="submit"value="submit"/></form>
To da ci pole wejściowe i przycisk wysyłania po przesłaniu, jeśli pole wprowadzania nazwy jest puste, zwróci flagę błędu i komunikat. Jeśli pole nazwy ma wartość, zwróci wartość / nazwę i flagę błędu 0 dla false = brak błędów. Mam nadzieję że to pomoże!
Zawsze możesz zwrócić tylko jedną zmienną, która może być tablicą. Ale możesz zmieniać zmienne globalne z wnętrza funkcji. To przez większość czasu niezbyt dobry styl, ale działa. W klasach zwykle zmieniasz zmienne klasowe z funkcji, nie zwracając ich.
Odpowiedź brzmi nie. Kiedy parser osiągnie pierwszą instrukcję return, skieruje sterowanie z powrotem do funkcji wywołującej - druga instrukcja return nigdy nie zostanie wykonana.
Czy byłeś trzeźwy, kiedy to pisałeś? Na pierwszy rzut oka potrafię dostrzec 2 błędy. 1) Używasz $thissłowa kluczowego, ale nie wspomniano o żadnej klasie ani obiekcie. 2) Jeśli $returned_valuesecho $returned_values['var1'];
zwróciłeś
naprawiono problem.
Gihan De Silva
0
<?php
function foo(){
$you =5;
$me =10;return $you;return $me;}
echo foo();//output is just 5 alone so we cant get second one it only retuns first one so better go with arrayfunction goo(){
$you =5;
$me =10;return $you_and_me = array($you,$me);}
var_dump(goo());// var_dump result is array(2) { [0]=> int(5) [1]=> int(10) } i think thats fine enough?>
Odp. „Uzyskaj wartości dwóch lub więcej zmiennych” : Czy masz na myśli „zwróć wartości dwóch lub więcej zmiennych” ?
Peter Mortensen,
0
Czy PHP nadal używa „parametrów wyjściowych”? Jeśli tak, możesz użyć składni, aby zmodyfikować jeden lub więcej parametrów wchodzących w skład funkcji. Będziesz wtedy mógł używać zmodyfikowanej zmiennej po powrocie funkcji.
publicfunction selectAllUsersByRole($userRole, $selector){
$this->userRole = $userLevel;
$this->selector = $selector;
$sql ="SELECT * FROM users WHERE role <= ? AND del_stat = 0";
$stm = $this->connect()->prepare($sql);// Connect function in Dbh connect to database file
$stm->execute([$this->userRole]);// This is PHP 7. Use array($this->userRole) for PHP 5
$usersIdArray = array();
$usersFNameArray = array();
$usersLNameArray = array();if($stm->rowCount()){while($row = $stm->fetch()){
array_push($usersIdArray, $row['id']);
array_push($usersFNameArray, $row['f_name']);
array_push($usersLNameArray, $row['l_name']);// You can return only $row['id'] or f_name or ...// I used the array because it's most used.}}if($this->selector ==1){return $usersIdArray;}elseif($this->selector ==2){return $usersFNameArray;}elseif($this->selector ==3){return $usersLNameArray;}}
Miałem podobny problem - więc rozejrzałem się i trochę googlowałem (znajdując ten wątek). Po 5 minutach prób i błędów odkryłem, że możesz po prostu użyć „ORAZ”, aby zwrócić dwie (może więcej - jeszcze nie przetestowane) w jednej linii zwrotu.
Mój kod:
function get_id(){global $b_id, $f_id;// stuff happensreturn $b_id AND $f_id;}//later in the code:
get_id();
var_dump($b_id);
var_dump($f_id);// tested output by var_dump
to działa. Mam obie wartości, które spodziewałem się uzyskać / otrzymać. Mam nadzieję, że mógłbym pomóc każdemu czytającemu ten wątek :)
To nie jest poprawne. „AND” jest po prostu operatorem logicznym, dlatego twoja funkcja zwraca jedną wartość logiczną. Jedynym powodem, dla którego wydaje się działać, jest to, że deklarujesz $ b_id i $ f_id jako zmienne globalne. Usuń „AND”, a także instrukcję return, a zobaczysz, że wyniki pozostają takie same.
Matt Styles
jest to bardzo mylące, ponieważ zadeklarowałeś $ b_id, a $ f_id globalny, dlatego dostępny z dowolnego kontekstu.
Odpowiedzi:
Nie ma możliwości zwrócenia 2 zmiennych. Chociaż możesz propagować tablicę i zwracać ją; utwórz warunek zwrócenia zmiennej dynamicznej itp.
Na przykład funkcja ta zwróci
$var2
W aplikacji:
Jeśli chcesz ich obu, możesz nieco zmodyfikować funkcję
źródło
wantarray()
Technicznie nie można zwrócić więcej niż jednej wartości. Istnieje jednak wiele sposobów obejścia tego ograniczenia. Sposób, który najbardziej przypomina zwracanie wielu wartości, to
list
słowo kluczowe:Technicznie rzecz biorąc, zwracasz tablicę i używasz
list
do przechowywania elementów tej tablicy w różnych wartościach zamiast przechowywania rzeczywistej tablicy. Korzystanie z tej techniki sprawi, że poczujesz się jak w przypadku zwracania wielu wartości.list
Rozwiązaniem jest rozwiązanie raczej specyficzny php. Istnieje kilka języków o podobnych strukturach, ale więcej języków nie. Istnieje inny sposób, który jest powszechnie używany do „zwracania” wielu wartości i jest dostępny w prawie każdym języku (w taki czy inny sposób). Jednak ta metoda będzie wyglądać zupełnie inaczej, więc może być konieczne przyzwyczajenie się.Ta technika jest również używana w niektórych funkcjach zdefiniowanych przez sam php (np.
$count
W str_replace ,$matches
w preg_match ). Może to wydawać się zupełnie inne niż zwracanie wielu wartości, ale warto przynajmniej wiedzieć o tym.Trzecią metodą jest użycie obiektu do przechowywania różnych potrzebnych wartości. To jest więcej pisania, więc nie jest używane tak często, jak dwie powyższe metody. Może to mieć sens, gdy używasz tego samego zestawu zmiennych w wielu miejscach (lub oczywiście pracujesz w języku, który nie obsługuje powyższych metod lub pozwala ci to zrobić bez dodatkowego pisania).
Powyższe metody podsumowują główne sposoby zwracania wielu wartości z funkcji. Istnieją jednak różne metody tych metod. Najbardziej interesujące warianty do obejrzenia, to te, w których zwracasz tablicę, po prostu dlatego, że tak wiele możesz zrobić z tablicami w PHP.
Po pierwsze, możemy po prostu zwrócić tablicę i nie traktować jej jak nic innego jak tablicę:
Najbardziej interesującą częścią powyższego kodu jest to, że kod wewnątrz funkcji jest taki sam jak w pierwszym przykładzie, który podałem; zmienił się tylko kod wywołujący funkcję. Oznacza to, że to od wywołania funkcji zależy, jak traktować wynik, który zwraca funkcja.
Alternatywnie można użyć tablicy asocjacyjnej:
Php ma
compact
funkcję, która pozwala robić to samo co powyżej, ale pisząc mniej kodu. (Cóż, próbka nie będzie miała mniej kodu, ale prawdopodobnie byłaby to aplikacja w prawdziwym świecie). Myślę jednak, że oszczędność na pisaniu jest minimalna i sprawia, że kod jest trudniejszy do odczytania, więc nie zrobiłbym tego sam. Niemniej jednak oto próbka:Należy zauważyć, że chociaż
compact
ma odpowiednik,extract
który może być użyty w kodzie wywołującym tutaj, ale ponieważ jest to zły pomysł, aby go użyć (szczególnie w przypadku czegoś tak prostego), nie podam nawet próbki. Problem polega na tym, że wykona „magię” i utworzy dla ciebie zmienne, podczas gdy nie możesz zobaczyć, które zmienne są tworzone bez przechodzenia do innych części kodu.Na koniec chciałbym wspomnieć, że
list
tak naprawdę nie gra dobrze z tablicą asocjacyjną. Następujące czynności spełnią Twoje oczekiwania:Jednak następujące czynności zrobią coś innego:
Jeśli użyjesz
list
tablicy asocjacyjnej, a ktoś inny będzie musiał zmienić kod w wywoływanej funkcji w przyszłości (co może się zdarzyć niemal w każdej sytuacji), może się nagle zepsuć, więc odradzam łączenielist
z tablicami asocjacyjnymi.źródło
return array('x' => $x, 'y' => $y, 'z' => $z)
czystsze, ale do tego stopnia, że sam bym to napisał, nie do tego stopnia, że prosiłbym innych o użycie tego formatu.W twoim przykładzie drugi zwrot nigdy nie nastąpi - pierwszy zwrot jest ostatnią rzeczą, którą PHP uruchomi. Jeśli chcesz zwrócić wiele wartości, zwróć tablicę:
źródło
list($result_1, result_2) = test($testvar);
result_2
czy$result_2
?$result_2
Od PHP 7.1 mamy odpowiednią destrukcję list. W ten sposób możesz robić takie rzeczy:
W funkcji wyglądałoby to tak:
Destrukturyzacja to bardzo potężne narzędzie. Potrafi także niszczyć pary klucz => pary wartości:
Spójrz na nową stronę funkcji dla PHP 7.1:
Nowe funkcje
źródło
W PHP 5.5 istnieje również nowa koncepcja:
generators
gdzie można uzyskać wiele wartości z funkcji:źródło
Lub możesz przekazać przez odniesienie:
To by dało wynik
źródło
Wiem, że jestem spóźniony, ale istnieje przyjemne i proste rozwiązanie tego problemu.
Możliwe jest zwracanie wielu wartości jednocześnie za pomocą destrukcji.
Teraz możesz tego użyć
extract
tworzy zmienną dla każdego elementu w tablicy, nazwaną na cześć tego elementu. Możesz teraz uzyskać dostęp$model
i$data
źródło
model
idata
) nie istniały już jako zmienne. Jeśli tak, użyjprefix
parametru,extract
aby uniknąć konfliktów.Możesz zwrócić wiele tablic i skalarów z funkcji
źródło
Nie jest możliwe, aby zawierały dwie instrukcje return. Nie generuje to jednak błędu, ale po wywołaniu funkcji otrzymasz tylko pierwszą wartość instrukcji return. Możemy użyć return tablicy, aby uzyskać w zamian wiele wartości. Na przykład:
źródło
Funkcje z definicji zwracają tylko jedną wartość.
Jednak, jak zakładałeś, ta wartość może być tablicą.
Więc na pewno możesz zrobić coś takiego:
To powiedziawszy, warto poświęcić chwilę i zastanowić się nad tym, co próbujesz rozwiązać. Chociaż zwracanie złożonej wartości wynikowej (takiej jak tablica lub obiekt) jest całkowicie poprawne, jeśli myślisz, że „chcę zwrócić dwie wartości”, być może projektujesz źle. Bez bardziej szczegółowego pytania trudno jest powiedzieć, ale nigdy nie boli zatrzymać się i pomyśleć dwa razy.
źródło
Najlepszą praktyką jest umieszczenie zwracanych zmiennych w tablicy, a następnie użycie ich
list()
do przypisania wartości tablicy do zmiennych.źródło
Tak, możesz użyć obiektu :-)
Ale najprostszym sposobem jest zwrócenie tablicy:
źródło
Dla PHP 7.1 <= możesz użyć nowej składni (zamiast funkcji listy ):
Dla mnie jest OK, jeśli chcesz zwrócić 2-3 zmienne, w przeciwnym razie powinieneś użyć obiektu o pożądanych właściwościach.
źródło
Zaimplementowałem tak dla funkcji PHP z wieloma wartościami zwracanymi. bądź miły ze swoim kodem. Dziękuję Ci.
źródło
Odpowiedź, która jest podana powyżej zielonym ptaszkiem, jest właściwie nieprawidłowa. Możesz zwrócić wiele wartości w PHP, jeśli zwrócisz tablicę. Zobacz następujący kod na przykład:
Ten kod jest w rzeczywistości kopiowany z następującej strony na stronie PHP: http://php.net/manual/en/functions.returning-values.php Sam również użyłem tego samego kodu, więc mogę to potwierdzić jest dobre i działa.
źródło
Funkcje w PHP mogą zwracać tylko jedną zmienną. możesz użyć zmiennych o zasięgu globalnym, możesz zwrócić tablicę lub możesz przekazać zmienną przez odwołanie do funkcji, a następnie zmienić wartość, ale wszystko to zmniejszy czytelność twojego kodu. Proponuję zajrzeć do klas.
źródło
Pomyślałem, że rozwinę kilka odpowiedzi z góry ....
To da ci pole wejściowe i przycisk wysyłania po przesłaniu, jeśli pole wprowadzania nazwy jest puste, zwróci flagę błędu i komunikat. Jeśli pole nazwy ma wartość, zwróci wartość / nazwę i flagę błędu 0 dla false = brak błędów. Mam nadzieję że to pomoże!
źródło
Niektórzy wolą zwracać wiele wartości jako obiekt:
I nazwij to tak:
Lub:
źródło
Tak i nie. Nie możesz zwrócić więcej niż jednej zmiennej / obiektu, ale jak sugerujesz, możesz umieścić je w tablicy i zwrócić.
Nie ma ograniczeń co do zagnieżdżania tablic, więc możesz po prostu spakować je w ten sposób, aby zwrócić.
źródło
Zawsze możesz zwrócić tylko jedną zmienną, która może być tablicą. Ale możesz zmieniać zmienne globalne z wnętrza funkcji. To przez większość czasu niezbyt dobry styl, ale działa. W klasach zwykle zmieniasz zmienne klasowe z funkcji, nie zwracając ich.
źródło
Odpowiedź brzmi nie. Kiedy parser osiągnie pierwszą instrukcję return, skieruje sterowanie z powrotem do funkcji wywołującej - druga instrukcja return nigdy nie zostanie wykonana.
źródło
Dodaj wszystkie zmienne do tablicy, a następnie w końcu zwróć
array
.I wtedy
źródło
Myślę, że Eliego wyjaśnił odpowiedź jasno. Ale jeśli chcesz zwrócić obie wartości, umieść je w tablicy i zwróć.
// aby uzyskać dostęp do zwracanych wartości
źródło
$this
słowa kluczowego, ale nie wspomniano o żadnej klasie ani obiekcie. 2) Jeśli$returned_values
echo $returned_values['var1'];
źródło
Języki, które umożliwiają wielokrotne zwroty, zwykle po prostu przekształcają wiele wartości w strukturę danych.
Na przykład w Pythonie możesz zwrócić wiele wartości. Jednak w rzeczywistości są one zwracane jako jedna krotka.
Możesz więc zwrócić wiele wartości w PHP, po prostu tworząc prostą tablicę i zwracając ją.
źródło
Możesz uzyskać wartości dwóch lub więcej zmiennych, ustawiając je przez odniesienie:
Wynik:
źródło
Czy PHP nadal używa „parametrów wyjściowych”? Jeśli tak, możesz użyć składni, aby zmodyfikować jeden lub więcej parametrów wchodzących w skład funkcji. Będziesz wtedy mógł używać zmodyfikowanej zmiennej po powrocie funkcji.
źródło
To najłatwiejszy sposób na zrobienie tego:
Jak możemy wywołać tę funkcję?
Otóż to. Bardzo łatwe.
źródło
To nie jest dobry sposób, ale myślę, że możemy ustawić dwie zmienne w funkcji jednocześnie.
źródło
Miałem podobny problem - więc rozejrzałem się i trochę googlowałem (znajdując ten wątek). Po 5 minutach prób i błędów odkryłem, że możesz po prostu użyć „ORAZ”, aby zwrócić dwie (może więcej - jeszcze nie przetestowane) w jednej linii zwrotu.
Mój kod:
to działa. Mam obie wartości, które spodziewałem się uzyskać / otrzymać. Mam nadzieję, że mógłbym pomóc każdemu czytającemu ten wątek :)
źródło