Autor | Zpráva | ||
---|---|---|---|
SeparateSK Profil |
Dobrý deň, potreboval by som vedieť ako vytvoriť class v classe - pre lepšie triedenie.
Mám tento kód: <?php class JLSocial{ public static function VymazFoto($id){ //Script na vymazanie fotografie z databázy a zo servera echo 'Funguje!'; } } ?> JLSocial::VymazFoto(...); Samozrejme potrebujem to nejak kategorizovať, lebo funkcií VymazFoto budem potrebovať viac, jednu pre statusy a druhú pre galériu. Teda by som potreboval niečo ako: JLSocial::Galeria::VymazFoto(...); Tak som to skúsil: <?php class JLSocial{ class Galeria{ public static function VymazFoto($id){ //Script na vymazanie fotografie z databázy a zo servera echo 'Funguje! FotoID: '.$id; } } } JLSocial::Galeria::VymazFoto(2); ?> Parse error: syntax error, unexpected T_CLASS, expecting T_FUNCTION in C:\wamp\www\globchat\cc.php on line 3 Vedel by mi niekto pomôcť? |
||
DJ Miky Profil |
#2 · Zasláno: 20. 7. 2012, 11:56:26
Vnořovat třídy nelze, místo toho můžeš použít jmenné prostory.
|
||
Tori Profil |
SeparateSK:
V obou kontextech (status, galerie) se ty metody mají chovat identicky, anebo jde spíš o stejné rozhraní (jehož implementace se v různých kontextech může měnit)? Čím se od sebe ty kontexty liší - nemohly by mít společného abstraktního předka (např. AbstractGraphicComponent) + interface? Koukněte kdyžtak i na traits. |
||
SeparateSK Profil |
No , nelíšia sa až tak veľmi. Viem mohol by som tie funkcie zlúčiť ,tak ,že by som pridal ešte jeden argument, ktorý určí typ.
<?php class JLSocial{ public static function VymazFoto($id,$type){ //Script na vymazanie fotografie z databázy a zo servera if($type=="galeria")echo "Galeria"; elseif($type=="status")echo "Status"; } } ?> JLSocial::VymazFoto(2,"galeria"); |
||
Ugo Profil |
#5 · Zasláno: 20. 7. 2012, 13:25:35
SeparateSK:
DJ Miky nabídl namespace, to je přesně to co hledáš, jedinej problém je složitější syntaxe ale hlavně funkčnost až od 5.3 :( |
||
SeparateSK Profil |
No práve to :( Ja mám PHP 5.2.6
A keď som tento kód : http://sk.php.net/manual/en/language.namespaces.rationale.php skúšal teraz na nejakom freehostingu ktorý podporuje php 5.3+, tak jediný výsledok bol 500 Internal Server Error |
||
Ugo Profil |
#7 · Zasláno: 20. 7. 2012, 13:45:57
SeparateSK:
aha tak to upřímnou soustrast, taky sem nucen držet u všeho kompatibilitu s 5.2 ... tak prefixy, tak to "řeší" zend - neni nic hezčího než Application_Social_JLS_Photos_Gallery :p vlastně je to totožný, jen se nedaj nějaký ty části v kontextu vynechat takže ten zdroják je pak asi luxusní ;) |
||
SeparateSK Profil |
No ,tak som to robil doteraz :D
Teda: JLSocial_Galeria_VymazFotku($id);
Alebo určením typu akcie: JLSocial_VymazFotku($id,$typ);
|
||
Tori Profil |
#9 · Zasláno: 21. 7. 2012, 12:46:26
SeparateSK:
Pořád mi nejsou jasné dvě věci: 1. jaký vztah je mezi objekty JLSocial a [Status nebo Galerie]? (jestli se nedá použít kompozice, JLSocial::get('galerie')->vymazFotku($id) )
2. jestli objekty Status a Galerie mají něco společného nebo ne? (např. jestli můžou mít společného abstraktního předka) (ale možná jsem jen nepochopila, čeho vlastně chcete dosáhnout.) |
||
SeparateSK Profil |
O tej kompozícií som nikdy nepočul, ale skúsil som to a je to presne to čo hľadám a funguje to v PHP 5.2.6, takže ďakujem :) .
Tu je kód: <?php class Galeria{ function Galeria(){ echo "Galéria initializovaná!<br>"; } function PridajKomentar($fID,$aID,$komentar){ echo "Komentár pridaný ku fotke $fID, autorove ID: $aID:<br> <i>$komentar</i><br>"; } } class Status{ function Status(){ echo "Statusy initializované!<br>"; } function PridajKomentar($sID,$aID,$komentar){ echo "Komentár pridaný ku statusu $sID, autorove ID: $aID:<br> <i>$komentar</i><br>"; } } class JLSocial{ var $Galeria; var $Status; function JLSocial(){ echo "JLSocial initializované!<br>"; $this->Galeria=new Galeria(); $this->Status=new Status(); } } $JLSocial=new JLSocial; $JLSocial->Galeria->PridajKomentar(1,1,"Ahoj!"); $JLSocial->Status->PridajKomentar(1,1,"Vitaj!"); ?> 1. JLSocial je jadro ,pod ktoré by mali spadať objekty Galeria a Status. 2. Obe patria pod jadro socialnej siete ,ktorú tvorím. Rozdiel medzi Status a Galerie , je vo vykonávaní funkcie na danom mieste v DB a na serveri. JLSocial::Galeria::VymazFoto($id) - vymaže fotografiu s ID $id zo servera a z databázy JLSocial::Status::VymazFoto($id) - vymaže fotografiu zo všetkých statusov ktoré boli kedy pridané. Lepšie by to asi popísala funkcia: PridajKomentár :) ,pri ktorej to je už jasné. |
||
Časová prodleva: 12 let
|
0