| 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: 14 let
|
|||
0