Autor Zpráva
deter
Profil
Zdravím,
mám třídu db, která obsluhuje funkce spojené s databází. Ta je využívána v mnoha dalších třídách, jenže problém je ten, že instanci třídy db musím pokaždé vytvořit v té metodě (jiné třídy), v které ji chci použít.
Takže používám např třídu user, v jejímž konstruktoru chci objekt vytvořit a v různých metodách třídy user ho využívat, jenže to nejde, vždy to vypíše
Call to a member function ....neco() on a non-object 
.

Je tedy vytvareni instance tridy v konstruktoru jine tridy, v ktere bych ji chtel globalne pouzivat, nesmysl? Nebo jen neco delam spatne?
ShiraNai7
Profil
Definuješ třídu, vytvoříš a uložíš její objekt do pole $GLOBALS a pak můžeš k tomu objektu přistupovat odkudkoliv.
deter
Profil
ok, rychlovka :) díky
srigi
Profil
Za bezpecnejsie a korektnejsie sa povazuje predavanie objektu cca takto
class db
{
  // some variables
  public function query($command)
  {
    ...
  }
}

class user
{
  private $_db = null;

  public function __construct($db_adapter)
  {
    $this->_db = $db_adapter;
    ...
  }

  public function someMethod()
  {
    $query = "SELECT * FROM test";
    $result = $this->_db->query($query);
    ...
  }
}

$db = new db();
$usr = new user($db);
$books = $user->someMethod();
Pouzivaj skvor tento vzor, pred polom $GLOBALS. Ta vyssia bezpecnost tkvie v tom, ze tvoja aplikacia moze obsahovat chybu, vdaka ktoremu sa to globalne pole moze kompromitovat do vonkajsieho sveta. Takto kazdy uvidi tvoj DB objekt. Ked vsak pouzijes horeuvedeny vzor, objekt ostane uschovany v privatnej (nepristupnej) premennej, s ktorou mozu manipulovat iba tvoje metody (akysi druh API), cize kontrolovany kod.
deter
Profil
hezky, díky, tak já to teda znovu všechno přepíšu
ShiraNai7
Profil
srigi
V PHP 5 možná, ale v PHP 4 si s public a private moc neužiješ. Já bohužel musím programovat kompatibilně xD Pokud to tedy v PHP 4 vážně nejde a já jen nejsem dezinformován.

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: