Dryper Skrevet 7. februar 2012 Del Skrevet 7. februar 2012 Sitter og vurderer å gå litt dypere inn i PHP verden og komme meg til OOP delen av PHP. til nå har det gått mye i bare kommando henting og null classes, methods. Jeg har ikke så sinnsykt greie på OOP og egentlig så lurer jeg bare på hvordan det fungerer med PHP? Hvorfor bør jeg gå for OOP og hva gjør det til en bedre løsning? For et par måneder siden prøvde jeg meg såvidt på OOP i php med å lage meg en random team generator (skriver inn 8 navn og randomizer dem til et 4v4 lag.) Unasett. det endte opp med at jeg prøvde og lage hver spiller som et objekt og ha 2 teams som et objekt. Men det endte opp med Objectception og det gikk generelt til helvette (På grunn av at jeg ikke helt fatter OOP) Men ja noen som har en GOD guide, evt en god på forklaing på hva det er ? mvh Dryper Lenke til kommentar
vevo1992 Skrevet 7. februar 2012 Del Skrevet 7. februar 2012 Har du sjekket http://www.php.net/manual/en/language.oop5.basic.php ? Lenke til kommentar
Dryper Skrevet 7. februar 2012 Forfatter Del Skrevet 7. februar 2012 Har du sjekket http://www.php.net/manual/en/language.oop5.basic.php ? joda den er lest et par ganger, men syns ikke den holder mål for å skjønne fordeler iforhold til "gamlemetoden" og i hvilken sammenheng du vil bruke OOP ovenfor vanlig Procedural. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 7. februar 2012 Del Skrevet 7. februar 2012 (endret) Der er en gratis bok http://www.computer-books.us/php_2.php hvor Stig Bakken http://stigbakken.com/ som lagde det anerkjente php bibliotektet pear er medforfatter. For øvrig synes jeg Professional PHP 6 er en brukbar bok: http://www.webproworld.com/webmaster-forum/threads/93349-Professional-PHP-6 Onde tunger vil ha det til at noen av disse php 6 bøkene skrevet lenge før php 6 er ferdig kun er ute etter salg, oppmerksomhet og omtale. Det er jeg uenig i, da det meste av det som ventes implementert i php 6 er klart. Unikoding er det som forsinker php 6 i følge den informasjonen jeg har. Som ventet, når jeg nå Googler php 6 har Wikipedia overtatt førsteplassen og den tråden jeg leter etter fra stackoverflow har druknet. Google: php 6 site:stackoverflow.com og du finner denne http://stackoverflow.com/questions/2610763/what-is-the-holdup-on-php-6 tråden. The recent release of PHP 5.3 included most of what was originally desirable about PHP6 og Php 6 has not been relased as a stable product yet. Therefor no one should use it for a serious project. Se også: PHP 5.4.0 RC6 released http://www.php.net/ PHP 5.4 includes new language features and removes several legacy (deprecated) ... No new features should be included before the final version of PHP 5.4.0. Så det er uklart for meg hvor lenge det tar før noen seriøse test versjoner av php 6 er tilgjengelig. Navnerom er nå implementert samt multippel arv for "interfaces". Endret 7. februar 2012 av Slettet+9871234 Lenke til kommentar
dahuff Skrevet 7. februar 2012 Del Skrevet 7. februar 2012 (endret) Jeg har ikke så sinnsykt greie på OOP og egentlig så lurer jeg bare på hvordan det fungerer med PHP? Hvorfor bør jeg gå for OOP og hva gjør det til en bedre løsning? For et par måneder siden prøvde jeg meg såvidt på OOP i php med å lage meg en random team generator (skriver inn 8 navn og randomizer dem til et 4v4 lag.) Unasett. det endte opp med at jeg prøvde og lage hver spiller som et objekt og ha 2 teams som et objekt. Men det endte opp med Objectception og det gikk generelt til helvette (På grunn av at jeg ikke helt fatter OOP) Du kan lage tre klasser. En personklasse, en teamklasse, en namemakerklasse. Poenget med OO er å delegere en oppgave til hver klasse, slik at det blir enklere å bruke disse på nye måter, slik at ett team kan gjenbrukes i en liga, en personklasse kan brukes i to team og ikke bare ett, osv. OO foretrekkes fordi programmet kan modelleres etter objekter du finner i virkeligheten. Ett viktig prinsipp i OO er å ikke gi klassene for mange egenskaper. Personklassen kan ha to metoder, setName("Per Olav") og getName(). Navnet lagrer du i en privat streng i klassen. Navnet kan gjerne kunne settes i konstruktøren i tillegg. Teamklasse kan holde på personer og du kan gi denne følgende metoder, addPerson(Person $person), getTeam(). Hver person lagres i ett privat array. Når du kaller getTeam() kan du f.eks. returnere det private array'et. Person og teamklassene er enkle, de gjør ikke annet enn å ta vare på sammensetningen på laget og returnerer navn og slike ting. NameMaker-klassen er litt mer avansert, siden du skal spørre den om noe og den skal returnere noe. Det er hele oppgaven til NameMaker. Her kan du f.eks. gi den en konstruktor som tar i mot ett array med navn som den skal plukke tilfeldige personnavn fra. Navnearrayet lagres i en privat variabel og du kan hente ut ett nytt navn med getRandomName(). Så, her kommer det fine med OO. Hvordan setter du dette sammen? $names = array("Olsen", "Fredrik", "Kari Tråd", "Kong Olav"... osv); $nameMaker = new NameMaker($names); $teamA = new Team(); for($i=0; $i < 4; $i++) { // Legger til personer i team A.. $person = new Person(); $name = $nameMaker->getRandomName(); $person->setName($name); // Setter navn i metodekall. $teamA->addPerson($person); } $teamB = new Team(); for($i=0; $i < 4; $i++) { // Legger til personer i team B.. $person = new Person($nameMaker->getRandomName()); // Setter navn i konstruktør. $teamB->addPerson($person); } $teamA og $teamB er nå to lag som du kan bruke som du ønsker. Du behøver heller ikke å vite så mye om objektene. Siden hver klasse bare gjør en oppgave og det går an å anta hva de brukes til bare ved å se på navnet, blir kodesnutten her nesten selvforklarende. Du behøver bare å vite hvilke metoder klassene har og behøver aldri å tenke på hvordan objektene fungerer på innsiden. En sannhet det tar litt erfaring til før man begynner å forstå er at man gjennom livet kommer til å lese mer kode en hva man skriver. Det vil derfor hjelpe å gjøre det slik som jeg har forsøkt å illustrere her. Du behøver ikke å forstå hvordan hele programmet fungerer for å vite hva denne koden gjør, og koden er gjenkjennbart for andre som kan OOP. Med god OO praksis kan man konsentrere seg om en liten del av programmet omgangen (dersom man følger god OO praksis vell og merke). Det er egentlig ganske greit å forstå OOP så snart du begynner å tenke i objekter. [Edit: Fikset PHP syntaks og litt forskjellig.] Endret 7. februar 2012 av dahuff 1 Lenke til kommentar
Dryper Skrevet 7. februar 2012 Forfatter Del Skrevet 7. februar 2012 Tusen takk for to fantastiske innlegg om OOP PHP, jeg skal ta å gå igjennom den boka, samt sjekke opp og studere litt rundt den kodesnutten dere gav meg. Dette her var intet mer en fantastisk! igjen takk mvh Dryper Lenke til kommentar
Kaptein Snus Skrevet 8. februar 2012 Del Skrevet 8. februar 2012 (endret) Du burde ta en titt på youtubebrukeren JreamDesign. Han har en hel playlist med PHP OOP tutorials. Jeg leste mange guider på nettet om OOP i PHP, men fikk aldri noe særlig ut av dem. Link til playlist: Endret 8. februar 2012 av Lek1 Lenke til kommentar
MikkelRev Skrevet 9. februar 2012 Del Skrevet 9. februar 2012 En måte er å lære seg OOP PHP er å lære seg CodeIgniter. CodeIgniter (CI) er et rammeverk for PHP. Dette rammeverket er helt objektorientert. I tillegg til at alt blir objektorientert, får du også andre fordeler med på kjøpet. Kan nevne ryddig og strukturert kode da man har et fast oppsett på koden. MVC - for å skille koden i logiske enheter (kontroller, modeller og views(grensesnitt/html)). Og DRY - don't repeat yourself blir sannsynligvis en større realitet enn før. Man blir med CI nesten "tvunget" til å skrive ryddig kode og bruke "best practices", uten at det på noen måte er negativt begrensende. Det finnes også noen gode videotutorial-serier for CI, og CI har veldig bra dokumentasjon samt et veldig stort community, så det er lett å finne hjelp på IRC eller web. http://www.codeigniter.com/ Lenke til kommentar
Crowly Skrevet 10. februar 2012 Del Skrevet 10. februar 2012 Begynte å lære meg oop for litt over ett år siden, denne serien med guider er god (imo): Object-Oriented PHP for Absolute Beginners Object-Oriented PHP: Delving Deeper into Properties and Methods Object-Oriented PHP: Working with Inheritance Object-Oriented PHP: Autoloading, Serializing, and Querying Objects 1 Lenke til kommentar
MikkelRev Skrevet 13. februar 2012 Del Skrevet 13. februar 2012 Mange av de OOP-tutorialene er sikkert gode til å få en god forståelse av OOP. Men når man skal lage noe nytt fra scratch, kan det likevel fort bli vanskelig å tenke ut hvordan man ta i bruk OOP for dette prosjektet. Om man bruker CodeIgniter, skriver man OOP med engang. Lenke til kommentar
Sono Juventino Skrevet 16. februar 2012 Del Skrevet 16. februar 2012 (endret) Å begynne rett på et rammeverk er da ikke noe å anbefale for læringens del. Problemet med objekt-orientering er da ikke å få det til å fungere, men å lære seg måter å skrive gode klasser på. Du lærer ikke nødvendigvis komposisjon, arv og grensesnitt av å jobbe med CodeIgniter. Ønsker du å lære objekt-orientering, vil jeg anbefale noen bøker på engelsk. Den første er David Powers' Oject-oriented solutions. Glimrende bok med gode eksempler som klarer kunsten å ikke overkomplisere ting. Når du først forstår hva Powers skriver om, vil jeg anbefale Matt Zandstras Objects, Patterns, and Practice. Denne boka er ikke for de helt nye til OOP, til tross for at du sikkert får endel ut av de første kaptlene dere han gjennomgår helt basic. Anbefales virkelig for de som ønsker å sette seg litt skikkelig inn i objekt-orientert programmering i PHP. MikkelRev: OOP kan kodes like spagetti-aktig som prosedyrekode. For å overdrive eksempelet, så forstår man ikke objekt-orientering om man smekker sammen 10 klasser med statiske funksjoner og variabler. Det er ikke bare-bare å sette seg inn i MVC-strukturen for nye kodere heller. Endret 16. februar 2012 av Sono Juventino Lenke til kommentar
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å