Gjest Slettet+142 Skrevet 21. desember 2006 Skrevet 21. desember 2006 hallo jeg har et problem. eller... ja. et problem. det er enormt irriterende å måtte huske på å legge inn "global $mysql;" i første linje i hver funksjon for at mysql-en skal virke.. er det noe måte å få en variabel til å gjelde i alle funksjoner og lignende? ja, jeg har jsett på php.net, men jeg er visst nok kjent for å se for dårlig over Takk ofr hjelp
MC2 Skrevet 22. desember 2006 Skrevet 22. desember 2006 vel, hvis det er en enkel streng, tall eller bool variabel kunne du bruke konstanter, ellers har du også $GLOBALS["mysql"], men du har sikkert hørt før at globals ikke er lurt å bruke i denne konteksten. en annen mulighet hadde vært å gjort om alle funksjonene dine til en eller flere klasser.
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 jeg bruker klasser.. og hvis jeg bruker define("link", mysqli_connect("xxx", "xxx", "xxx", "mydbxxx"), false); får jeg warning.. men hva er fordelen med å bruke klasser da? siden jeg allerede bruker klasser, virker det jo som om dette kanskje er noe bra?
Zic0 Skrevet 22. desember 2006 Skrevet 22. desember 2006 Når du bruker klasse kan du definere variabler for HELE klassen... Et eksempel: PHP <?php class test { var hei; function hallo(){ $this->hei = "yo"; echo $this->hei; } function yo(){ echo $this->hei; } } $test = new test; $test->hallo(); $test->hei(); ?>
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 (endret) ahh. jeg har ikke alle i en. men kan prøve noe lignende "rapporter" tilbake senere edit: faktisk så hadde jeg det på noe lignende måte. men i funksjonen måtte jeg da ha f.eks: <?php $mysql = new mysql(); function hei(){ global $mysql; $message = mysqli_fetch_assoc(mysqli_query($mysql->link, "SELECT 'jeghardetgøy' as 'message'")); echo $message["message"]; } ?> edit: kan jeg lage en klasse som "extender" alle de andre klassene mine, men at de andre klassene fremdeles kan brukes seperat? Endret 22. desember 2006 av Slettet+142
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 (endret) inheritance kalles det, og er noe alle objekt-orienterte språk har. Såvidt jeg husker gjør PHP dette med keywordet "extends": <?php class Klasse1 { protected $var1 = "Klasse 1"; } class Klasse2 extends Klasse1 { public $var2 = "Klasse 2"; } $k1 = new Klasse1(); // kan brukes som vanlig $k2 = new Klasse2(); // en utvidet versjon av Klasse1 echo $k2->var1; ?> Endret 22. desember 2006 av hockey500
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 kan jeg da ha <?php class Klasse1 { protected $var1 = "Klasse 1"; } class Klasse2 { protected $var2 = "Klasse 2"; } class Klasse3 { protected $var3 = "Klasse 3"; } class Klasse4 { protected $var4 = "Klasse 4"; } class Totalet extends Klasse1 extends Klass2 extends Klasse3 extends Klasse4 // eller må det gjøres med drittent? :P { public $total = "Klasse 2"; } $k1 = new Klasse1(); // kan brukes som vanlig $k2 = new Klasse2(); // kan brukes som vanlig $k3 = new Klasse3(); // kan brukes som vanlig $k4 = new Klasse4(); // kan brukes som vanlig $total = new totalet(); // en utvidet versjon av Klasse1 echo $k2->var2; echo $k2->var1; // virker ikke sant? echo '<br>'; echo $total->var2; ?> og det vil virke akkurat som ditt eksempel hockey500?
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 (endret) Nei, PHP støtter ikke multiple inheritance, så du kan kun extende en fra klasse. Og angående $k2->var1, det vil ikke funke siden Klasse2 ikke extender Klasse1. Jeg vet ikke hvordan støtten for multiple inheritance av interfaces er i PHP, men dette blir vel ofte regnet som en "workaround" for mangel på multiple inheritance av klasser. Personlig har jeg aldri sett nytten i interfaces, så hvis du har et godt svar på det kan du gjerne opplyse meg litt Endret 22. desember 2006 av hockey500
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 skjønner ikke hva du mener der du
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 Hvis du ikke har programmert i andre språk i php er ikke det så rart. PHP har for det første hatt dårlig støtte for oop (objekt-orientert programmering) inntil versjon 5, hvor dette har bedret seg. Interfaces er også et begrep du så godt som aldri vil snuble over i PHP-sammenheng, rett og slett fordi du ikke trenger det (bare min mening). Multiple inheritance: det du prøvde å forklare meg koden din, nemlig at en klasse samler funksjonaliteten til flere klasser ved å skrive class k1 {} class k2 {} class k3 {} class K extends k1, k2, k3 {} dette er ikke tillatt i PHP, men dette er tillatt: class k1 {} class K extends k1 {} Noen språk, som C++, har støtte har støtte for det jeg prøvde å gjøre i første eksempel. inheritance betyr "arv" på norsk, og det er nettopp det du gjør. du "arver" funksjonalitet fra en "parent class" (foreldreklasse). single inheritance, altså å arve fra en parent class, er derimot tillatt i PHP. Interface: sammenliknes ofte med en "kontrakt" som klasser må oppfylle for å være gyldige. Si at en klasse implementerer et interface (minKlasse extends mittInterface), da "lover" klassen din å implementere all funksjonalitet satt i interfacet. C#-kode, fordi det er det jeg er vant til. satser på at du skjønner poenget interface ImittInterface { // vanlig å starte interface-navn med en stor I string variabel1; int integer1; } class minKlasse : ImittInterface { // C# bruker : istedenfor "extends" public string variabel1; } Her har jeg et interface med 2 variabler, som da klassen må inneholde for å kunne brukes. klassen inneholder kun den ene variabelen, derfor vil det IKE gi an på lage et objekt av klassen. skriver du (i C#): minKlasse mittObjekt = new minKlasse(); så vil du få en feil. hvis du derimot legger til den andre variabelen i tillegg i klassen, vil det gå fint.
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 hmm...har holdt på å lese en bok om C++ i noen uker nå, men har ikke komt over OOP enda.. men jeg fikk ihvertfall svaret mitt; det går ikke an å ha en _variabel_ løselig i alle funksjoner uten bruk av globals takk for hjelp og kodevisning
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 (endret) Hvis den variabelen ligger i en klasse, og alle funksjonene dine er metoder i klassen, er det jo ikke noe problem. <?php class Klasse { public $var = "Hei"; function funksjon1() { echo $this->var; // funker fint } function funksjon2() { echo $this->var; // funker fint } } ?> Hvis du skal ha tilgang til den fra en annen klasse: class Klasse2 { var $var = $Klasse::var; function funksjon1() { echo $this->var; // funker fint } } Endret 22. desember 2006 av hockey500
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 problemet mitt er desverre at variabelen ligger i klassen "mysql", mens funksjonen ligger i klassen "site"
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 definerer du den som static er ikke det noe problem?
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 (endret) PHP <?php class k1 { public static $var = "Heisann"; function k1Metode() { echo var; } } class k2 { function k2Metode() { echo k1::var; } } ?> sånn cirka. alt jeg skriver er utesta, og det skal sies at jeg har ca 2 timers erfaring med OOP i PHP EDIT: okei, 3 timer. begynte når jeg leste tråden din Endret 22. desember 2006 av hockey500
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 jaha.. dette kan bli morsomt. har skrevet enormt med kode siden 21 igår. basert på å ikke kunne bruke dette må jo endre fra $this->link til self::link, og $mysql->link til $mysql::link, men det er jo bare å ta en liten "Søk og Erstatt" jeg gjør det litt senere. pga. av at nå dukket det "plutselig" opp en feilmelding som sa at den ikke fant klassen "news". den virket hele tiden, helt til jeg lastet opp til ftp-en min. noen ideer? (Fatal error: Class 'news' not found in C:\Documents and Settings\Stein Ivar\Skrivebord\newpage\allof\functions.php on line 10)
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 både klasse-filen og "hoved-filen" er lastet opp? bruker du include() til å inkludere den? passet på at den har riktig chmod-verdi? du referer ikke til C:\ettellerannet.class.php etter at du har lastet opp, det er en typisk nybegynnertabbe (ikke det at jeg vet noe om ditt nivå). ligger de i samme mappe?
Gjest Slettet+142 Skrevet 22. desember 2006 Skrevet 22. desember 2006 (endret) jeg har kodet PHP i ett år nå... OOP i 2 Mnd. egen server, og chmod riktig satt opp. men at det plutselig skulle klikke både på localhost og på serveren samtidig er rart øverst i index.php <?php define("IS_INCLUDED", true); include "all_of_php.php"; ?> i all_of_php.php <?php // all_of_php.php if(!IS_INCLUDED) header("HTTP/1.0 404 Not Found"); include "allof/defines.php"; include "allof/functions.php"; include "allof/added.php"; ?> allof/defines.php får dere ikke se... allof/functions.php <?php // functions.php include "allof/class/mysql.php"; if(!$mysql = new mysql() ) // die(STD_DIE); include "allof/class/news.php"; if(!$news = new news() ) //die(STD_DIE); include "allof/class/others.php"; if(!$others = new others() )// die(STD_DIE); include "allof/class/site.php"; if(!$site = new site() ) //die(STD_DIE); ?> de forskjellig klasse-efinisjonene: class mysql { class news { class site { class others { håper dette hjelper mer enn det er rotete edit: klassen myqsl har virket helt fint hele tiden edit: klassene "site" og "news" er de som ikke virker Endret 22. desember 2006 av Slettet+142
hockey500 Skrevet 22. desember 2006 Skrevet 22. desember 2006 det var ganske merkelig ja. Har ikke noe godt svar på det der skriver opp en liten sjekkliste likevel: 1: chmod 2: pass på at filen faktisk blir inkludert. sjekk om du kanskje får tilgang til noe annet i filen 3: sett all relevant kode som public 4: sett error_reporting(2047); kanskje du får vite noe mer? 5: har det funka før? hva har du gjort siden den gang? ellers er jeg blank for ideer.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå