Geçen / dönüş değerleri en iyi yöntem

4 Cevap

Web Geliştirme işi yaklaşık iki ay önce - benim ilk gerçek (! Artık gönüllülük evet, ücretli bir ofis işi) indi, çünkü ben bu soruyu soruyorum nedenidir. Ben bilgisayar bilgi sistemleri ortakları bir çift (web geliştirme ve programlama) var. Ama senin gibi birçok biliyorum, ne üniversitede öğrenmek ve iş yerinde ne gerek çok farklı ve çok daha fazlası olabilir. Kesinlikle benim iş öğreniyorum - ilk kez desen tasarımı ile ilgili bir şey yapıyor - Ben bir MVC mimarisi sıfırdan kullanmak bütün çerçeveyi yeniden.

Ben OO PHP / etrafında dönüş değerleri geçirmek için en iyi yol olarak tavsiye ederim ne merak ediyorum? Şu anda ben standart her türlü uygulama değil, ama artık çerçeve artar boyutu önce bir tane oluşturmak istiyoruz. 1'den fazla değer bir getiri elde ve bazen diziler geçmek veya birden çok parametre için gerektiğinde ben dizilerini geri döndürür. Diziler en iyi yoldur ya da json gibi daha verimli bir yöntem var mı? Ben daha fazla değer ya da daha az geçmek için dizilerin fikir gibi, sadece dizi değil fonksiyon tanımı kendisi değiştirmek gerekir.

Sadece daha iyi bir geliştirici olmaya çalışıyor, hepinize teşekkür ederim.

EDIT: Ben, ben bu soruya bir cevap kabul etmişti tüm özür düşündüm Ben. Benim kötü, çok, çok kötü.

4 Cevap

Aslında birden fazla dönüş değerlerini gereken yere ne sıklıkla bir durum karşısında çalıştırabilirim? Ben sık sık hayal edemez.

Ve ben seni expected çeşit bir Numaralandırılabilir veri toplama (yani, bir sorgu sonuç) olmak bir şeyi iade edilir, ancak dönen dizi başka hiçbir anlamı yoktur bir senaryo anlamına gelmez, sadece için İki-veya-daha fazla değer tutun.

PHP kütüphanesi kendisini kullanır Bir teknik, preg_match() gibi, referans parametresidir. Kendisi işlevi tek bir değer, bir boolean verir, ancak isteğe eşleşen verileri depolamak için verilen 3 parametresini kullanır. Bu, özünde, bir "ikinci dönüş değeri" dir.

Kesinlikle JSON gibi bir veri değişim formatı kullanmayın. Bu formatların amacı beklenen, ayrıştırmak-güçlü bir şekilde farklı sistemler arasında veri taşımaktır. Tek bir PHP yürütme bunu gerekmez.

Tek bir değer, bir dizi ya da (işlev gereksinimlerine bağlı olarak) bir başvuru: İstediğin herşeyi dönebilirsiniz. Sadece tutarlı olmak.

Ancak dahili JSON etmeyiniz. Bu sadece gereksiz yükü üretir.

Ben de birden çok değer döndürmek için diziler kullanmak, ancak pratikte çok sık olmaz. Eğer varsa, genellikle bu tür array('x'=>10,'y'=>10) adlı bir fonksiyondan getCoordinates() dönen gibi veri, mantıklı bir gruplama var. Kendinizi işleme çok yapıyor ve işlevleri bir sürü diziler veri wads dönen bulursanız, küçük birimler halinde çalışmalarını koymak için yapılabilir bazı üstlenmeden muhtemelen var.

Söyleniyor, Bahsettiğiniz:

Ben daha fazla değer ya da daha az geçmek için dizilerin fikir gibi, sadece dizi değil fonksiyon tanımı kendisi değiştirmek gerekir.

Bu bağlamda, size ilginizi çekebilir başka teknik argüman değişken numaraları ile fonksiyonlarını kullanıyor. Bu parametreleri olmayan bir işlev bildirmek için mükemmel kabul edilebilir:

function stuff() {
    //do some stuff
}

ama bunu vermek umurumda tüm parametreleri ile çağrı:

$x = stuff($var1, $var2, $var3, $var4);

func_get_args(), func_get_arg() (tekil) ve func_num_args() kolayca / loop geçirildi tüm parametreleri bulabilirsiniz kullanarak. Aklınızda belirli parametreleri yoksa bu çok iyi çalışıyor, bir sum() function örneğin söylüyorlar:

function sum()
{
    $out = 0;
    for($i = 0; $i < $c = func_num_args(); $i++) {
        $out += func_get_arg($i);
    }
    return $out;
}

//echoes 35
echo sum(10,10,15);

Düşünce için Gıda, belki yararlı bulacaksınız.

Ben tuşları "özel" anlamı dizileri dönen / geçirmeden önlemek için dikkatli olduğum tek şey. Örnek:

<?php
// Bad. Don't pass around arrays with 'special' keys
$personArray = array("eyeColor"=>"blue", "height"=>198, "weight"=>103, ...); 

?>

Böyle bir diziyi kullanan kod refactor ve hata ayıklama zordur. Bu tip bir yapı daha iyi bir nesne olarak temsil edilir.

<?php

Interface Person {
    /**
     * @return string Color Name
     */
    public function getEyeColor();
    ...
}
?>

Bu arabirim tüketen kod güvenebileceğiniz bir contract öngörmektedir.

Bunun dışında kendinizi sınırlamak için herhangi bir nedenle düşünemiyorum.


Not: açık olmak, birleşmeli diziler listesi verileri için mükemmeldir. gibi:

<?php
// Good array
$usStates = array("AL"=>"ALABAMA", "AK"="ALASKA", ... );
?>