Gå til innhold

Lære seg OOP Php


Anbefalte innlegg

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 (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
Videoannonse
Annonse
Gjest Slettet+9871234

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 av Slettet+9871234
Lenke til kommentar

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 (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 av dahuff
  • Liker 1
Lenke til kommentar

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

Å 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 av Sono Juventino
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...