Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] $$ _ ++ co to robi?
Forum PHP.pl > Forum > Przedszkole
sanchoo
Wiem ze pewnie lamerskie pytanie ale nie moge znalezc... co robi taka operacja??
$$action++;
action jest przekazywana w funkcji w zmiennej domyslnie jest "wyswietl" czyli string:)
nospor
Cytat
Wiem ze pewnie lamerskie pytanie
To czemu od razu nie walisz tam gdzie trzeba? przenosze.

$$ - zmienne zmienne - szukaj w manualu
++ - operator inkrementacji - szukaj w manualu

ps: bezposrednich linkow do manuala ci nie podam, bo jakos chwilowo mi sie stronka nie chce zaladowac
sanchoo
to zes mi pomogl stary... dzieki winksmiley.jpgwinksmiley.jpgwinksmiley.jpg


Znalazlem taki przyklad:

  1. <?php
  2. $zmienna = 'pajaczek';  // ukłon w stronę firmy, no nie ;)
  3. $$zmienna = 'pajaczek rzadzi!'; // i tu się dzieje coś ważnego
  4. echo $pajaczek; // skrypt wypisuje 'pajaczek rzadzi!'
  5. ?>

ale co sie dzieje jak strina pojade ++ questionmark.gif
mike
Cytat(sanchoo @ 24.07.2007, 10:53:34 ) *
ale co sie dzieje jak strina pojade ++ questionmark.gif
Ciężko sprawdzić?
Przecież to max. 30sek. roboty a na odpowiedź na forum będziesz czekał i czekał.

Najprawdopodobniej najpierw PHP zrzutuje zmienną a potem wykona operacji postinkrementacji.

P.S.
Trochę samodzielności!
sanchoo
chyba .. max 30 sek...
latwo powiedziec smile.gif

spr co wyswietli mi takie cos:
  1. <?php
  2. $zmienna = '';  // ukłon w stronę firmy, no nie ;)
  3. $$zmienna = 'wyswietl'; // i tu się dzieje coś ważnego
  4. echo $zmienna."<br>1";
  5. $zmienna++;
  6. echo $zmienna."<br>2";
  7. echo $wyswietl."<br>3"
  8. ?>

wyswietla:
  1. 11
  2. 2
  3. 3



.... mam jakies 30 tys. linijek kodu smile.gif mam wprowadzic zmiany... swietna dumanie co ktos mial na mysli jak jest 0 komentow smile.gif
Ale dzieki bez was nie dal bym rady winksmiley.jpg jak zwykle....
Jedyne co wam dobrze wychodzi to "google.pl" "manual" te 2 podpowiedzi znacie swietnie smile.gif
Jeszcze raz dzieki glowacze!
nospor
ale oco ci chodzi? Dostales odpowiedzi. Musisz obczaic co ijak pokolei:
$$ zmienne zmienne : http://www.php.net/manual/pl/language.variables.variable.php
++: http://www.php.net/manual/pl/language.oper...s.increment.php
Kurka, co tu tlumaczyc?

A przyklad co pokazales w ostatnim poscie napisales źle, a to dlatego ze nie czaisz zmiennych zmiennych. Przeczytaj linka co dostales i zacznij od podstaw

ps: i nie pien się tylko dlatego ze lenia masz w glowie...
sanchoo
Tak jak napisałęm wyżej, że przeglądam dopiero czyiś kod w celu wprowadzenia zmian.

  1. <?php
  2. $zmienna = 'cos';  // ukłon w stronę firmy, no nie ;)
  3. $$zmienna = 'wyswietl'; // i tu się dzieje coś ważnego
  4. echo $zmienna."1<br>";
  5. echo $cos."2<br>";
  6.  
  7. $zmienna++;
  8. echo $cos."3<br>";
  9. echo $zmienna."4<br>";
  10. echo $wyswietl."5<br>"
  11. ?>


  1. cos1
  2. wyswietl2
  3. wyswietl3
  4. cot4
  5. 5

prosze zworcic uwage na 4 wiersz to jest o co mi chodzilo w pytaniu.... z cos robi sie cot smile.gif po co na co?? jak dojde dam znac....



Dzieki tongue.gif Nie pale od 5 dni i mam ... ..no tongue.gif
nospor
Cytat
prosze zworcic uwage na 4 wiersz to jest o co mi chodzilo w pytaniu.... z cos robi sie cot smilingsmiley.gif po co na co??

zmienna zawiera "cos" , robisz ++, nastepna litera po "s" to "t" wiec masz "cot" smile.gif

ps: osobiscie spodzielalem sie, ze zachowa sie to jednak inaczej winksmiley.jpg

edit: w linku co podalem wczesniej jest wyjasnienie:
Cytat
A more detailed explanation of the string incremant is:

First of all it is checked wether the string is a standart representaion of a number wich is true if it equals the regex /^ *[+-]?[0-9]*(\.[0-9]|[0-9]\.)[0-9]*([eE]?[+-]?[0-9]+)?$/
but not the regex /\+\./ (no idea why).
if it does, the type is changed to integer (if it equals /^ *[+-]?[0-9]+$/) or to float and then incremented by one.

An empty string becomes the string "1".

Otherwise if the last character is one of [0-8], [a-y] or [A-Y] it is incremented. If it is Z it puts it back to A, is z to a, if 9 to 0 and trys to do the same with the previouse character.
If a character is reatched that is not in [0-9a-zA-Z], nothing is done anymore (that's why " Z" will increment to " A").
If the begining is reached a new caracter is prepended. "1" "a" or "A" depending on wether the first character was "9", "z" or "Z".

If the last character was not [0-9a-zA-Z] the string isn't chaged.

hope this helps someone

Cytat
Other samples :
$l="A"; $l++; -> $l="B"
$l="A0"; $l++; -> $l="A1"
$l="A9"; $l++; -> $l="B0"
$l="Z99"; $l++; -> $l="AA00"
$l="5Z9"; $l++; -> $l="6A0"
$l="9Z9"; $l++; -> $l="10A0"
$l="9z9"; $l++; -> $l="10a0"
$l="J85410"; $l++; -> $l="J85411"
$l="J99999"; $l++; -> $l="K00000"
$l="K00000"; $l++; -> $l="K00001"
hwao
jak ten kod jest tak napisany, to szybciej będzie od nowa napisać całość - po poziomie autora tego kodu widać że to na pewno nie duży, łatwy skrypt.
Kedan
To troche wygląda jakby $zmienna była wskaźnikiem do $cos przehowującą wartość 'wyswietl'. W przypadku $zmienna++ zwiększamy wartość wskaźnika, czyli zmieniamy adres na jaki wskazuje (czyli jak w przykłądzie nazwa 'cos' zmienia sie na 'cot' a $cot nie jest zdefiniowany...), w gdy piszemy $$zmienna++ - powinna sie zwiększyć wartość na którą pokazuje wskaźnik, czyli wartość zmiennej $cos, czyli (jak mi sie wydaje) 'wyswietl' powinno sie zmienic na 'wyswietm'. Tak to sobie wymyśliłem, porównując z C++....
sanchoo
Siadlem ze swierzym umyslem i juz wiem smile.gif
Problem wzia sie z:
  1. <?php
  2. function normalStats($idUser, $idBaner, $action='wyswietlenia', $idDefaultBaner='')
  3. {
  4.  //$fp = @fopen('log.txt', 'a+');
  5.  $wyswietlenia = 0;
  6.  $klikniecia = 0;
  7.  $rejestracje = 0;
  8.  $$action++;
  9. ?>


i gdzies poznej jest wrzucona tabela ktora kreuje zapytanie...
  1. <?php
  2. $tableValues = array($res['l_klik']+$klikniecia, $res['l_odswiezenia']+$wyswietlenia, $res['l_rejestracja']+$rejestracje);
  3. ?>


W zaleznosci z jakim parameterem wywolamy funkcje "wyswietl" .."klikniecie"...zwiekszana jest odpowiednio zmienna... dlaczego? ..kedan ma racje smile.gif

Mysle ze skrypcik jest fajnie napisany.... niestety tak to jest jesli sie nie koemntuje :/
Nie trzeba dawac ifow.. w zaleznosci co jest w parametrze... itp itp

DziekI!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.