PHP fonksiyon vars bir sürü iade edebilir miyim?

7 Cevap

Bir PHP fonksiyonu dizi olmadan vars bir sürü iade edebilir miyim?

Ben böyle istiyorum:

<?php

public function a()
{
   $a = "a";
   $b = "b";
   $c = "c";

}

echo a()->a;
echo a()->b;
echo a()->c;

?>

Nasıl, $ b, $ c değişkenler $ erişebilir?

7 Cevap

Bunun yerine bir dizi, bir associative array kullanın ve -> nesne sözdizimini kullanarak elemanlarına erişim sağlayan bir nesne, bunu döküm olabilir:

function a()
{
  return (object) array(
    'a' => "a",
    'b' => "b",
    'c' => "c");
}

echo a()->a;  // be aware that you are calling a() three times here
echo a()->b;
echo a()->c;

Sizin 3 değişkenleri tutan bir sınıf oluşturmak ve sınıfının bir örneğini döndürür. Örnek:

<?php
class A {
    public $a;
    public $b;
    public $c;

    public function __construct($a, $b, $c) {
        $this->a = $a;
        $this->b = $b;
        $this->c = $c;
    }
}

function a() {
    return new A("a", "b", "c");
}

echo a()->a;
echo a()->b;
echo a()->c;
?>

Tabii ki son 3 satır a() 3 kere aradı olur, çünkü özellikle verimli değildir. Mantıklı bir üstlenmeden değiştiriliyor bu 3 hatlarında neden olacaktır:

$a = a();
echo $a->a;
echo $a->b;
echo $a->c;

Bu değişkenleri bu şekilde erişmek istiyorsanız (without using an array), daha iyi bir sınıf kullanmak gerekir:

class Name{
    var $a = "a";
    var $b = "b";
}

$obj = new Name();
echo $obj->a;

Eğer bir sınıf oluşturmak ve bunun yerine bir nesneyi geri dönebilirler. this SO answer, işinize yarayabilecek bir şey için dışarı atın.

Böylece | "#" ve dönüş değişken bir dizi olarak olarak vardır ya da benzeri sınırlayıcı herhangi ayrılmış birden fazla değere sahip uzun bir dize olmalı, Evet bu mümkün.

bir dizi olarak inşa edilmiştir eğer PHP mevcuttur var_dump işlevini kullanarak alabilirsiniz

aşağıdaki kodu bakın

var_dump($array);

PHP Manual > Returning values:

Bir fonksiyon birden fazla değer döndüremez, ancak benzer sonuçlar bir dizi dönen elde edilebilir.

<?php
function small_numbers()
{
    return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();

Burada sınıfları gerek.