Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Referencje w klasach
Duiaheru
post
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.
Go to the top of the page
+Quote Post
lukaswoj
post
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... (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Duiaheru
post
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..
Go to the top of the page
+Quote Post
patrycjusz
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
no mam nadzieje ze w miare rozsadnie to opisalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pozdro
Go to the top of the page
+Quote Post
Duiaheru
post
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.
Go to the top of the page
+Quote Post
patrycjusz
post
Post #6





Grupa: Zarejestrowani
Postów: 263
Pomógł: 0
Dołączył: 13.07.2003
Skąd: wawa

Ostrzeżenie: (0%)
-----


no to prosze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Pozdro
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 23:07