![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 9.04.2004 Skąd: Zawoja Ostrzeżenie: (0%) ![]() ![]() |
Witajcie, od czasu do czasu przeglądam forum i często spotykam się z referencją w klasach, czego totalnie nie rozumiem.
Referencja, jest to powiązanie jakieś między zmiennymi, więc jeśli w jednej zmiennej zmieni się coś, to w drugiej następuje taka sama zmiana. Dobrze to rozumiem? Chciałem zaczaić, jak działa framework jakikolwiek, ale wszędzie spotykam się z referencją. Jednym z takich frameworkuf jest np. Mojavi. Przykładem referencji jest np. ten z postu: http://forum.php.pl/viewtopic.php?p=101720#101720 Możecie mi wytłumaczyć na czym to wszystko polega, jak ma się referencja na zwyczajnych zmiennych do tych na klasach i właściwie to po co to wszystko ? Zanim odpowiecie na pytanie, możecie się zacząć denerwować, pytając: dlaczego do cholery nie poszukasz o tym na forum czy w artykułach? Odpowiedź: szukałem, i szukam od jakiegoś tygodnia i jak narazie żadnych rezulatów. Angielskiego nie znam za dobrze, a w polskich manualach nie znalazłem tego. Liczę, że potraficie mnie zrozumieć, a przede wszystkim na to, że mi to wytłumaczycie. Jestem przekonany, że nie jeden sobie zadaje to samo pytanie, więc już przynajmniej będziecie mogli go odsyłać do tego tematu. -------------------- www.Jama-Tur.pl - Biuro Podróży
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 0 Dołączył: 2.01.2004 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Krótko.
W momencie gdy wykonasz taki kod: [php:1:0ef355d348] <?php $zmienna_a='ania'; $zmienna_b=$zmienna_a; $zmienna_b='dorotka'; echo "zmienna a: $zmienna_a <br>"; echo "zmienna b: $zmienna_b <br>"; ?> [/php:1:0ef355d348] Otrzymasz taki wynik: Kod zmienna a: ania
zmienna b: dorotka Teraz drugi, bardzo podobny przykład: [php:1:0ef355d348] <?php $zmienna_a='ania'; $zmienna_b=&$zmienna_a; $zmienna_b='dorotka'; echo "zmienna a: $zmienna_a <br>"; echo "zmienna b: $zmienna_b <br>"; ?> [/php:1:0ef355d348] I wynik: Kod zmienna a: dorotka
zmienna b: dorotka W momencie gdy użyjesz operatora przypisania "=" to wartość zmiennej znajdującej się po prawej stronie (w naszym przypadku to $zmienna_a i jej wartosc 'ania') jest przypisywana do nowej zmiennej o nazwie użytej po lewej stronie (w tym przypadku $zmienna_b). Czyli po takiej operacji mamy dwie fizyczne kopie tej samej wartości pod postacią dwóch różnych zmiennych ($zmienna_a i $zmienna_b). Jeśli teraz zmienisz wartość którejkolwiek ze zmiennych, nie będzie to miało wpływu na wartośc tej drugiej. Natomiast w przypadku referencji "&=" zmienna użyta z lewej strony operatora przypisania staje się tak jakby "drogowskazem", wskazującym na wartośc zmiennej użytej z prawej strony. Po takiej operacji $zmienna_a pozostaje niezmieniona a $zmienna_b jest "referencją do zmiennej_a". Teraz jeśli spróbujesz zmienić wartośc $zmienna_b to tak naprawdę zmienisz wartość $zmienna_a. Spójrz na powyższe przykłady, "przetraw" to co napisałem i zrozum... ![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 9.04.2004 Skąd: Zawoja Ostrzeżenie: (0%) ![]() ![]() |
Cytat Natomiast w przypadku referencji "&=" zmienna...
A nie "=&' ? ;-) No dobra, powiedziałem, że mniej więcej rozumiem jak wyglądają referencje na zwykłych zmiennych. Starałem się też to przetrawić, zrozumieć :].. jednak.. dalej nie wiem jak to ma się do klas W przypadku kodu np.: [php:1:b059702b2b] <?php class ExecutionFilter extends Filter { function & ExecutionFilter () { parent::Filter(); } function execute (&$filterChain, &$controller, &$request, &$user) { $execChain =& $controller->getExecutionChain(); $action =& $execChain->getAction($execChain->getSize() - 1); /* jakis tam kod dalej, niewazne, chodzi mi o przyklad */ ?>[/php:1:b059702b2b] To w tym omencie co oznacza ampersand przed nazwą funkcji, czy też przed zmiennymi w deklaracji funkcji 'execute' ? albo np. tutaj: [php:1:b059702b2b]<?php $controller =& Controller::getInstance(); ?>[/php:1:b059702b2b] czy też [php:1:b059702b2b]<?php $authHandler =& new PrivilegeAuthorizationHandler; $user =& new PrivilegeUser; ?>[/php:1:b059702b2b] tu ? tzn. że dajmuy na to $user jest powiązana z obiektem PrivilegeUser, ale jak to można w praktyce wykorzystać ? Po cholerę w ogóle to jest ? [najważniejsze pytanie odnośnie tej całej referencji - dot. klas przede wszystkim] Czy ktoś może mi wytłumaczyć, do czego użyć w ogóle referencji ? Jak dla mnie to to jest w ogóle nie potrzebne, a jednak używane dość często. Tego nie rozumiem.. -------------------- www.Jama-Tur.pl - Biuro Podróży
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 263 Pomógł: 0 Dołączył: 13.07.2003 Skąd: wawa Ostrzeżenie: (0%) ![]() ![]() |
Hej,
spróbuje jak na chłopski rozum, patrz klasa to... czolg sterowany zdalnie przez jasia , czolg ma paliwo (wlasciwosci klasy) i jakies mozliwosci (jezdzi,skreca i takie tam czyli metody) i teraz jasio ma dostep do czolgu (stworzony jest obiekt czolgu dla jasia) i steruje nim pilotem czy czyms, a teraz przychodzi malgosia i ona tez chce miec dostep do czolgu jasia no to wtedy uzywa sie referencji czyli [php:1:d18d427449]<?php $dostepDoCzolguDlaMalgosi = & new czolg(); ?>[/php:1:d18d427449] a jezeli malgosia bedzie chciala miec swoj wlasny czolg to nie skorzysta z referencji i zostanie stworzony osobny nowy czolg ![]() no mam nadzieje ze w miare rozsadnie to opisalem ![]() Pozdro -------------------- www.tigroup.pl Rozwiązania informatyczne dla sektora MSP.
Projektowanie i tworzenie stron www, dedykowane rozwiązania e-biznes, outsourcing usług programis |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 9.04.2004 Skąd: Zawoja Ostrzeżenie: (0%) ![]() ![]() |
Heh.. fajny przykład..
ale już druga odpowiedź znowu niepełna.. już prawie rozumiem o co chodzi z tymi referencjami, acz jeszcze pozostało kilka rzeczy.. np. co to jest, jeżeli postawimy '&' tak jak poniżej: [php:1:65ac4a9f7c]<?php class ExecutionFilter extends Filter { function & ExecutionFilter () { parent::Filter(); } function execute (&$filterChain, &$controller, &$request, &$user) { $execChain =& $controller->getExecutionChain(); $action =& $execChain->getAction($execChain->getSize() - 1); ?>[/php:1:65ac4a9f7c] bo tego dalej nie rozumiem... po co dajmy znak '&' przed nazwą funkcji ? to co się dzieje w funkcji execute z tymi zmiennymi to sobie wykonałem test i sprawdziłem, że zmieniając np. $filterChain zmienia się zmienna, która podstawiliśmy w to miejsce odpalając funkcję. Tylko wytłumacz mi jeszcze właśnie z tą funkcją ExecutionFilter, dlaczego tam jest znak '&', plz. -------------------- www.Jama-Tur.pl - Biuro Podróży
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 263 Pomógł: 0 Dołączył: 13.07.2003 Skąd: wawa Ostrzeżenie: (0%) ![]() ![]() |
no to prosze
![]() jezeli dasz & przed nazwa funkcji zwróci ona referencje np [php:1:ac9ccf9705]<?php function & test () { //to tylko przyklad return new klasa(); } ?>[/php:1:ac9ccf9705] a po co go dajemy ? bo tak to juz jest w programowaniu obiektowym i tutaj odsylam do googla i poczytania sobie na temat OOP a w wielkim skrócie moge powiedziec tylko tyle ze sa & po to aby odwolywac sie do jednego i tego samego miejsca w pamieci ![]() Pozdro -------------------- www.tigroup.pl Rozwiązania informatyczne dla sektora MSP.
Projektowanie i tworzenie stron www, dedykowane rozwiązania e-biznes, outsourcing usług programis |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 08:28 |