Napisałem funkcję PHP, która akceptuje 10 parametrów, ale wymagane są tylko 2. Czasami chcę zdefiniować ósmy parametr, ale nie chcę wpisywać pustych ciągów dla każdego z parametrów, dopóki nie osiągnę ósmego.
Pomysł, jaki miałem, to przekazanie abstrakcyjnej funkcji z tablicą parametrów, która przekazuje ją do funkcji rzeczywistej.
Czy istnieje lepszy sposób na skonfigurowanie funkcji, aby móc przekazywać tylko te parametry, które chcę?
php
function
parameter-passing
user481826
źródło
źródło
Odpowiedzi:
Niech funkcja przyjmuje jeden parametr: tablicę. Przekaż rzeczywiste parametry jako wartości w tablicy.
Edycja: link w komentarzu Pekki prawie to podsumowuje.
źródło
W tym przypadku przekazałem tablicę, w której kluczem jest nazwa parametru, a wartością jest wartość.
źródło
Aby osiągnąć to, co chcesz, użyj tablicy Jak powiedział Rabbot (chociaż może to stać się uciążliwe do dokumentowania / utrzymywania, jeśli jest używane nadmiernie). Lub po prostu użyj tradycyjnych opcjonalnych argumentów.
Jednak zwykle stwierdzam, że kiedy zaczynam pisać funkcję / metodę z tak wieloma argumentami - najczęściej jest to zapach kodu i można go ponownie przekształcić / wyabstrahować w coś znacznie czystszego.
źródło
W PHP 5.6 i późniejszych, listy argumentów mogą zawierać token ... oznaczający, że funkcja przyjmuje zmienną liczbę argumentów. Argumenty zostaną przekazane do podanej zmiennej jako tablica; na przykład:
Przykład Użycie ... do uzyskania dostępu do zmiennych argumentów
Powyższy przykład wyświetli:
Lista argumentów o zmiennej długości Dokumentacja PHP
źródło
Możesz po prostu ustawić wartość domyślną na null.
źródło
null
ją na nie-bity typu daty. na przykładarray()
dla tablicUWAGA: To jest stara odpowiedź, dla PHP 5.5 i starszych . PHP 5.6+ obsługuje domyślne argumenty
W PHP 5.5 i starszych możesz to osiągnąć za pomocą jednej z następujących 2 metod:
Jak używać
Wolę drugą metodę, ponieważ jest przejrzysta i łatwa do zrozumienia, ale czasami możesz potrzebować pierwszej metody.
źródło
$x = null; if ($x) echo "true"; else echo "false";
wypisze „false”, nawet jeśli zmienna $ x ma wartość („null” w tym kodzie). Ponadto w obu metodach używamy operatora trójskładnikowego, więc poprawne jest użycie tylko jednego „=”. Jeśli wykonasz test zmethod(); method(1); method(1, 2);
, to pierwsze wywołanie skojarzy arg1 i arg2 z wartościami domyślnymi, drugie wywołanie skojarzy drugi argument z wartością domyślną i „1” dla pierwszego argumentu. Ostatnie wywołanie nie skojarzy wartości domyślnych.Myślę, że możesz też używać obiektów jako nośników parametrów.
Oczywiście musisz ustawić domyślne wartości dla "optParam8" i "optParam2" w tej funkcji, w innym przypadku otrzymasz "Uwaga: Undefined property: stdClass :: $ optParam2"
Jeśli używasz tablic jako parametrów funkcji, podoba mi się ten sposób ustawiania wartości domyślnych:
źródło
Jeśli do utworzenia obiektu z prawidłowym stanem wymagane są tylko dwie wartości, możesz po prostu usunąć wszystkie inne opcjonalne argumenty i podać je ustawiające (chyba że nie chcesz, aby były zmieniane w czasie wykonywania). Następnie po prostu utwórz instancję obiektu z dwoma wymaganymi argumentami i ustaw pozostałe zgodnie z potrzebami za pomocą metody ustawiającej.
Dalsza lektura
źródło
Wiem, że to stary post, ale miałem problem jak OP i to właśnie wymyśliłem.
Przykład tablicy, którą możesz przekazać. Możesz zamówić to ponownie, jeśli było wymagane określone zamówienie, ale w przypadku tego pytania zrobi to, o co zostało zadane.
Jest to łatwe w zarządzaniu, łatwe do odczytania, a punkty wyodrębniania danych można dodawać i usuwać w dowolnym momencie w dowolnym miejscu kodowania, a jednocześnie uniknąć masowego przepisywania. Użyłem kluczy całkowitych, aby dopasować się do oryginalnego pytania OP, ale klucze łańcuchowe mogą być równie łatwo używane. Właściwie dla czytelności radziłbym to.
Dla ułatwienia umieść to w zewnętrznym pliku
umieść to na początku, jeśli plik.
Po prostu użyj ich, aby przypisać kolejną część danych numerację / nazewnictwo w zależności od tego, skąd pochodzą dane.
I na koniec przekaż tablicę
źródło
Możesz utworzyć zwykłą funkcję, a następnie dodać opcjonalne zmienne, nadając im domyślną wartość Null.
Wartość Null nadal jest wartością, jeśli nie wywołasz funkcji z wartością dla tej zmiennej, nie będzie ona pusta, więc nie ma błędu.
źródło
Jeśli zwykle przekazujesz tylko ósmą wartość, możesz zmienić kolejność parametrów, tak aby była pierwsza. Musisz tylko określić parametry aż do ostatniego, który chcesz ustawić.
Jeśli używasz różnych wartości, masz 2 opcje.
Jednym z nich byłoby utworzenie zestawu funkcji opakowujących, które przyjmują różne parametry i ustawiają wartości domyślne dla innych. Jest to przydatne, jeśli używasz tylko kilku kombinacji, ale może szybko się skomplikować.
Inną opcją jest przekazanie tablicy, w której klucze są nazwami parametrów. Możesz wtedy po prostu sprawdzić, czy w tablicy jest wartość z kluczem, a jeśli nie, użyj wartości domyślnej. Ale znowu, może to stać się bałaganiarskie i dodać dużo dodatkowego kodu, jeśli masz dużo parametrów.
źródło
PHP dopuszcza domyślne argumenty ( link ). W twoim przypadku możesz zdefiniować wszystkie parametry od 3 do 8 jako NULL lub jako pusty ciąg "" w zależności od kodu funkcji. W ten sposób możesz wywołać funkcję tylko przy użyciu pierwszych dwóch parametrów.
Na przykład:
źródło
echo " this is arg3: " . $arg3;
wywoływany (np . Przy użyciu , itp., Zobaczysz, że wywołanie np .yourFunction(3, 2, $arg8=5);
Wydrukuje32 this is arg3: 5
. Problem w tym, że pozycja parametru nadal ma znaczenie przy przekazywaniu parametrów opcjonalnych w PHP ... nazwy parametrów nie wystarczą do odwzorowania wartości parametrów na nazwy parametrówPo prostu ustaw Null, aby ignorować parametry, których nie chcesz używać, a następnie ustaw wymagany parametr zgodnie z pozycją.
źródło
źródło
default
to słowo kluczowe w PHP .