15. oktober 2004 - 08:18Der er
36 kommentarer og 1 løsning
lidt hjælp til en begynder i OOP
Nå men nu starter jeg lige et nyt spørgsmål her. Tror ik helt jeg har forstået det med OOP helt alligevel :s Alså hvad jeg ikke har forstået er hvad man skal bruge new til for det første ihvertfald. Ud over det så har jeg været igang med et lille forsøg på at lave en lille gæstebog i OOP dog er jeg kørt fast nu og vil høre om i kan hjælpe mig på rette vej med en god forklaring der til og lige fortælle om jeg også er helt galt på den eller om jeg har fat i noget af det rigtige... Nå men først kommer her lidt kode til jer:
Main.php -------- <?php require("config.php");//Forbindelsen til databasen require("class.php");//min oop fil ?> <form action='' method="post"> Dit navn:<br> <input name="navn" type="text"><br> Din besked:<br> <textarea name="besked" rows=15 cols=50></textarea><br> <input type="submit" name="gem" Value"gem"> </form> <?php if (isset($_REQUEST['gem'])) { mysql_query("INSERT INTO gbog (navn, besked) VALUES ('$navn','$besked')"); } ?> Se den virker jo egentlig fint nok sådan her, men hvis jeg skal have noget OOP ind i det så er det jeg ikke ved hvor og hvordan det skal gøres og da håber jeg i kan hjælpe mig med at forklare hvor og hvordan.
class.php ------------ <?php class Gbog{ var $navn, $besked;
function skriv($navn,$besked){ $this->navn=$navn; $this->besked=$besked; }
Function vis_gb ($navn,$besked){ return $this->navn; return $this-besked; } Er jeg helt galt på den eller...?
tja det har du nok ret i det er, men any way man skal vel starte i det småt med at lære det og så udbygge det. Da jeg skulle lære at bruge php + mySQL byggede jeg en hel masse gæstebøger og nyheds scripts bare for at lære det så skulle da mene jeg har lidt tjek på det med at indsætte ting i en database og hente dem frem igen osv og derfor synes jeg at det nok ville være lettest for mig at lære OOP ved at kombinere det ind i en gæstebog til at starte med...
æh el_barto... Sorry men jeg tror ik lige jeg er med... Efter jeg har fået kradset det ned som i ser her inde så er jeg lige som blevet fuldstændig blank om hvordan jeg nu bruger det til noget og hvad jeg skal gøre og hvordan med alt andet så jeg foretrækker i starten at holde det hele så småt og let som overhovedet muligt. Alså hvordan jeg nu får mine indtastede data ind i min gæstebog kunne jeg egentlig godt tænke mig at vide som næste skridt. Da jeg ikke ved hvordan ville jeg jo skyde på noget i den her stil: mysql_query("INSERT INTO gbog ($this->navn,$this->besked ) VALUES ('$this->navn','$this->besked')"); men det ser sgu alt for besværlig ud. Så kan i give en god forklaring for jeg vil egentlig meget gerne lære det her da det ser ud som om det bliver meget brugbart ved større sider
Nogen gode standard klasser som du kan starte med at lave er fx en MySQL klasse. Denne klasse skal så indeholde din SQL forbindelse og Query osv. Denne klasse kan du også bruge senere hen.
Hvad ang. din gæste bog skal du have nogen funktioner til at sætte entrys ind i databasen og til at hente ud, og muligvis til at slette.
En god ide er at bruge id'er fra databasen til at hente ud fra, og ændre via.
Du har også en konstruktør, dette er en funktion i klasse som bliver kørt når du opretter objeketet. Konstruktøren skal hedde det samme som din klasse. Du kalder fx din klasse Gbog, så funktionen skal hedde: function Gbog() Tingende i denne klasse kunne fx være oprettelse af objektet fra MySQL klassen. Du må endelig skrive hvis der er mere du vil have at vide. Jeg har også nogen eksempler på klasser.
Vil dog dertil lige tilføje at jeg har læst de fleste af de artikler på nettet om OOP efterhånden tror jeg. Har søgt på google osv og læst og læst, men da det geniale ved php er at man jo næsten kan skrive den samme ting på en million forskellige måder er der jo heller ik én som skriver det på samme måde derfor synes jeg at blive mere forviret af at læse og læse hele tiden. Derfor vil jeg bare gerne hjælpes igang med det jeg har af kode som jeg egentlig forstår og så arbejd ud fra det så jeg kan "lære" det om jeg så må sige.
ser i jeg sidder her med hæftet "Start på php 5" og da er der også et lille afsnit om OOP og et "Stort projekt" til sidst hvor de benytter det. Dog bliver jeg også ret forviret af at læse dette. Alså hvis jeg forstår dig (drbean) rigtig så skal jeg lave noget i stil med det her:
Class Test{ var $noge_variabler...; function test(){ og her inde i min function som skal hedde det samme som min class skal jeg så have alle andre function som jeg så skal bruge eller hvad for til sidst så at afslutte det hele } For det er ik lige frem sådan de gør her i hæftet. De siger også at Class'en skal skrives stort og det gør de heller ik. Tror det er en del fejl i den...
Man laver en instans af objektet. Ellers kan du ikke bruge din klasse. Forstil dig det som en variable med en masse funktioner i (her er det alle dine funktioner fra klassen). Som du kan se i eks. bruger jeg $oBog->skriv, skriv kommer fra din klasse
selvom jeg er blevet meget mere forvirret lige pt end klogere :o/ så vil jeg lige sætte mig hen og læse det grundig igennem hvad du har skrevet og så prøve at arbejde med det selvom jeg er MEGA meget forvirret nu... Synes det er liiiidt for meget på en gang... Havde håbet på at 2 - 5 linjer kunne gøre det til at starte med så jeg forstod grundprincippet og selv kunne udvide det når jeg forstod det, men alligevel så tak for det ind til nu... Skal nok vende tilbage... Håber ik i bliver træt af mig, men ik alting jeg forstår så hurtig :s sorry... Men vil heller ik give op :)
Bare rolig jeg skal nok hænge i. I starten fattede jeg heller ik en meter af det med at indsætte noget i en tabel og slette noget i en tabel osv, men nu kan jeg det sgu snart med lukkede øjne så håber da også jeg kan lære det her. Ved ik om det er en trøst, men det her forstår jeg ihvertfald godt: function CMySQL() { $this->sUsername = "USERNAME"; $this->sPassword = "PASSWORD"; $this->sServer = "SERVER"; $this->sDatabase = "DATABASE"; $this->rQuery = NULL; $this->sLink = mysql_connect($this->sServer,$this->sUsername,$this->sPassword); mysql_select_db($this->sDatabase,$this->sLink); }
Synes egentlig bare at det er alt for meget at skrive når man egentlig kan skrive det meget kortere ;)
Ok nu tror jeg godt nok jeg er helt galt på den... Kan i lige hjælpe mig på rette vej og helst med så lidt kode som muligt tak. Alså jeg har stadig min class.php
<?php class Gbog{ var $navn, $besked;
function skriv($navn,$besked){ $this->navn=$navn; $this->besked=$besked; }
Function vis_gb ($navn,$besked){ $vis=mysql_query("SELECT * FROM gbog"); while ($result = mysql_fetch_array($vis)){ extract($result); $this->navn=$navn; $this->besked=$besked; }}
Da ved jeg så bare ik hvilken function jeg skal kalde for gbog ? og så hvis vi springer functionen skriv over i første omgang og går videre ned til min vis_gb Så har jeg sat den lille kode sammen der som sikkert er forkert ik? og så har jeg lavet en vis.php som ser sådan her ud:
næsten... $navn = new Gbog("navn") kan du desværre ikke gøre...
Først skal du have et objekt. Dette objekt indeholder så alle dine funktioner. fx $oBog = new Gbog(); Bagefter kan du kalde funkctionen vis_gb. fx $oBog->vis_gb($navn,$besked) det er vigtig du har begge parametre med.
og lige en anden ting. Du kan kun retunere en ting. Enten en streng, variable eller fx et array. Så jeg vil nok anbefale et array.
æh nu er jeg lidt forvirret (igen -suk-) nå men som det ser ud kommer jeg da i nærheden af noget af det rigtige. Kan du ik lige prøve at sætte det hele sammen så i mit script så jeg kan se helt præcis hvad du mener for jeg tror jeg er ved at have fat i troden her ;)
jeg laver lige en sammenfatning af hvad jeg egentlig har forstået :)
Alså man starter med at lave en Class som man kan kalde hvad man vil. Inde i den Class skal det være nogle variabler som man definer med var $en_variable; Så laver man nogle functioner som man har brug for. Sidst men ikke mindst slutter man så sin Class af igen.
Så går man ind på sin side hvor man skal bruge det og starter med at include eller require sin Class fil ind. og så tror jeg næsten at det er der jeg er stået af. Men har jeg forstået noget af det rigtig?
endelig har jeg forstået noget rigtig. hvis det ik er for meget... Kan man så ik få en hurtig forklaring på hvornår man bruger return? og hvorfor bruger du $oBog og $aArray hvorfor ik bare $bog og $array? og så har jeg lige slået var_dump op i manualen, men blev ik rigtig klogere på dens funtion...? Men når jeg har forstået det sidste her tror jeg at jeg har fangen princippet og så vil jeg prøve at lave sådan at man også kan sætte noget ind og slette osv så har jeg sikkert resten af dagen til at gå he he... Nå men den siger til mig: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\apache\htdocs\class.php on line 8 NULL Linie 8 er så return mysql_fetch_array($result); Men den besked får man da som regel kun hvis array'et er tomt...?
$oBog bruger jeg for at kunne se at bog er et objket det samme med $aArray, a står for array
var_dump udskriver bare alt i arrayet. Du kan køre en for løkke eller en for each.
return bruges når du vil returnere noget til selve koden du kalder den fra. Det kan være TRUE eller FALSE, eller et variable. TRUE/FALSE kan være hvis du vil se om en variable indeholder noget specielt, eller fx hvis en bruger skal logge ind. Ellers kan man lave nogen Get funktioner til at hente variabler tilbage. fx function GetNavn() { return $this->navn; }
Ej sorry drbean, men nu hænger det her mig sgu langt ud af halsen efterhånden :s Først forstår jeg det og så gør jeg ik og så forstår jeg lidt og så bliver jeg igen forvirret osv så tror bare jeg vil lægge det fra mig et par timer eller en dags tid og så vil jeg prøve igen. Alså lære det vil jeg sgu, men du kender det vel os hvis det hele bare hænger en LAAAANGT ud af halsen... Så hvis du vil have point så bare kom med et svar og så får du dem (og du fortjener dem virkelig os) og så starter jeg bare på en frisk når jeg er mere klar i hovedet... Har virkelig stiret mig blind på det lige pt...
alså det skal i da have her inde. I er ligeglade med point's og i har en herre stor tolmodighed. Er stoppet med at stille spørgsmål på webcafe.dk for de er sgu blevet træt af at jeg ikke lærer så hurtig. Når jeg får mod igen (sikkert i morgen) så tror jeg lige jeg vil prøve at starte lidt mere stille og roligt med det hele. Alså så vil jeg lave en MEGET simpel Class og bare lave noget i stil med at den skriver mit navn eller sådan noget før jeg går over til database med det. Men så lukker jeg da bare her, men regner stærkt med at vende tilbage i morgen for jeg NÆGTER at give op hi hi
Synes godt om
Slettet bruger
15. oktober 2004 - 15:55#34
Der er et par detaljer om din klasse (og din kodestil), som jeg vil kommentere:
1) Det hjælper på overskueligheden, hvis du laver en fornuftig opstilling af koden, så der f.eks. ikke lige pludselig står }}}. Det tager lidt længere tid at skrive, men den tid bliver hurtigt hentet hjem igen ved fejlsøgning.
2) Hvis din funktion i klassen skal hente alle rækkerne, så skal den ikke bruge return før den er færdig med at hente alle rækkerne og har samlet dem.
Jeg ville nok lave det i denne stil:
<?php class Gbog { var $navn, $besked;
var $query=false;
function vis_gb(){
// Dette kunne udelades, da du nok ikke ville kalde en gæstebog mange gange på en side. if($this->query!==false){ mysql_free_result($this->query); }
$minbog = new Gbog(); if ($minbog->vis_gb()){ while ($row=$minbog->hentpunkt()){ // udskriv rækken som sædvanligt } } else { echo "Gæstebogen er ikke tilgængelig." }
:o( damn jeg er forvirret nu. hvor === hvorfor ik bare == ? kan slet ik se mig ud af mere hvornår $this->noget skal bruges / hvordan den skal bruges... er totalt forvirret nu... Sorry gutter
Synes godt om
Slettet bruger
15. oktober 2004 - 16:51#36
$this->noget bruges når man inde en metode vil bruge en anden metode eller attribut i samme objekt. Det kan vist godt være, at man ikke altid behøver $this->noget men kan nøjes med noget() eller $noget, men da der er nogle situationer, hvor man skal bruge $this->noget og det også vil virke i de situationer, hvor det ikke er nødvendigt, så kan man lige så godt bruge det altid.
Det er dog ikke nødvendigt, når man bare benytter variable, der er interne i en metode - som f.eks. $vis - Den er bare en normal variabel i en funktion, som resten af verden ikke kender til.
Forresten: metode er bare det, man kalder funktioner i objekter, og attributter er variablerne i et objekt.
ret frustrende at det kan være så svært at forstå. Synes da jeg har lært en del php efterhånden. Har da lært at hente data fra en tabel og sætte ind, slette osv... Har lært alle de der forskellige if sætninger og case osv, men her synes jeg det er meget nyt ellers er det fordi jeg ikke kan se noget logik i det (endnu) Jeg vil lige læse en del artikler (som jeg har læst før) men på den ene eller anden måde vil jeg sgu lære det. Nå men som sagt vil jeg lige læse nu og så starter jeg ganske enkelt ud med at lave et eller andet smart hvor jeg kan skrive mit navn i et felt og så får jeg den skrevet ud på skærmen igen eller noget i den stil... Kan vel ik være så svært...?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.