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

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

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

Příspěvek 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?
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
OndraSter
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 22. úno 2006
Bydliště: Praha / ČVUT FIT
Kontaktovat uživatele:

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

Příspěvek 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?
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32


Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

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

Příspěvek 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
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

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

Příspěvek 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
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Odpovědět

Zpět na „Programování a web“