[ 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();
}
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.