- Kábeleket és csövezést rejtő "kirakatház" a GameMax logójával
- Felvarrták az Arctic rackmount rendszerekhez szánt CPU-hűtőjének ráncait
- Háromféle kivitelben, és nem kis kapacitásokkal jönnek a Micron 6550 ION SSD-i
- Már a Samsung sem szolgálja ki modern AI lapkákkal Kínát
- Havazáshoz igazított kiadás kap a Steam Deck OLED
- Mini PC
- Nem indul és mi a baja a gépemnek topik
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Samsung LCD és LED TV-k
- Kormányok / autós szimulátorok topikja
- Internet Rádió építése (hardver), és programozása
- Milyen billentyűzetet vegyek?
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Épített vízhűtés (nem kompakt) topic
- Vezetékes FEJhallgatók
Új hozzászólás Aktív témák
-
trisztan94
őstag
válasz PumpkinSeed #14946 üzenetére
Nem localhost.domain.hu-ra gondolt az admin? Mert már láttam olyat.
https://heureka-kreativ.hu
-
PumpkinSeed
addikt
válasz trisztan94 #14951 üzenetére
Az a baj, hogy ami létezik ilyen téren 4 óra alatt mindet végig próbáltuk...
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
trisztan94
őstag
válasz PumpkinSeed #14952 üzenetére
Esetleg domain-t, vagy a domain IP-jét próbáld meg kiszolgálóként.
Ja jó, most esett le, hogy phpmyadminról van szó. Ezt nézd meg, hátha.
Másik lehetőség: (SO) rakd fel a phpmyadmint a tárhelyre ugyanazzal a felhasználónévvel és jelszóval, elvileg akkor rácsatlakozik.
https://heureka-kreativ.hu
-
PumpkinSeed
addikt
válasz trisztan94 #14953 üzenetére
Köszönöm, viszont már leadtuk az ultra okos adminnak, hagy csinálja meg ő...
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
csabyka666
veterán
Üdv mindenkinek!
A segítségetekre / véleményetekre lenne szükségem.
Készítettem egy cookie-t, amit tömbként kezelek, és az elemein foreach-el megyek végig. Eddig érzésem szerint még működik a dolog, mert echo-val kiírja, hogy melyik elemnél tart éppen, tehát a bejárás rendben van.
A probléma, hogy van egy SQL lekérdezésem is, és én azt szeretném elérni, hogy minden egyes ciklusban más-más SQL lekérdezés fusson le - a cookie tartalmának megfelelően, és a problémám igazából az, hogy nem tudok belenyúlni az SQL parancsba minden ciklusban.Sablonosan ez a helyzet:
foreach($c as $value){
$sql = "SELECT * FROM tabla WHERE id=$value"; //ez így persze nem fut le, de a lényeget értitek...
[...]
}
Azt szeretném elérni, hogy a $value értéke minden egyes ciklusban változzon meg, a $c aktuális értékére (ez meg is történik), és ezzel az új értékkel fusson le a lekérés (ez már nem). Ezt hogy tudom elérni?
A konkrét helyzet: a cookie-ban számok vannak, amik egy bevásárlókosár egyes elemeinek indexei (amiket kosárba rakott a felhasználó), és a kosár tartalmát szeretném kilistázni, ezért lenne szükségem az aktuális index-szel történő lekérdezésre.
Szerintem a kód maga jó, mert ha manuálisan átírom a WHERE záradékban az indexet, akkor azokat listázza ki, amik a kosárban vannak.
Köszönöm a segítséget előre is!
[ Szerkesztve ]
Ágdarálást, kaszálást, területtisztítást vállalok profi gépekkel! Elsősorban Zala megye és vonzáskörzete, de minden megkeresést meghallgatok. +36305633091
-
trisztan94
őstag
válasz csabyka666 #14955 üzenetére
Berakod a PDO (vagy MySQLi) query-t futtató kódot a foreach-be.
https://heureka-kreativ.hu
-
csabyka666
veterán
válasz trisztan94 #14956 üzenetére
Húh, ezt nem értem. Van a foreach, abban van benne maga az SQL parancs (SELECT * stb...), illetve ugyancsak a foreach-en belül fetchelem ki a sorokat is.
Vagy hogy...?
Ágdarálást, kaszálást, területtisztítást vállalok profi gépekkel! Elsősorban Zala megye és vonzáskörzete, de minden megkeresést meghallgatok. +36305633091
-
trisztan94
őstag
válasz csabyka666 #14957 üzenetére
Akkor félreértettem.
Tehát nem az a baj, hogy nem fut le az SQL fetch minden id-re?
Azt írtad, hogy a $value értéke az jó a foreach-ben, mert kiírva rendesen írta ki. Akkor itt az egyedüli dolog ami kell az, ohgy a foreach cikluson belül minden egyes ciklusba lépéskor fetch-eled.
Nem tudsz kódot mutatni? Így elég nehéz a sötét szénakazalban megtalálni azt az egy szénaszálat, ami neked kell.
https://heureka-kreativ.hu
-
DNReNTi
őstag
válasz Tele von Zsinór #14950 üzenetére
Ahan köszi!
Én is ezt vettem ki a leírásokból, csak nem értettem miért kellene nekem több autoloader.but without you, my life is incomplete, my days are absolutely gray
-
PumpkinSeed
addikt
válasz trisztan94 #14958 üzenetére
Milyen az a sötét szénakazal?
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
trisztan94
őstag
-
Sk8erPeter
nagyúr
válasz csabyka666 #14955 üzenetére
$sql = "SELECT * FROM tabla WHERE id=$value"; //ez így persze nem fut le, de a lényeget értitek...
hogyan lehetséges az, hogy a mai napig látni összefűzött query-ket (NAGY HIBA!!), amik a potenciális veszélyforrásokat szépen magukba foglalják? Úgy értem, régen sokkal inkább tele volt a net akkora szar tutorialokkal, amikből az ember kezdőként sem győzött kukázni, szelektálni, hogy na most melyikben bízzak - de ma már van Google által nagyon jól indexelt Stack Overflow, ahol szerencsére legtöbbször a fejére koppintanak annak, aki ilyen csúfságokat akar elkövetni, meg van számtalan tutorial, ahol elsők között hívják fel a figyelmet arra, hogy sose bízz a felhasználótól érkező vagy általa bármilyen módon módosítható inputban, amikor adatbázis-lekéréssel foglalkozol.
Nézz utána az SQL Injection fogalmának, aztán pedig a PDO-nak és a prepared statementeknek. Így nem kell tartanod SQL Injectiontől.
Normális esetben ez valahogy így nézne ki csatlakozás után:// csatlakozás
$db = new PDO(
'mysql:host=localhost;dbname=test_db', // test_db-t módosítsd a megfelelő adatbázisnévre
'root', // módosítsd
'1234', // módosítsd
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;', // egyből UTF-8-ra fogja állítani kapcsolódás után a karakterkódolást
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // kivételeket fog dobálni probléma esetén
)
);
$query = 'SELECT ez, az, amaz FROM tabla WHERE id=:id'; // inkább sorold fel a valóban szükséges mezőket, ne mindig a *-ot használd!!
$stmt = $db->prepare ( $query );
$stmt->bindValue( ":id", $value, PDO::PARAM_INT );
$stmt->execute();
foreach ($stmt as $row) {
echo 'ez: '.$row['ez'].', az: '.$row['az'].', amaz: '. $row['ez'];
}Itt láthatsz még bőven példát PDO használatára:
http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Executing_prepared_statements_in_a_loopItt bindParam()-ot használ:
$values = array('bob', 'alice', 'lisa', 'john');
$name = '';
$stmt = $db->prepare("INSERT INTO table(`name`) VALUES(:name)");
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
foreach($values as $name) {
$stmt->execute();
}Itt egy példa tranzakciók használatára:
try {
$db->beginTransaction(); // note that calling beginTransaction() turns off auto commit automatically
$db->exec("SOME QUERY");
$stmt = $db->prepare("SOME OTHER QUERY?");
$stmt->execute(array($value));
$stmt = $db->prepare("YET ANOTHER QUERY??");
$stmt->execute(array($value2, $value3));
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
Nem nézegettem még a kódját ilyen szinten, de most elég nagyot csalódtam a WordPress-ben (legalább tudom, minek a kipróbálásával ne akarjam tölteni egy percemet sem ), hogy ilyen elképesztő ordas nagy baromság ott virít szépen a dokumentációban, ami elvileg arra való, hogy a fejlesztők és érdeklődők tanuljanak belőle. Először azt hittem, viccelnek, aztán majd ott lesz a vigyorgós fej, hogy jól van, csak vicceltünk, ne vegyél mindent olyan komolyan, de sajnos komolyan gondolják.
Ez az "olyan, mint a f*szom, egy igazi csődtömeg, bottal sem piszkálnám" mondatrészleted igen érdekesen hangzik, remélem, azt vágod. Furcsa egy (ön)kritika. Mondjuk ezen legalább jót röhögtem.
[ Szerkesztve ]
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz PumpkinSeed #14946 üzenetére
Ezt ugye vágod?
Igaz, itt nem core módosításáról van szó, hanem egy moduléról, de a modulok kódjába is csak végső esetben kéne beletákolni, hiszen egy update során úgy, ahogy van, elúszhatnak a módosításaid (hiszen update-eled a modul teljes könyvtárát) - aztán szenvedhetsz vele, hogy az azóta esetleg jelentősen megváltozott kódbázisba valahogyan megint belehegeszd. Tehát saját modulból vagy sminkből éri meg ilyenkor módosításokat végezni.
VAGY ha úgy nem megoldható, akkor megnézed, van-e frissebb változat a modulból; megnézed az issue queue-ban, nyitottak-e már topicot az adott problémának drupal.org-on, a modul vonatkozó hibalapján, született-e már patch a hiba megoldására; ha nem nyitottak, nyitsz issue-t, beleírod a problémát, és annak megoldását egy patch formájában. Elsőre bonyolultnak hangzik, de nem az, gyorsan megvan. Cserébe segítettél a közösségnek, ha jó a patch, akkor elfogadhatja a fejlesztő, és committolhatja, majd ha pusholja, akkor jó esetben feltünteti a nevedet; mindenesetre a dev-ágban máris elérhető lesz a javításod.Egyébiránt nekünk még azt sem árultad el, hogy a Drupalból és magából a modulból hányas változatot használod. Meg hogy egyáltalán milyen fájl sorairól beszélsz...
Ezenkívül van Drupal topic.Sk8erPeter
-
pakriksz
őstag
Ezzel mi a probléma?
$sql="INSERT INTO stats (ip, user, downloads) VALUES ('$userip','$user',1) ON DUPLICATE KEY UPDATE downloads = downloads + 1";Merthogy nem csinál semmit, de hibaüzenet sincs.
Ellenben így
$sql="INSERT INTO stats (ip, user, downloads) VALUES ('$userip','$user',1)";
működik.Egyébként azt szeretném, hogy az ip és a user egy kombinált primary key, és ha a hozzáadandó sornál ezek az értékek egyeznek a táblában lévővel, akkor a downloads számot emelje meg 1-el, és ne adja hozzá újra ugyan azt a sort.
[ Szerkesztve ]
Troll (nemhivatalos definíció): az akinek véleménye nem tetszik nekünk/nem értünk vele egyet. (10-ből 9 fanboy ezt ajánlja) || Fanboy 8 in 1 (Intel, AMD, Nvidia, konzol, PC,+minden politikai oldal) hiszen "ahol nem mi vagyunk, ott az ellenség"
-
PumpkinSeed
addikt
válasz Sk8erPeter #14964 üzenetére
Ahhoz képest, hogy ilyen információ szegényen adtam meg köszönöm a választ így is cselekszem ugyanis működik a változtatással.
Amúgy Drupal 6, és a modul verziószámát már nem tudom.
[ Szerkesztve ]
"Akinek elég bátorsága és türelme van ahhoz, hogy egész életében a sötétségbe nézzen, elsőként fogja meglátni benne a fény felvillanását." - Kán
-
Sk8erPeter
nagyúr
válasz pakriksz #14965 üzenetére
Pont itt tettem fel a kérdést költőien, ezelőtt 3 hsz.-szel, hogy hogyan lehetséges, hogy a mai napig ennyi összefűzött query van a kódokban, mikor a normális tutorialok első helyen kellene, hogy felhívják a figyelmet rá, hogy ez így gáz.
Ez a "nem csinál semmit, de hibaüzenet sincs" biztos? Hogyan kéred le a hibaüzeneteket?
Egyébként meg ennek a szintaktikának:$sql="INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1";tulajdonképpen nem sok értelmét látom (még ha egyébként helyes is!), amikor a következő:
UPDATE stats SET downloads = downloads+1
WHERE ip=:userip AND user=:user;szerintem sokkal beszédesebb.
Itt a query-ben direkt használtam a prepared statementes szintaktikát, a másik belinkelt hsz.-emben láthatsz példát rá, hogyan kéne átírni ezt a kódodat, hogy ne legyen összefűzött a query (mivel lehet, hogy nem megbízható adat, ha pl. query stringből érkezik, mindig érdemes a legrosszabbra számítani).
Hogy hogyan ellenőrzöd, hogy sikeres volt-e a query, vagy pedig történt valami hiba, azt is meg kellene mutatnod.=========================
(#14966) PumpkinSeed :
nincs mit.[ Szerkesztve ]
Sk8erPeter
-
pakriksz
őstag
válasz Sk8erPeter #14967 üzenetére
"INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1"Erre már ír hibát, méghozzá hogy "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':userip, :user, 1) ON DUPLICATE KEY UPDATE downloads = downloads + 1' at line 1"
Mint írtam, ha nincs benne azonos sor, akkor hozzá kell adni! Így az update nem jó ide.
Troll (nemhivatalos definíció): az akinek véleménye nem tetszik nekünk/nem értünk vele egyet. (10-ből 9 fanboy ezt ajánlja) || Fanboy 8 in 1 (Intel, AMD, Nvidia, konzol, PC,+minden politikai oldal) hiszen "ahol nem mi vagyunk, ott az ellenség"
-
Sk8erPeter
nagyúr
válasz pakriksz #14968 üzenetére
"Mint írtam, ha nincs benne azonos sor, akkor hozzá kell adni! Így az update nem jó ide."
Bocs, igazad van, én voltam a hülye, kevertem a REPLACE INTO ... SET ...-szintaktikával... Ami egyből be is illeszti az új sort, ha nincs olyan még.
De tulajdonképpen előnyt nem hoz ahhoz képest, amit most használsz, szóval a korábbit, amit írtam az UPDATE-tel kapcsolatban, inkább felejtsd el, bullshit, visszavonom."» "INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1"
Erre már ír hibát, méghozzá hogy "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':userip, :user, 1) ON DUPLICATE KEY UPDATE downloads = downloads + 1' at line 1""
Azért az jó, hogy kihangsúlyoztam, hogy ezt direkt PDO prepared statement-es szintaktikával írtam, és hogy nézd meg, amit itt írtam...
Nyilvánvaló, hogy ez így nem fog működni, amíg nem megfelelő módon használod.
A :userip-nek és a :user-nek a query-ben szükséges egy megfeleltetés, értéket kell adni neki a query előkészítése után, így működnek a prepared statementek. Előnyük, hogy az SQL Injection általuk nem lehetséges.
Direkt azért linkeltem be azt a hsz.-emet, mert ott írtam példákat, hogy lehet átírni PDO-sra a lekéréseket.De akkor berakom neked ide is, a saját példádhoz igazítva (ha el nem írom):
// csatlakozás
$db = new PDO(
'mysql:host=localhost;dbname=test_db', // test_db-t módosítsd a megfelelő adatbázisnévre
'root', // módosítsd
'1234', // módosítsd
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;', // egyből UTF-8-ra fogja állítani kapcsolódás után a karakterkódolást
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // kivételeket fog dobálni probléma esetén
)
);
$query = 'INSERT INTO stats (ip, user, downloads) VALUES (:userip, :user, 1)
ON DUPLICATE KEY UPDATE downloads = downloads + 1';
$stmt = $db->prepare ( $query );
$stmt->bindValue( ':userip', $userip );
$stmt->bindValue( ':user', $user );
$stmt->execute();ez fog dobni egy exceptiont, amit try-catch-blokkal kellene lekezelned. A [B]rowCount[/B]-metódusra ez vonatkozik:
http://hu1.php.net/manual/en/pdostatement.rowcount.php#109891
"Daniel Karp ¶1 year ago
Note that an INSERT ... ON DUPLICATE KEY UPDATE statement is not an INSERT statement, rowCount won't return the number or rows inserted or updated for such a statement. For MySQL, it will return 1 if the row is inserted, and 2 if it is updated, but that may not apply to other databases."Tehát ha a korábbi kód után írsz egy ilyet:
$affected_rows = $stmt->rowCount();
Akkor ezek szerint MySQL esetén az $affected_rows 1-et fog tartalmazni, ha új sor lett beszúrva, illetve 2-t, ha update-elve lett egy korábban már beillesztett sor.
Így ellenőrizheted, mi a query-d eredménye.[ Szerkesztve ]
Sk8erPeter
-
Speeedfire
félisten
Ha van egy változóm, amit átadok egy függvénynek akkor az csak a memória mutatót adja át, vagy lefoglal egy újabb memória darabot?
pl:$data = array(1,2,3,4,5);
functionName($data) {
return $data;
}Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
trisztan94
őstag
válasz Speeedfire #14970 üzenetére
Szerintem csak pointer, legalábbis a legtöbb normális OOP nyelv így működik.
https://heureka-kreativ.hu
-
moltam88
tag
válasz Speeedfire #14970 üzenetére
By default, function arguments are passed by value (so that if the value of the argument within the function is changed, it does not get changed outside of the function). To allow a function to modify its arguments, they must be passed by reference.
Vagyis alapértelmezetten érték szerinti paraméterátadás történik, új memóriát foglal a paraméternek.
-
Speeedfire
félisten
trisztan94 & moltam88: Köszi!
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Sk8erPeter
nagyúr
válasz Speeedfire #14970 üzenetére
Az előzőekhez még annyit, hogy PHP-ben nincsenek - pl. C-ből, C++-ból megismert - mutatók. Referenciák vannak:
http://www.php.net/manual/en/language.references.whatare.php"What References Are
References in PHP are a means to access the same variable content by different names. They are not like C pointers; for instance, you cannot perform pointer arithmetic using them, they are not actual memory addresses, and so on. See What References Are Not for more information. Instead, they are symbol table aliases. Note that in PHP, variable name and variable content are different, so the same content can have different names. The closest analogy is with Unix filenames and files - variable names are directory entries, while variable content is the file itself. References can be likened to hardlinking in Unix filesystem."
Ezeket amúgy érdemes átfutni:
http://www.php.net/manual/en/language.references.phpSk8erPeter
-
Speeedfire
félisten
válasz Sk8erPeter #14974 üzenetére
Ez talán még jobb is, mint a pointer.
Ezek után gyakrabban fogom alkalmazni, ahol ennek szükségét érzem.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
moltam88
tag
válasz Speeedfire #14975 üzenetére
Délután találtam még egy érdekes dolgot, de csak most tudtam utána nézni:
A referencia szerinti paraméterátadás nagyobb objektumok, tömbök esetén jelentősen gyorsabb mint az érték szerinti. Korábban a jobb teljesítmény elérése céljából nagy figyelmet kellett erre fordítani a paraméterátadás módjának, viszont PHP 5.0 bevezetésével megjelent a copy on write technika, melynek lényege, hogy az érték szerint átadott paraméter nem másolódik le a hívás pillanatában. A másolás lusta módon történik, csak abban az esetben, ha módosításra, írásra kerülne sor.
ForrásHivatalos dokumentációban pedig itt szerepel.
Szerintem így nem kell nagyon foglalkoznod a referencia szerinti paraméterádással, ha csak nincs rá kifejezetten szükséged.
Ez nekem is új dolog
[ Szerkesztve ]
-
Speeedfire
félisten
válasz moltam88 #14976 üzenetére
Hát, akkor ha jól értem nem is kell vele foglalkozni, mert a php eldönti saját maga.
Nálam is pont a nagy tömbök miatt jött ez most elő, emiatt is kérdeztem rá, hogy ilyenkor mit csinál valójában az átadott értékekkel.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
MODERÁTOR
válasz Speeedfire #14975 üzenetére
Szerintem ezt csak extrém esetben. Ha a spórolás a célod akkor nem hiszem, hogy sokat nyernél vele.
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
MODERÁTOR
Erről beszéltem: public function blabla(&$tömb) {}. Tovább gondolva a gondolatmenetem, mikor is jó ezt alkalmazni? Az oké amit leír a dokumentáció de a való életben pl.?
[ Szerkesztve ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
fordfairlane
veterán
Kissé mintha kevernétek a PHP függvény paraméterátadást, a referenciatípusokat, a referencia szerinti paraméterátadást, és hogy az mire is jó tkp. A többi stimmel.
[ Szerkesztve ]
x gon' give it to ya
-
MODERÁTOR
Nem is ezt írtam, hogy mit használna - szerintem simán elbeszélünk csak egymás mellet.
fordfairlane: lehet, igazad van félreértem. De akkor kérlek tedd helyre a dolgokat. Nem szeretnék fals infót továbbadni, tudatába lenni.
[ Szerkesztve ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
cucka
addikt
Arra jó, ha olyan függvényt szeretnél írni, ami a paraméteren végez műveleteket és nem tér vissza semmivel. (Vagyis hát visszatérhetsz, de minek szopasd magad még jobban?) . Más szóval a függvényednek mellékhatásai vannak.
Amúgy nem javaslom a használatát, előnyösebb, ha a függvények mellékhatásmentesek.(#14983) fordfairlane
Szerintem nem keverte senki, jól írták. (Referenciatípus az nem is tudom, hogy micsoda amúgy )[ Szerkesztve ]
-
cucka
addikt
válasz fordfairlane #14988 üzenetére
Szerintem nincs félreértés. Annyi van, hogy objektumot csak explicit módon tudsz érték szerint átadni (értsd: manuálisan le kell klónozni, majd a másolattal hívni a kérdéses függvényt/metódust)
-
Sk8erPeter
nagyúr
válasz Speeedfire #14975 üzenetére
"Ez talán még jobb is, mint a pointer. "
Ezt meg hogy érted, hogy "jobb, mint a pointer"?"Ezek után gyakrabban fogom alkalmazni, ahol ennek szükségét érzem. "
Hát azért nem kell ennyire megörülni neki, akkor használd, ha valóban szükséges, erőltetni nem kell.Sk8erPeter
-
Speeedfire
félisten
Ha a spórolás a célod akkor nem hiszem, hogy sokat nyernél vele.
Ez szerintem attól függ, mennyire komplex a feladat/megoldás. Sok kicsi sokra megy.
Pl anno írtam, hogy excel fájlt generálok 60k+ sorral, ami phpexcel-el kb 1 óra volt. Addig-addig alakítottam, okosítottam az eljárásokat, hogy 3 perc alatt megcsinálja.
Sk8erPeter:
Ezt meg hogy érted, hogy "jobb, mint a pointer"?
Nem kell a memóriával foglalkozni, a rendszer elvégzi helyettünk és egyszerű alkalmazni.Hát azért nem kell ennyire megörülni neki, akkor használd, ha valóban szükséges, erőltetni nem kell.
Én sem arra gondoltam, hogy eszetlenül elkezdem használni.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
modder
aktív tag
válasz Speeedfire #14991 üzenetére
a copy-on-write memória modell miatt csak akkor kell referenciát használnod, ha paraméterben átadott változón akarsz úgy változtatni, hogy megtartsa az új értékét visszatérés után, csak ezt ugye illik metódus fejkommentjében feltüntetni.
Egyébként el tudom képzelni, hogy jóval hatékonyabb lehet nagy objektumok esetén, mintha visszatérnél:
public function csinalValamitObjektumon($objektum) {
$objektum->adat = 5; // lemasolja az $objektumot
return $objektum;
}
$objektum = new Objektum();
$objektum = csinalValamitObjektumon($objektum);Ennél jobb, ha referenciaként adod át, és nem térsz vissza vele.
http://hengrui-li.blogspot.hu/2011/08/php-copy-on-write-how-php-manages.html -
Speeedfire
félisten
válasz modder #14992 üzenetére
Igen terjedelmes cikk, ami nagyon jól boncolgatja a témát. Pont ez volt az amit első körben is ki szerettem volna deríteni a php memória felhasználásával kapcsolatban.
Jó tudni, hogy vannak ilyen "hint-ek" is, amivel "takarékoskodni" lehet.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
fordfairlane
veterán
válasz Speeedfire #14993 üzenetére
Jó tudni, hogy vannak ilyen "hint-ek" is, amivel "takarékoskodni" lehet.
Pont arról ír, hogy memóriatakarékoskodás miatt nincs értelme referenciát használni. Tipikus premature optimization, ami the root of all evil.
Referencia szerinti paraméterátadást akkor érdemes használni, ha a függvény paramétereket módosítani akarod.
[ Szerkesztve ]
x gon' give it to ya
-
veterán
belefutottam egy hibába aminek a hatékony javítására nincs túl jó ötletem (ötlet van ami működik, de nem hatékony )
szóval van egy php fájl ami CSS-eket tölt be és az összerakja és "tömöríti" a css-t. Viszont kaphat paraméterként is fájlt a webről:
pl: <domain>css.php?fajl=css/teszt.css
viszont amire eddig nem gondoltam (illetve gondoltam de azt hittem evidens, hogy a ../-rel ne lehessen mászkálni a fájlrendszerben, de lehet) ezt hogyan lehet hatékonyan kivédeni?
arra gondolok, hogy nincs valami apache / php beállítás ami a document rootból nem engedi ki a phpt? -
Speeedfire
félisten
válasz fordfairlane #14994 üzenetére
Hát, akkor én nagyon félreértettem valamit, mert nekem pont az jött át, hogy ha referenciát használ, akkor ugyan arra a változóra hivatkozik és nem másolja át a memóriába.
Ergó van egy 5k-s tömb, amit átadok referenciával egy függvénynek, amit ott helyben feldolgozok akkor nem foglal le neki helyet a memóriában, hanem ugyan azt használja fel.Referencia szerinti paraméterátadást akkor érdemes használni, ha a függvény paramétereket módosítani akarod.
Ezt a függvény paraméter módosítást nem értem.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
fordfairlane
veterán
válasz Speeedfire #14996 üzenetére
Hát, akkor én nagyon félreértettem valamit, mert nekem pont az jött át, hogy ha referenciát használ, akkor ugyan arra a változóra hivatkozik és nem másolja át a memóriába.
Este írok regényt erről az egész paraméterátadás-témakörről.
x gon' give it to ya
-
modder
aktív tag
válasz Speeedfire #14996 üzenetére
igen, referencia szerinti átadás van, szerintem csak rosszul használtad ezt a "hint" kifejezést. A & jel nem egy "hint" az interpreternek.
-
-
modder
aktív tag
Ahha, ez érdekes, ezek szerint csak beépített típusokra működik, és objektum esetén pont úgy viselkedik, mint pl. a Java, és nem úgy, mint C++ (ott ugye objektumot is simán lemásolja, ha nem referenciaként van átadva).
Tömbnél nem meglepő módon lemásolja az egész tömböt (ebből indultam ki a példámnál):
function test($var)
{
$var['bar'] = 'foobar';
}
$foo = array('bar' => 'baz');
print $foo['bar'] . "\n"; // baz
test($foo);
print $foo['bar'] . "\n"; // bazEzek szerint objektumnál fölösleges is referencia szerint átadni abban az esetben, amit az előző hozzászólásomban írtam.
Kösz a helyesbítést
[ Szerkesztve ]
Új hozzászólás Aktív témák
Hirdetés
- Asszociációs játék. :)
- Mini PC
- Milyen légkondit a lakásba?
- Kínai és egyéb olcsó órák topikja
- Társasjáték topic
- Nem indul és mi a baja a gépemnek topik
- Xiaomi 14T - nem baj, hogy nem Pro
- Budapest és környéke adok-veszek-beszélgetek
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Samsung LCD és LED TV-k
- További aktív témák...
Állásajánlatok
Cég: HC Pointer Kft.
Város: Pécs
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest