Autor Zpráva
Spacebar
Profil
Zdravím.
Zkouším tvořit web v OOP, ale chci se vyhnout vícenásobné dědičnosti. Mělo by to být nějak takto:
• root
  - pracuj.php
  • tridy
   - vzhled.class.php (funkce generuj() )
   - databaze.class.php (funkce pripoj() )


No. A teď v tom souboru pracuj.php bude nějaký kód, který bude tvořit nějaké akce s těmi třídami. Bez problému. Ale co když potřebuji ve třídě vzhled používat třídu ke komunikaci s databází? Mám si udělat nějaký soubor, ve kterém budu mít inicializované objekty všech těch tříd, pak si ho includovat?
( nejakysoubor.php )
include "vzhled.class.php";
include "databaze.class.php";
$vzhled = new vzhled();
$db = new databaze();

Doufám, že jsem to vysvětlil aspoň aby to někdo pochopil :(
radvis
Profil *
vzhled.class.php ->

var $mysql;

  function __construct() {
    $this->mysql = new darabaze();
  }
  


Tak to budeš mít v každé třídě a pak kdyz chces neco vytáhnout z db:

$query = $this->mysql->queryObject("SELECT * FROM ".$this->obrazek." LIMIT 5 ");


Snat tomu nějak porozumíš.
Chazzy
Profil *
No pokud nejseš nijak zběhlej v návrhu aplikací, tak si zkus udělat jen třídu, třeba Application, v ní si nahraj všechny soubory co potřebuješ a v konstruktoru si vytvoř instance.

<?php
require_once "vzhled.class.php";
require_once "databaze.class.php";

class Application {

    public $db;
    
    public $vzhled;
    
    function __construct() {
        $this->db = new databaze();
        $this->vzhled = new vzhled();
    }
    
    //další kód
}


všechny další funkční třídy od této třídy odvoď a budeš v nich pak pouze používat

<?php 
class Neco extends Application {
    public function nejakaMetoda() {
        $this->db->neco();
    }
}
Nox
Profil
radvis:
Nepřijde mi dobrý nápad vytvářet v každém objektu nový mysql objekt pokud není potřeba zpracovávat více připojení nebo různými způspoby

Postup bude podobný co psal radvis, ale nepoužije se new databaze(), ale do proměnné se přiřadí už existující objekt zvenčí

http://www.potstuck.com/2009/01/08/php-dependency-injection/
Alphard
Profil
[#2] radvis
Kombinace var a __constuct? Funguje to, ale radši bych zůstal v PHP 5 a nemíchal verze.

Spacebar:
Ale co když potřebuji ve třídě vzhled používat třídu ke komunikaci s databází?
Ve třídě vzhled nemáte komunikovat s databází. S ní komunikuje model, ten předává data a vzhled se stará o vzhled. Vyhledejte si něco o MCV.
radvis
Profil *
Tak private a né var.
SpotRudloff
Profil
radvis:
A nebo public.
Spacebar
Profil
Nakonec jsem to vyřešil předáním.

class vzhled {
  
  var $db;

 function __construct($dbClObject) {
   $this->db = $dbClObject;
 }

}

Díky všem!
Toto téma je uzamčeno. Odpověď nelze zaslat.