Od pewnego czasu rozwijam się w PHP i nadal nie miałem zadania, w którym musiałbym używać zmiennych zmiennych. Czy ktoś może podać mi przykłady, gdzie ich użycie jest dobrym pomysłem? A może były one zawarte w języku tylko dla zabawy?Kiedy używać zmiennej zmiennej w PHP?
Odpowiedz
Jedną z sytuacji, w których musiałem ich użyć, jest przetwarzanie identyfikatorów URI, chociaż ta technika może być przestarzała, i co prawda nie korzystałem z niej od dłuższego czasu.
Załóżmy, że chcemy pobrać identyfikator URI ze skryptu w formacie domain.tld/controller/action/parameter/s
. Możemy usunąć nazwę skryptu przy użyciu następujących:
$uri_string = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['REQUEST_URI']);
Aby wyodrębnić kontrolera, akcji i wartości parametrów z tym my będziemy mieć wybuchnąć ciąg przy użyciu separatora ścieżki „/”. Jednak jeśli mamy prowadzące lub końcowe ograniczniki, będziemy mieli pustych wartości tablicy upon eksplozji, więc powinniśmy przyciąć te z początku i końca łańcucha:
$uri_string = trim($uri_string, '/');
Możemy teraz wybuchnąć ścieżkę do tablicy :
$uri_data = explode('/', $uri_string);
$uri_data[0]
zawiera teraz naszą nazwę kontrolera, $uri_data[1]
zawiera nazwę działania, a wartości w tablicy poza tym to parametry, które powinny być przekazywane do metody działania.
$controller_name = $uri_data[0];
$action_name = $uri_data[1];
Więc teraz, że mamy te nazwy, możemy wykorzystać je do wielu rzeczy. Jeśli przechowujesz kontrolery w ściśle określonym katalogu względem katalogu głównego witryny, możesz użyć tych informacji do require_once
klasy kontrolera. W tym momencie można instancję i wywołać ją za pomocą zmiennych Zmienna:
$controller = new $controller_name();
$controller->{$action_name}(); // Or pass parameters if they exist
Istnieje wiele pułapek bezpieczeństwa należy zwrócić uwagę w tym podejściu, ale jest to jeden ze sposobów Widziałem wykorzystać zmienne zmienne.
WYŁĄCZENIE ODPOWIEDZIALNOŚCI: Nie sugeruję, że faktycznie używasz tego kodu.
W rzeczywistości można pominąć dodatkowe $, jeśli używasz ciągu znaków. Nikt nigdy nie powiedział, że PHP nie jest niechlujstwem. :) –
Używam ich w takim przypadku. Po pierwsze, ciąć i uciekać wszystkie dane $ _GET, $ _POST i transmisji pakietowej, a następnie używać ich. moje adresy URL są przetwarzane przez Apache w ten sposób. site.com/controller/$_GET[1]/$_GET[2]/$_GET[n] więc używanie ich jako nazw klas, funkcji lub parametrów jest super szybkie i łatwe. Byłbym wdzięczny za niektóre uwagi dotyczące używania zmiennych varianles w zakresie lub bezpieczeństwa. Podobnie jak przetwarzane są łańcuchy, jeśli są one wstawiane do kodu przed kompilatorem itp. $ class -> $ _ GET [1]; $ _GET [1] = 'knownFunction; mysql_query ('DROP *'); '; itd itd – Supernovah
Generalnie znajduję je w miejscach, w których kod jest zły. Może odwołuje się do statycznej zmiennej konfiguracyjnej itp. Ale dlaczego zwykła tablica asocjacyjna nie byłaby lepszym rozwiązaniem. Wygląda na to, że czeka cię luka w zabezpieczeniach.
Przypuszczam, że można ich skutecznie używać w szablonach.
Nigdy ich nie używaj; "tablica" jest zawsze lepszym rozwiązaniem.
+1 Tak - * Dowolna * struktura danych to lepszy sposób – Dario
Po pierwsze, byłby to wielki problem z bezpieczeństwem, gdybyś używał danych wyjściowych użytkownika do tych celów. Wewnętrzne są jedynym ważnym zastosowaniem tutaj.
Biorąc to pod uwagę, wyobrażam sobie, że chodzi o takie rzeczy jak zapętlenie różnych zmiennych lub wysyłanie zmiennych jako parametrów.
foreach($name in array('_GET','_POST','_REQUEST')) {
array_map('stripslashes',$$name);
}
Dobry przykład :) –
Chyba że pracujesz z wieloma zmiennymi głębokość (którego nie trzeba, jeśli nie robi się niczego wyjątkowego) będzie prawdopodobnie ich nie potrzebują. Nawet wtedy, prawdopodobnie, możesz znaleźć inny sposób, aby zapisać to samo i nadal uzyskać ten sam wynik. Może być krótszy (aw niektórych przypadkach nawet łatwiejszy do zrozumienia), aby z nich korzystać, więc z jednej strony cieszę się, że jest to część języka.
Nie jest niczym niezwykłym, że języki zawierają funkcje, których nie należy dotykać belkami (nawet asked a question about it chwilę temu), a zmienne zmienne są prawdopodobnie jedną z tych konstrukcji, które należą do tej kategorii. To, że język zawiera funkcję, nie oznacza, że musisz jej użyć.
Mogą wystąpić sytuacje, w których rozwiązują problem (po tym, jak rekurencja jest rzadko używana w praktyce, ale nikt nie będzie twierdził, że to nie jest niezbędna konstrukcja), ale ogólnie rzecz biorąc, każda funkcja językowa zaciemniająca kod i zmienna zmienne wyzywająco mieszczą się w tej kategorii, należy je traktować z najwyższą ostrożnością.
Nie znalazłem wielu zastosowań zmiennych zmiennych, ale używanie zmiennych dla metod może być przydatne, o ile to, co robisz, jest jasne. Na przykład w prosty usługi REST można zrobić coś takiego:
$method = $request->getMethod(); // 'post','get','put','delete'
try
{
$response = $resource->$method($request->getInput());
}
catch (BadMethodException $badMethod)
{
$response = $responseFactory->getError($badMethod);
}
Niektórzy twierdzą, można to zrobić równie dobrze z switch
oświadczenia (które dało), ale w ten sposób nadaje się do rozciągliwości (jeśli zdecydujesz aby dodać inny typ metody) i utrzymuje abstrakcję stosowania metody dla zasobu.
Znalazłem całkiem dobry ..
$php = "templates/php/default.php";
$html = "templates/html/default.php";
$css = "templates/css/default.php";
$js = "templates/js/default.php";
teraz poprosiłem użytkownikowi powiedzieć który plik chce php i/lub html ..
$userarray = array("php", "css");
foreach($userarray as $file){
var_dump($$file);
}
wyjściowa:
szablony/php/default.php
szablony/css/default.php
mam sobie z tym skrzyżowane podczas próby zakresu zmiennych statycznych self::$file;
tak potem przypomniałem sobie mogę używać zmiennych zmiennych self::$$file;
które będą interpretowane jako self::$php;
- 1. jak używać zmiennej w onSaveInstanceState
- 2. Jak używać zmiennej w CSS?
- 3. W bashie, jak używać zmiennej jako części nazwy innej zmiennej?
- 4. Użyj zmiennej PHP w JQuery
- 5. jak używać zmiennej sesji PHP w Zend Framework
- 6. Kiedy należy przechowywać funkcję w zmiennej?
- 7. git - ustawienie zmiennej zmiennej
- 8. Jak używać zmiennej jako typu
- 9. Odwołanie do zmiennej w zmiennej w JMeter
- 10. Kiedy używać interfejsów w PHP
- 11. jak używać zmiennej w łańcuchu w jquery
- 12. Dynamiczne zapełnianie zmiennej statycznej w PHP
- 13. podkreślenia w zmiennej db php powodując problemy
- 14. PHP usuń "odniesienie" ze zmiennej.
- 15. PHP: tworzenie kopii zmiennej referencyjnej
- 16. PHP dynamicznie dostępu wartość zmiennej
- 17. Nazwa zmiennej zmiennej Mongoose
- 18. Jak używać zmiennej path w @Preauthorize
- 19. Jak używać zmiennej globalnej w pliku node.js?
- 20. Jak używać zmiennej Session w HttpHandler
- 21. Jak używać zmiennej liczby argumentów w pyinvoke
- 22. Jak używać zmiennej python w javascript?
- 23. Jak używać zmiennej systemowej w mysql
- 24. Jak używać zmiennej w konfiguracji kątowej
- 25. Jak używać zmiennej typu rekord w plpgsql?
- 26. PHP, pobieranie zmiennej z innego pliku php
- 27. Przechowywanie echo ciągi w zmiennej w PHP
- 28. Typ zmiennej zmiennej (bajt)
- 29. Kiedy owijać nawiasy klamrowe wokół zmiennej
- 30. umieszczanie zmiennej php w wartości formularza HTML
I tylko od czasu do czasu korzystać z PHP ... co heck jest "zmienną zmienną" w PHP? –
$ foo = 42; $ bar = "foo"; $$ bar ==> 42 – jrockway