Bir işlevden birden çok dönüş


198

Bunun gibi iki dönüşlü bir fonksiyona sahip olmak mümkün müdür:

function test($testvar)
{
  // Do something

  return $var1;
  return $var2;
}

Öyleyse, her dönüşü ayrı olarak nasıl alabilirim?


1
Tam olarak neyi başarmak istiyorsun? Elbette gerçek sorununuzu açıkladıysanız, buradaki biri zarif bir çözüme ulaşmanıza yardımcı olabilir.
Mike Daniels

3
Soru, iki değerden ikisi / ikisi, ikisi de ikisi veya yeni konsept tembel değerlendirme arasında, muhtemelen iki değerden biri veya ikisi arasında ayrım yapmaz. Birincisi, her türlü koşullu akışla önemsizdir. İkincisine python'da izin verilir: q, r = divmod (x, y); ayrıca Lisp; PHP listeyi gerektirir ($ q, $ r) = twovals (); kesmek, burada fonksiyon twovals () {dönüş dizisi ($ a, $ b); }. Tembel değerlendirme oldukça ileridir ve henüz PHP'de yakalanmamıştır. Soru kesin olmadığından, bu girdiyi bu konu için kesin referans olarak kullanmamanızı öneririz.
DragonLord

5
Her iki değere de ihtiyacınız varsa, bunları bir diziye döndürün.
Bhargav Nanekalva

2
PHP 7.1'de @DragonLord, kısa liste sözdizimini
Janus Troelsen

1
Yinelenen bir soru var, ancak daha kısa cevaplarla, bu noktaya gelmeniz daha hızlı olacaktır: Bir fonksiyondan 2 değer döndürme .
Gras Double

Yanıtlar:


161

2 değişken döndürmenin bir yolu yoktur. Olsa da, olabilir bir dizi yaymak ve geri; Dinamik bir değişken döndürmek için bir koşul oluşturun.

Örneğin, bu işlev geri dönecektir $var2

function wtf($blahblah = true) {
    $var1 = "ONe";
    $var2 = "tWo";

    if($blahblah === true) {
      return $var2;
    }
    return $var1;
}

Uygulamada:

echo wtf();
//would echo: tWo
echo wtf("not true, this is false");
//would echo: ONe

Her ikisini de istiyorsanız, işlevi biraz değiştirebilirsiniz

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

15
Sadece PHP'nin Perl's'i olsaydıwantarray()
Marc B

7
IMHO bu cevaba , bazı koşullara bağlı olarak bir veya farklı bir değerin nasıl iade edileceğini tartışan ilk bölümü atlarsa geliştirilecektir . Bu tartışmaya gelenlerin% 99,999'u + her iki değerin aynı anda nasıl geri döneceğini bilmek istediğinden eminim . En yüksek oyu alan cevaba bakınız.
ToolmakerSteve

403

Teknik olarak, birden fazla değer döndüremezsiniz. Ancak, bu sınırlamaya geçici bir çözüm bulmak için birden çok yol vardır. Birden çok değer döndürmek gibi davranma biçimi listanahtar kelimedir:

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)

Teknik olarak, bir dizi döndürüyorsunuz ve listbu dizinin öğelerini gerçek diziyi saklamak yerine farklı değerlerde saklamak için kullanıyorsunuz. Bu tekniği kullanmak, en çok birden çok değer döndürmek gibi hissettirecektir .

listSolüsyon yerine php özgü biridir. Benzer yapılara sahip birkaç dil vardır, ancak daha fazla dil yoktur. Birden çok değeri "döndürmek" için yaygın olarak kullanılan başka bir yol vardır ve hemen hemen her dilde (bir şekilde) kullanılabilir. Ancak, bu yöntem oldukça farklı görünecektir, bu yüzden alışmak gerekebilir.

// note that I named the arguments $a, $b and $c to show that
// they don't need to be named $x, $y and $z
function getXYZ(&$a, &$b, &$c)
{
    $a = 4;
    $b = 5;
    $c = 6; 
}

getXYZ($x, $y, $z);

Bu teknik aynı zamanda (örneğin, php kendisi tarafından belirlenen bazı fonksiyonları kullanılır $countolarak str_replace , $matchesiçinde preg_match'in ). Bu, birden fazla değer döndürmekten oldukça farklı olabilir, ancak en azından bilmeye değer.

Üçüncü yöntem, ihtiyacınız olan farklı değerleri tutmak için bir nesne kullanmaktır. Bu daha fazla yazımdır, bu nedenle yukarıdaki iki yöntem kadar sık ​​kullanılmaz. Bununla birlikte, bir dizi yerde aynı değişken kümesini kullanırken (veya elbette, yukarıdaki yöntemleri desteklemeyen veya ekstra yazmadan bunu yapmanıza izin veren bir dilde çalışırken) bunu kullanmak mantıklı olabilir.

class MyXYZ
{
    public $x;
    public $y;
    public $z;
}

function getXYZ()
{
    $out = new MyXYZ();

    $out->x = 4;
    $out->y = 5;
    $out->z = 6;

    return $out;
}

$xyz = getXYZ();

$x = $xyz->x;
$y = $xyz->y;
$z = $xyz->z;

Yukarıdaki yöntemler, bir işlevden birden çok değer döndürmenin ana yollarını özetler. Ancak, bu yöntemlerde farklılıklar vardır. Bakılması gereken en ilginç varyasyonlar, aslında bir dizi döndürdüğünüzdür, çünkü PHP'de dizilerle yapabileceğiniz çok şey vardır.

İlk olarak, bir diziyi döndürüp diziden başka bir şey olarak değerlendiremeyiz:

function getXYZ()
{
    return array(1,2,3);
}

$array = getXYZ();

$x = $array[1];
$y = $array[2];
$z = $array[3];

Yukarıdaki kodla ilgili en ilginç kısım, fonksiyonun içindeki kodun sağladığım ilk örnekte olduğu gibidir; sadece işlevi çağıran kod değişti. Bu, işlevin döndürdüğü sonucun nasıl ele alınacağını işleve çağıran kişiye bağlıdır.

Alternatif olarak, ilişkilendirilebilir bir dizi kullanılabilir:

function getXYZ()
{
    return array('x' => 4,
                 'y' => 5,
                 'z' => 6);
}

$array = getXYZ();

$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

Php compactyukarıdaki ile aynı yapmanızı sağlar ancak daha az kod yazarken işlevi var. (Peki, örnek daha az kod olmayacak, ama gerçek bir dünya uygulaması muhtemelen olurdu.) Ancak, yazarak tasarruf miktarı minimum olduğunu düşünüyorum ve kodu okumak zorlaştırır, bu yüzden kendim yapmazdım. Yine de, bir örnek:

function getXYZ()
{
    $x = 4;
    $y = 5;
    $z = 6;

    return compact('x', 'y', 'z');
}

$array = getXYZ();

$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

Bu unutulmamalıdır ki sırasında compactbir meslektaşı var extractburada arama kodu kullanılabileceği, ancak (özellikle bu kadar basit olarak bir şey için) kullanmak için kötü bir fikir beri Hatta bunun için bir örnek vermek olmaz. Sorun, kodun diğer bölümlerine gitmeden hangi değişkenlerin oluşturulduğunu göremezken, "sihirli" yapacak ve sizin için değişkenler yaratacaktır.

Son olarak, söz etmek istiyorum listgelmez gerçekten ilişkisel dizi ile iyi oynamak. Aşağıdakiler beklediğinizi yapacak:

function getXYZ()
{
    return array('x' => 4,
                 'y' => 5,
                 'z' => 6);
}

$array = getXYZ();

list($x, $y, $z) = getXYZ();

Ancak, aşağıdakiler farklı bir şey yapacaktır:

function getXYZ()
{
    return array('x' => 4,
                 'z' => 6,
                 'y' => 5);
}

$array = getXYZ();

list($x, $y, $z) = getXYZ();

// Pay attention: $y == 6 && $z == 5

listİlişkilendirilebilir bir dizi ile kullandıysanız ve başka biri gelecekte çağrılan işlevdeki kodu değiştirmek zorunda kalırsa (ki bu hemen hemen her durumda olabilir) aniden kırılabilir, bu yüzden listilişkilendirilebilir dizilerle birleşmeye karşı öneriyorum .


2
Ayrıca: dönüş kompakt ('var1', 'var2', 'var3');
bjudson

1
Bu başka bir seçenek, ama bana bir dizi döndürmek gibi birden fazla değer döndürmek gibi gelmiyor. Yine de bu ben olabilirim. Şahsen daha return array('x' => $x, 'y' => $y, 'z' => $z)temiz bulurdum , ama kendim yazacağım noktaya, başkalarından bu formatı kullanmasını isteyeceğim noktaya değil.
Jasper

2
List () kullanmak, yaşadığım simüler bir soruna harika bir cevap. bu, birden fazla değişkeni doğrulamak ve bir işleve geri döndürmek için mükemmel bir yoldur. php belgelerine hızlı bir bakış bu işlevi daha fazla ışık tutacak ve belki de daha açık hale getirecektir. php.net/manual/tr/function.list.php .. teşekkürler Jasper!
JustinP

2
Bu kadar kapsamlı bir cevap için +1, özellikle de bu kadar geniş ve genel bir soruya. Buna rağmen, bu cevap bana çok yardımcı oldu.
Lee Blake

2
@Mikey Tarihsel nedenler. Bu cevap aslında farklı bir soru üzerine yayınlanmıştır, bu soru bunun tam bir kopyası olduğu için silinmiştir (aslında daha eski olmasına rağmen). Cevap, bu soruyu soran kişinin son ziyaretinden sonra bu soruya taşındı.
Jasper

73

Örneğinizde, ikinci getiri asla olmayacaktır - ilk getiri PHP'nin çalışacağı son şeydir. Birden fazla değer döndürmeniz gerekiyorsa, bir dizi döndürün:

function test($testvar) {

    return array($var1, $var2);
}

$result = test($testvar);
echo $result[0]; // $var1
echo $result[1]; // $var2

18
Şunu da yapabilirsiniz:list($result_1, result_2) = test($testvar);
Tim Cooper

@Tim Cooper: result_2veya $result_2?
Peter Mortensen

Peter $result_2
Cooper

47

PHP 7.1'den beri listeler için uygun yıkımımız var . Böylece böyle şeyler yapabilirsiniz:

$test = [1, 2, 3, 4];
[$a, $b, $c, $d] = $test;
echo($a);
> 1
echo($d);
> 4

Bir işlevde bu şöyle görünecektir:

function multiple_return() {
    return ['this', 'is', 'a', 'test'];
}

[$first, $second, $third, $fourth] = multiple_return();
echo($first);
> this
echo($fourth);
> test

Yıkım çok güçlü bir araçtır. Anahtar => değer çiftlerini de yok edebilir:

["a" => $a, "b" => $b, "c" => $c] = ["a" => 1, "b" => 2, "c" => 3];

PHP 7.1 için yeni özellik sayfasına göz atın:

Yeni özellikler


5
İsterseniz StackOverflow 'özellikli cevap' gibi bir özellik olmasını isterdim bile soru oluşturma zamanında kabul edilmez çünkü burada bu cevap oldukça yararlı ve güncellenmiş, ama elbette konu dışı.
Jonatas CD

3
@JonatasCD - bu cevabın neden "konu dışı" olduğunu söylediğinden emin değilim. Php 7.1 yılında ise oluşturmak ve çeşitli bir görevden dönen değerleri işlemek için en uygun yol. Yani yeni php sürümleri için, orijinal kabul edilen cevaba üstün bir cevap.
ToolmakerSteve

Sanırım beni yanlış anladın. "konu dışı" sorusu, gelecekteki uygulamalara dayanarak kabul edilen sorunun neyin değiştirilebileceğine dair önerimdi. Cevabınıza karşı hiçbir şey yoktu;)
Jonatas CD

@JonatasCD - Ahh bunu açıklıyor. (Benim cevabım değil, sadece şaşkındım.) En azından "bu, kabul edilen cevaptan daha güncel" diyen bir etiket Belki de üç kişi bu etiketle hemfikir olmalı ve sonra öne çıkacak. :)
ToolmakerSteve

26

PHP 5.5'te yeni bir kavram da vardır: generatorsburada bir işlevden birden fazla değer verebilirsiniz:

function hasMultipleValues() {
    yield "value1";
    yield "value2";
}

$values = hasMultipleValues();
foreach ($values as $val) {
    // $val will first be "value1" then "value2"
}

16

Veya referans ile geçebilirsiniz:

function byRef($x, &$a, &$b)
{
    $a = 10 * $x;
    $b = 100 * $x;
}

$a = 0;
$b = 0;

byRef(10, $a, $b);

echo $a . "\n";
echo $b;

Bu çıktı

100
1000

9

Oldukça geç kaldığımı biliyorum, ama bu problem için güzel ve basit bir çözüm var.
Yıkımı kullanarak aynı anda birden fazla değer döndürmek mümkündür.

function test()
{
    return [ 'model' => 'someValue' , 'data' => 'someothervalue'];
}

Şimdi bunu kullanabilirsiniz

$result = test();
extract($result);

extractdizideki her üye için o üyeden sonra adlandırılmış bir değişken oluşturur. Böylece şimdi erişebilir $modelve$data


1
NOT: (burada modelve data) tuşlarının değişken olarak mevcut olmadığına dikkat edin . Varsa, çakışmaları önlemek için prefixparametresini kullanın extract.
ToolmakerSteve

7

Bir işlevden birden fazla dizi ve skaler döndürebilirsiniz

function x()
{
    $a=array("a","b","c");
    $b=array("e","f");
    return array('x',$a,$b);
}

list ($m,$n,$o)=x();

echo $m."\n";
print_r($n);
print_r($o);

7

İki iade beyanı mümkün değil. Ancak hata atmaz, ancak işlev çağrıldığında yalnızca ilk dönüş deyimi değerini alırsınız. Bunun karşılığında birden çok değer elde etmek için dizi dönüşünü kullanabiliriz. Örneğin:

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);
}

5

İşlevler, tanım gereği, yalnızca bir değer döndürür.

Ancak, varsaydığınız gibi, bu değer bir dizi olabilir.

Böylece kesinlikle şöyle bir şey yapabilirsiniz:

<?PHP
function myfunc($a,$b){
   return array('foo'=>$a,'bar'=>$b);
}
print_r(myfunc('baz','bork'));

Bununla birlikte, biraz zaman ayırmaya ve çözmeye çalıştığınız her şeyi düşünmeye değer. Karmaşık bir sonuç değeri döndürmek (dizi veya nesne gibi) mükemmel bir şekilde geçerli olsa da, "İki değeri döndürmek istiyorum" diye düşünürseniz, kötü tasarım yapıyor olabilirsiniz. Sorunuzda daha fazla ayrıntı olmadan söylemek zor, ama durmak ve iki kez düşünmek asla acıyor.


5

En İyi Uygulama, döndürülen değişkenleri diziye koymak ve sonra list()değişkenlere dizi değerleri atamaktır.

<?php

function add_subt($val1, $val2) {
    $add = $val1 + $val2;
    $subt = $val1 - $val2;

    return array($add, $subt);
}

list($add_result, $subt_result) = add_subt(20, 7);
echo "Add: " . $add_result . '<br />';
echo "Subtract: " . $subt_result . '<br />';

?>

5

Evet, bir nesne kullanabilirsiniz :-)

Ancak en basit yol bir dizi döndürmektir:

return array('value1', 'value2', 'value3', '...');

5

PHP 7.1 <= için yeni sözdizimi kullanabilirsiniz ( liste işlevi yerine ):

/**
* @return  array  [foo, bar]
*/
function getFooAndBar(): array {
    return ['foo', 'bar'];
}

[$foo, $bar] = getFooAndBar();

print 'Hello '. $foo . ' and ' . $bar;

2-3 değişken döndürmek istiyorsanız benim için sorun değil, aksi takdirde istenen özelliklere sahip bir nesne kullanmalısınız.


4

Birden fazla dönüş değeri PHP işlevi için böyle uygulamak var. kodunuzla iyi olun. teşekkür ederim.

 <?php
    function multi_retun($aa)
    {
        return array(1,3,$aa);
    }
    list($one,$two,$three)=multi_retun(55);
    echo $one;
    echo $two;
    echo $three;
    ?>

4

Yukarıdaki yeşil onay işaretinin cevabı aslında yanlıştır. Bir dizi döndürürseniz PHP'de birden çok değer döndürebilirsiniz. Örnek için aşağıdaki koda bakın:

<?php

function small_numbers()
{
    return array (0, 1, 2);
}

list ($zero, $one, $two) = small_numbers();

Bu kod aslında PHP'nin web sitesinde aşağıdaki sayfadan kopyalanır: http://php.net/manual/en/functions.returning-values.php Ben de aynı kodu birçok kez kullandım, bu yüzden onaylayabilirsiniz iyi ve işe yarıyor.


Bu cevap, sorudaki kod örneğine atıfta bulundu, bu yüzden kesinlikle yanlış değil. Ama soru belirsiz. Niyet olduğunu bir fonksiyon çağrısından iki değeri döndürmek için muhtemelen.
Peter Mortensen

3

PHP'deki işlevler yalnızca bir değişken döndürebilir. global kapsamdaki değişkenleri kullanabilir, dizi döndürebilir veya işleve referans olarak ve değeri değiştirmeden değişken iletebilirsiniz, ancak bunların tümü kodunuzun okunabilirliğini azaltacaktır. Sınıflara bakmanızı öneririm.


3

Yukarıdaki tepkiler birkaç genişletmek düşündüm ....

class nameCheck{

public $name;

public function __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 errflag
        return array($name, $errflag);
            // If its empty..
    }else if(empty($this->name)){
        $errmsg = 'Please enter a name.';
        $errflag = true;
                    // Return both the Error message and Flag
        return 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>

Bu size bir giriş alanı ve gönderildikten sonra bir gönderme düğmesi verir, ad giriş alanı boşsa, hata bayrağını ve bir mesajı döndürür. Ad alanı bir değere sahipse, false / no hatası için değeri / adı ve 0 hata işaretini döndürür. Bu yardımcı olur umarım!


3

Bazıları birden çok değeri nesne olarak döndürmeyi tercih edebilir:

function test() {
    $object = new stdClass();

    $object->x = 'value 1';
    $object->y = 'value 2';

    return $object;
}

Ve şöyle deyin:

echo test()->x;

Veya:

$test = test();
echo $test->y;

3

Evet ve hayır. Birden fazla değişken / nesne döndüremezsiniz, ancak önerdiğiniz gibi, bunları bir diziye koyabilir ve geri döndürebilirsiniz.

Dizilerin iç içe yerleştirilmesinde bir sınır yoktur, bu yüzden onları geri dönmek için paketleyebilirsiniz.


2

Her zaman yalnızca bir dizi olabilecek bir değişken döndürebilirsiniz. Ancak global değişkenleri fonksiyonun içinden değiştirebilirsiniz. Çoğu zaman çok iyi bir stil değil, ama işe yarıyor. Sınıflarda genellikle sınıf değişkenlerini işlevler içinden döndürmeden değiştirirsiniz.


1

Cevap hayır. Ayrıştırıcı ilk dönüş ifadesine ulaştığında, kontrolü çağrı işlevine geri yönlendirir - ikinci dönüş ifadeniz asla yürütülmez.


Kesinlikle, evet. Ama soru belirsiz. Belki de amaç bir işlev çağrısından iki değer döndürmekti.
Peter Mortensen

1

Bir dizideki tüm değişkenleri ekleyin ve son olarak array.

function test($testvar)
{
  // do something
  return array("var1" => $var1, "var2" => @var2);
}

Ve sonra

$myTest = test($myTestVar);
//$myTest["var1"] and $myTest["var2"] will be usable

1

Sanırım eliego cevabı açık bir şekilde açıkladı. Ancak her iki değeri de döndürmek istiyorsanız, bunları bir diziye koyun ve döndürün.

function test($testvar)
{
  // do something

  return array('var1'=>$var1,'var2'=>$var2);
//defining a key would be better some times   
}

// dönüş değerlerine erişmek için

$returned_values = test($testvar);

echo $returned_values['var1'];
echo $returned_values['var2'];

Bunu yazarken ayık mıydın? Bir bakışta 2 hata tespit edebiliyorum. 1) $thisAnahtar kelimeyi kullanıyorsunuz ancak bahsi geçen bir sınıf veya nesne yok. 2) Değişkeninize değerler döndürdüyseniz $returned_values, bu değişkenten yankılanmanız gerekir:echo $returned_values['var1'];
dading84

sorunu çözdü.
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 array


function 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

?>

0

Birden çok geri dönüşe izin veren diller genellikle birden çok değeri bir veri yapısına dönüştürür.

Örneğin, Python'da birden çok değer döndürebilirsiniz. Ancak, aslında sadece bir demet olarak geri dönüyorlar.

Böylece basit bir dizi oluşturarak ve bunu döndürerek PHP'de birden çok değer döndürebilirsiniz.


0

İki veya daha fazla değişkenin değerini referans olarak ayarlayarak alabilirsiniz:

function t(&$a, &$b) {
    $a = 1;
    $b = 2;
}


t($a, $b);

echo $a . '  ' . $b;

Çıktı:

1 2

Re "iki veya daha fazla değişkenin değerlerini al" : "İki veya daha fazla değişkenin dönüş değerlerini" mi kastediyorsunuz ?
Peter Mortensen

0

PHP hala "çıkış parametreleri" kullanıyor mu? Öyleyse, sözdizimini kullanarak işlevinize giren parametrelerden birini veya daha fazlasını değiştirebilirsiniz. Ardından, işleviniz döndükten sonra değiştirilen değişkeni kullanabilirsiniz.


-1

Bunu yapmanın en kolay yolu:

public function 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;
    }

}

Bu işlevi nasıl adlandırabiliriz?

$idData = $selectAllUsers->selectAllUsersByLevel($userRole, 0);
print_r($idData);
$idFName = $selectAllUsers->selectAllUsersByLevel($userRole, 1);
print_r($idFname);

Bu kadar. Çok kolay.


-1
$var1 = 0;
$var2 = 0;

function test($testvar, &$var1 , &$var2)
{
  $var1 = 1;
  $var2 = 2;
  return;
}
test("", $var1, $var2);

// var1 = 1, var2 = 2 

Bu iyi bir yol değil, ama aynı anda bir fonksiyonda iki değişken ayarlayabileceğimizi düşünüyorum.


-4

Ben benzer bir sorun vardı - bu yüzden denedim ve biraz googled (bu konu bulma). 5 dakika deneme yanılma sonra ben sadece bir satırda iki (belki daha - henüz test değil) dönmek için "VE" kullanabilirsiniz öğrendim.

Kodum:

  function get_id(){
    global $b_id, $f_id;
    // stuff happens
    return $b_id AND $f_id;
  }
  //later in the code:
  get_id();
  var_dump($b_id);
  var_dump($f_id); // tested output by var_dump

işe yarıyor. Almam / almam gereken değerleri aldım. Umarım bu konuyu okuyan herkese yardımcı olabilirim :)


3
Bu doğru değil. 'AND' basitçe bir boolean operatörüdür, bu nedenle işleviniz aslında tek bir boolean değeri döndürür. Çalışmasının tek nedeni $ b_id ve $ f_id değişkenlerini global değişken olarak bildirmenizdir. 'AND' ifadesinin yanı sıra return ifadesini de tamamen kaldırdığınızda sonuçlarınızın aynı kaldığını görürsünüz.
Matt Styles

$ b_id ve $ f_id global olarak beyan ettiğiniz için bu çok yanıltıcıdır, bu nedenle herhangi bir bağlamda kullanılabilir.
paulus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.