Autor Zpráva
Public
Profil
Prečo sa v PHP kóde niekedy používa znak & ?
Napr.:
<?
class Data {
funkcia &Data($Data) {
$this->Recs[] &= Load($Data);
}
}
Alphard
Profil
U přiřazení se předává reference, ale před názvem metody jsem to teda ještě neviděl.
Tori
Profil
Public:
& před názvem funkce/metody viz http://www.php.net/manual/en/language.references.return.php (viděla jsem to asi v Nette\Object, nicméně tomu nerozumím, takže jen odkazuji na manuál)
Alphard
Profil
Tori:
Dík, když to vidím v manuálu, tak si začínám vybavovat, že jsem to viděl, ale snad nikdy nepoužil. Dostuduji.

Ještě dva odkazy vysvětlující klasické reference, pamětníci znají, je to z doby, kdy jsem zakládal svůj účet na této diskusi :-)
http://latrine.dgx.cz/php-puvab-optimalizace-rychlosti
http://latrine.dgx.cz/php-cerna-magie-optimalizace
SeparateSK
Profil
Má to tú istú úlohu ako v C++.
Odkazuje to na dané hodnoty, ktoré do toho vstúpia napr:
<?php
function zmen(& $a,& $b,& $c){
    $a+=1;
    $b+=2;
    $c+=3;
}
$x=1;
$y=2;
$z=3;
zmen($x,$y,$z);
echo "X: $x<br>Y: $y<br>Z: $z"
?>
& je na to,aby napr. funkcia zmenila hodnoty, ktoré do nej vstúpia.

Pôvodné X je 1, pôvodné Y je 2 , a pôvodné Z je 3.
Do funkcie vstúpia tieto 3 hodnoty s odkazom na to že $a je vlastne $x...
Ak sa zmení $a, tak sa zmení aj $x, lebo & $a odkazuje na $x

www.cplusplus.com/doc/tutorial/functions2/ síce to neni PHP ale je to vysvetlenie v C++
Alphard
Profil
Ještě jsem si vzpomněl na http://people.csail.mit.edu/pgbovine/python/tutor.html#mode=visualize není to pro PHP, ale hračka pěkná.
Keeehi
Profil
Pokud to chápu správně, tak je to to samé, jako když v Cčku chceme mít jako návratový typ ukazatel na něco. V Cčku se v definici funkce za datový typ napíše hvězdička. Jelikož v PHP datové typy nespecifikujeme, píše se ampersand před název funkce.

Kdyžtak mě někdo opravte.
AoJ.HgTS
Profil
[#7] Keeehi
ano, v podstatě to tak je. Rozdíl je pouze v tom, že použití & nezpůsobí zkopírování obsahu proměnné v paměti, ale pouze na obsah odkazuje. V PHP při předání jakkékoliv proměnné (string, int, array atd.) se jeho obsah zkopíruje a defacto se vytvoří nová proměnná, jestli proměnná obsahuje velké množství dat (načtený soubor, hodně řádku z databáze) zbytečně se obsah znovu a znovu kopíruje a zpomaluje to aplikaci. Jestli z proměnou potřebujete pouze číst, tj. zobrazit její obsah, mělo by se vždy používat &.

S úpravami je to složitější, jestli dostaneme proměnnou přes & a nějak jí změníme, zmení se u na původním místě.
Davex
Profil
AoJ.HgTS:
zbytečně se obsah znovu a znovu kopíruje a zpomaluje to aplikaci
Ne, obsah proměnné se zkopíruje až při první změně obsahu, takže se nedá říct, že každé přiřazení do proměnné zpomaluje. Viz vysvětlení na odkazech ve [#4].

Jestli z proměnou potřebujete pouze číst, tj. zobrazit její obsah, mělo by se vždy používat &.
Z předchozího tedy vyplývá, že toto není pravda. (PHP nepracuje stejně jako C/C++)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: