konvertera existerande kod till OOP-php ?

Tråden skapades och har fått 8 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2004-07-13 18:19

Tja!
Försöker skriva om en website till OOP-PHP. Vet inte riktigt var jag ska börja. Om vi tar en liten del av projektet som exempel.

Jag har en mapp "transaction" med allt tillhörande transaktionshanterande.. mappen består nu av

transaction/new.php
transaction/update.php
transaction/delete.php
transaction/view.php
transaction/functions.php

Är det enda jag ska göra (filmässigt) att byta ut functions.php mot en transaktionsklass (Transaction.php) ?

När man ska skapa en ny transaktion så måste man väl fortfarande arbeta mot en "new.php"-fil ?
Så jag byter ut functions.php mot Transaction.php och sen skriver jag om logiken i var och en av de här filerna så de arbetar mot klassen istället?

Eller gör man på något annorlunda vis som jag förbisett?

OOP = Object Orientated Programming

Nyckelordet är i fet stil

Du måste alltså tänka ut vad klassens uppgift är. I detta fallet låter det ju som att din "transaction" är det som är själva grundobjektet. Jag gissar även att new.php, update.php, delete.php och view.php mest innehåller presentations logik?

Jag tror du måste plugga lite på konceptet, jag hittade följande länk som ser rätt ok ut för en snabb introduktion. Eller du kanske mest var ute efter lite praktiska tips på själva filstrukturen och inte så mycket själva OOP-konceptet?

Hinner tyvärr inte skriva mer just nu dock..

  • Medlem
  • Stockholm
  • 2004-07-14 11:28
Ursprungligen av johan dansk:

[...]
Jag tror du måste plugga lite på konceptet, jag hittade följande länk som ser rätt ok ut för en snabb introduktion.

Har programmerat massor av Java men möjligt att jag behöver läsa in mig ännu mer.

Ursprungligen av johan dansk:

Eller du kanske mest var ute efter lite praktiska tips på själva filstrukturen och inte så mycket själva OOP-konceptet?

Exakt!

Ursprungligen av ivar:

Har programmerat massor av Java men möjligt att jag behöver läsa in mig ännu mer.

Exakt!

I stand corrected då!

Kan berätta lite hur jag brukar lägga upp det då. Jag kör endel PEAR paket för diverse vanliga uppgifter (PEAR::DB, PEAR::Auth, PEAR::HTML_QuickForm med flera), vilka jag brukar slänga in i /lib (inte nödvändigvis i roten) på webbserver katalogen där själva "huvudsiten" lever.
I samma katalog har jag även en fil som bruker heter Main.php, Base.php eller något sådant, som jag inkluderar i varje fil, denna innehåller diverse funktioner och klassar, sätter upp diverse variable/defines som jag kommer använda globalt, samt inkluderar de vanligaste klassarna jag användar på varje sida, den sätter helt enkelt upp alting för mig, hela bassystemet om man vill säga det så. Samt diverse wrapper klassar för PEAR etc, som kan underlätta ibland..

så, /lib innehåller hela mitt bibliotek med filer som jag behöver inkludera i de sidor som spottar ur sig html.

har även oftast en /inc som innehåller filer med presentationskod som oftast behöver inkluderas för återanvänding, tex header/footers, javascriptfiler, css filer osv.

includes, klassar osv:
/lib
/inc

presentationsfiler (dvs, de som användaren kan träffa på, namn osv varierar givetvis), dessa "jobbar" då mot ovanstående biblioteks kataloger:
/index.php
/enannanfil.php
/katalog/index.php
/en/annan/katalog/fil.php
osv osv

Det var kanske mer än du ville veta , men så brukar jag göra, är nog ganska overkill till mindre saker, men när projektet växar så är det trevligt med lite ordning på det hela.
I ditt fall skulle det nog räcka att göra som HL föreslår.

--johan

  • Medlem
  • Stockholm
  • 2004-07-14 00:27

Det räcker väl med en fil för Transaction-klassen. Och så definierar du bara de metoder du behöver i den klassen, till exempel new(), save(), delete() osv beroende på hur du lägger upp det.

Nåt du kanske bör överväga är att använda ett färdigt bibliotek för "object persistance". Du talar om hur din databas ser ut och verktyget skapar dina klasser med all SQL-kod automatiskt utifrån det. Sen skapar du egna klasser som ärver de automatiskt skapade klassernas egenskaper. Där lägger du till all funktionalitet du behöver.

Det här biblioteket ska vara bra, men det är (tyvärr, just nu) gjort för PHP 5:

http://propel.phpdb.org/

Det finns ett liknande paket i PEAR (http://pear.php.net) också som heter DBObject har jag för mig (plus ett annat som automatiskt kan skapa webb-formulär utifrån klasserna för att skapa/redigera dina objekt).

Önskar själv att jag hade känt till dom här prylarna tidigare... Har inte haft möjlighet att testa det än, men jag tror att det kan bespara dig en hel del jobb. Över huvud taget så är nog PEAR ett bra tips för att hitta bra färdiga lösningar på vanliga problem.

  • Medlem
  • Stockholm
  • 2004-07-14 11:36
Ursprungligen av HL:

Det räcker väl med en fil för Transaction-klassen. Och så definierar du bara de metoder du behöver i den klassen, till exempel new(), save(), delete() osv beroende på hur du lägger upp det.

Låter vettigt

Ursprungligen av HL:

Nåt du kanske bör överväga är att använda ett färdigt bibliotek för "object persistance". Du talar om hur din databas ser ut och verktyget skapar dina klasser med all SQL-kod automatiskt utifrån det. Sen skapar du egna klasser som ärver de automatiskt skapade klassernas egenskaper. Där lägger du till all funktionalitet du behöver.

Jag är inte helt med på noterna.
Hur skulle det se ut i Transaktionsklassens save-metod om man ärver in DBObject ?

Ursprungligen av HL:

Över huvud taget så är nog PEAR ett bra tips för att hitta bra färdiga lösningar på vanliga problem.

Ska verkligen börja kika där oftare. Har inte så mycket emot att skriva all kod själv annars

Nu är PHP 5 släppt så det är högaktuellt att börja koda OO.

Ciryon

  • Medlem
  • Stockholm
  • 2004-07-14 15:49

Det var mycket intressant läsning johan!

Nu när jag tar steget över till oop-php så ska jag nog börja spara ner alla klasser i /lib eller dylikt också. Ett lite fånigt (men bra) tips jag fick av en annan var att spara php-klasser som tex Transaction.class.php för att öka tydligheten.

Jag kör med en mapp "css","js" och "include" där include innehåller funktioner(db, header/footer m.m.) och sen har jag logiskt strukturerat upp övriga filer.

Har inge bra uppdelning av logik och presentation. Önskar jag kom på något vettigt sätt att ordna det faktiskt.

f.ö.
johan, du har ju helt rätt. Jag behöver öva upp oo-tänket. Annars skulle jag inte behöva fråga här

Men som jag förstår det så ska jag gå till ruta 1 och rita upp ett ordentligt klassdiagram för mitt projekt?
Med liknelsen till Java att min mainmetod finns i "index.php"

Är ni inne på OOP och har en bakgrund från Java så rekommenderar jag en seriös titt på en av Apples mest dolda enterpriseprodukter. nämligen WebObjects. Styrkan med WO är att det är 100% Java, har fortfarande marknadens mest stabila och avancerade funktioner för databasabstraktion, finns massor av smarta frameworks som gör att man kan åstadkomma stora projekt på väldigt kort tid. AppleStore, ITMS och Deutsche Bank är några av dagens användarklientel.

När det sedan kommer till driftmiljön (har fått kritik för att jag använder ordet "deploya" förut så är det fina att man kan använda vilken J2EE appserver som helst eller den som följer med WebObjects som är en J2SE appserver med god skalbarhet.

För oss med Mac OS X går det dessutom att ladda ner en gratis demo genom att bli medlem på Apple Developer Connection vilket också är gratis så länge man är onlinemedlem bara.

Läs mer på:

http://www.apple.com/webobjects

http://www.rentzsch.com/webobjects/introTo5

Se en liten film om hur det fungerar:

http://www.rentzsch.com/webobjects/wo5in15

(länken finns i mitten av texten och längst ned finns själva projektet att ladda hem)

1
Bevaka tråden