[ jelenanik @ 11.01.2016. 06:47 ] @
Pozdrav svima.

Prilično sam nova u pogledu OOP. Jasan mi je koncept nasleđivanja, znam kako da nasledim klasu koja je u istom folderu u kojem i klasa koja je nasleđuje, ali ne znam kako da nasledim klasu koja se nalazi u nekom drugom folderu.

Npr.

root_folder

folder1

controllers
models
neka_klasa_koja_treba_da_nasledi_drugu_klasu.php
views

folder2

controllers
models
neka_druga_klasa_koja_ce_naslediti_klasu_za_nasledjivanje.php
views

folder3

controllers
models
klasa_koju_treba_naslediti.php
views

Znači, moje pitanje je: Kako da mi klase iz fajlova "neka_klasa_koja_treba_da_nasledi_drugu_klasu.php" i "neka_druga_klasa_koja_ce_naslediti_klasu_za_nasledjivanje.php" naslede klasu iz fajla "klasa_koju_treba_naslediti.php"?

Hvala unapred.

P.S. Iz nekog razloga ne mogu lepo da napravim strukturu (da uvučem red, pa ispadne kao da su svi folderi u istom nivou). Dakle, u root-u se nalaze folderi: folder1, folder2 i folder3. U svakom od njih folderi controllers, models i views, a u odgovarajućem models folderu se nalaze pomenuti fajlovi.


Možete zaključati temu, snašla sam se.

[Ovu poruku je menjao jelenanik dana 11.01.2016. u 12:13 GMT+1]
[ VladaSu @ 12.01.2016. 11:42 ] @
Pa samo u include navedes pravu putanju
[ jablan @ 12.01.2016. 12:30 ] @
I koristi [code] tagove kako bi sačuvala formatiranje prilikom pejstovanja.
[ Nemanja Avramović @ 30.01.2016. 14:16 ] @
Nije bitno u kom je folderu klasa, ako je ispravno inkludovana biće dostupna u globalnom scope-u i moći će da je nasledi nova klasa.

Ako koristiš neki framework obično imaš način da "elegantno" inkluduješ klase, da li preko ugrađene Loader klase ili preko php autoloadera. Ako radiš "klot" php, možeš ručno da inkluduješ, a možeš da praviš i svoju loader klasu, odnosno (preporučljivo) autoloader.
[ plus_minus @ 31.01.2016. 12:01 ] @
jelenanik, ukoliko koristiš php 5.4 pa naviše, baci pogled i ovde -> php Traits

A evo i banalnog primera za korišćenje trait mehanizma, nema extends nigde ..
Mnogo lakši život od kad je ovo uključeno u igru.

Code (php):


<?php namespace
{

// Neki tamo fajl, negde.. imamo putanju do njega

     trait private_properties
     {
          private $path;
          private $file_;
          private $pack_;
     }

// Neki tamo drugi fajl, negde.. takođe imamo putanju do njega

     trait private_methods_uno
     {
          private function getFilePrivate()
          {
               if(is_file($this->path))
               $this->file_ = file_get_contents($this->path);
          }
     }

// I treći fajl, negde.. naravno, imamo putanju i do njega

     trait private_methods_due
     {
          private function putFilePrivate()
          {
               if(!is_string($this->file_))
                    die('Fajl verovatno i ne postoji ... ');
               else
               {
                    $this->pack_ = base64_encode($this->file_);
                    file_put_contents(("{$this->path}.bak"), $this->pack_, LOCK_EX);
                    $this->pack_ = null; $this->file_ = $this->pack_;
               }
          }
     }

/*
     Glavna klasa, (`final` je ovde radi kozmetike)
     pre nego što klasa dođe na red, treba priključiti (include/require_once , itd.. )
     potrebne "trejtove", logično.
*/


     final class opcodeToString
     {
          use
               private_properties,
               private_methods_uno,
               private_methods_due;

// KLJUČNA REČ - `use`
// U sklopu klase, priključuje `trait`
// Mimo klase, na samom početku skripte,
// služi za manipulaciju `namespace`-ova

          public function __construct($path)
          {
               $this->path = $path;
               $this->getFilePrivate();
          }

          public function putFile()
          {
               $this->putFilePrivate();
          }

     }

     $filepath = '/my/path/to/opcode.php';
     $ots = new opcodeToString($filepath);
     $ots->putFile();

}