Stránka 1 z 1

PHP volání funkce objektu v jiném objektu

Napsal: úte 21. zář 2010, 19:13
od arxeiss
Mám taky spíše teoretický dotaz. Mám li funkci v objektu kterou chci zavolat a instanci jsem nevytvořil v tom objektu, musím v té funkci použít

Kód: Vybrat vše

global $db;
Ovšem pokud mám třídu kde se téměř v každé funkci používá jedna a ta třída, napadla mě jedna věc, v konstruktoru za globální proměnnou třídy dosadit tu instanci. tj

Kód: Vybrat vše

class moje_trida{
  public $db;
  function moje_trida(){
    global $db;
    $this->db = $db;
  }
  function nejaka(){
    $this->db->nejaka_funkce_db();//zde se volá takto
  }
}
Ovšem nevím, jestli tím zbytečně nezatěžuju RAM, pokud je v té proměnné uložen pointer, tak je to v klidu, se akorát nakopíruje pozice na RAMce a je to v pohodě, a ušetřím tím třeba i desítku řádků v jedné třídě. Ovšem pokud to ukládá nevím co, tak může to zbytečně zpomalovat to kopírování, plus velký záběr na RAMku
Jaký na to máte názor?

Re: PHP volání funkce objektu v jiném objektu

Napsal: úte 21. zář 2010, 23:20
od OndraSter
Kdysi v php.net manualu jsem na toto tema cetl, ze PHP nuti pointery co muze samo o sobe, tudiz i tady.

Jinak proč nedat do konsturktoru parametr pro tu databázi?

Re: PHP volání funkce objektu v jiném objektu

Napsal: úte 21. zář 2010, 23:24
od arxeiss
OK, tudíž by toto mohlo být rychlejší než 10x psát global $db; pro každou funkci. Jinak ten dotaz nějak nechápu? Jakože si budu parametrem při vytváření instance vkládat odkaz na tu proměnnou? Myslím

Kód: Vybrat vše

class moje_trida{
  function moje_trida($db){
    $this->db = $db;
  }
}
Tak toto jsem měl poprvé, ovšem většinou v těch třídách mám plno nepovinných parametrů, a pak by to bylo složitější na ošetření atd... Takže toto se mi zdá výhodnější :)
Díky

Re: PHP volání funkce objektu v jiném objektu

Napsal: ned 15. kvě 2011, 13:52
od arxeiss
Je už to sice pasé, ale četl jsem knížku o OOP v PHP tak to tady doplním.
V době PHP4 při použití "=" při práci s objekty se objekt kopíroval. Pokud se měl předat pouze odkaz na objekt, používalo se "=&"
V PHP5 je toto změněno, a "=" předává pouze odkaz na objekt, a pokud chceme udělat kopii objektu, používá se $kopie = clone $original;

Shrnutí

Kód: Vybrat vše

     PHP4      |         PHP5
$new = $old;   |  $new = clone $old; //vytvoří 2 nezávislé objekty na sobě
$new =& $old;  |  $new = $old;          //v obou proměnných se nachází stejný objekt, změna jedné se projeví ve druhém