Avatar billede albertjonas Nybegynder
29. maj 2009 - 11:01 Der er 17 kommentarer

OOP Projekt

Jeg har nu været godt i gang med php i knap et år, og har stadig ikke lært OOP, både fordi at jeg altid går kold i alle de tutorials der nu findes på engelsk, og fordi at jeg aldrig har lært det oppe på min skole. Jeg har været inde på denne side: http://www.phpartikler.dk/artikler/oop.php , og syntes ikke at jeg får ret meget ud af den... Jeg forstår stadig ikke hvordan man kan bruge OOP igennem en hel hjemmeside.

Self ved jeg godt at man skal starte et sted...

Men er der nogle der der kan give mig nogle forslag til hvordan jeg kommer i gang? Jeg har meget svært ved at forstå OOP, skal det lige siges...

Tak
Avatar billede cpfrande Nybegynder
29. maj 2009 - 11:09 #1
Halløj,

Før du overhovedet begynder at kigge på OOP i PHP er det nok en god idé at lære om hvad OOP egentlig er generelt set.

På den måde vil du helt sikkert få meget nemmere ved at se logikken i den måde, som PHP benytter det på.

PHPs egen dokumentation er meget god på området... her er et link til dokumentationen for PHP5:
http://www.php.net/manual/en/language.oop5.php

God fornøjelse !
Avatar billede albertjonas Nybegynder
29. maj 2009 - 11:22 #2
Nu har jeg kigget på denne kode, og jeg forstår ikke hvorfor at den siger:
"$this is defined (A) $this is not defined. $this is defined (B) $this is not defined. "

Jeg kan egentlig ikke se hvorfor at man har kommet en if i klasse A.

Hvad betyder egentlig det her:  A::foo();
<?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo "\$this is not defined.\n";
        }
    }
}

class B
{
    function bar()
    {
        A::foo();
    }
}

$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>
Avatar billede public2 Nybegynder
29. maj 2009 - 11:25 #3
Er tilbøjelig til at være enig med cpfrande.

Det objekt-orienterede programmerings paradigme spænder vidt og for at forstå PHP i en OOP forstand, så må du lære lidt om principperene og teorierne bag.

Der er mange gode artikler og bøger omkring dette emne og der bliver skrevet konstant om det, da det er i udvikling hele tiden.

Når du bliver fortrolig med det, så vil du forhåbentlig også se fordelene ved at bruge OOP i PHP.
Men du kommer nok også til at støde på OODBMS i den forbindelse, for personligt synes jeg at ved at bruge en objekt-orienteret database kun kan give fordelene når du programmere i OO.

Men held og lykke, det er et spændende kapitel i programmerings-verden du begiver dig ud i (for at lyde meget filosofisk) :-D
Avatar billede public2 Nybegynder
29. maj 2009 - 11:27 #4
Lige en tilføjelse...

Den kode du der har beskrevet, for også at forstå strukturen i klasse opbygningerne, er det også en god idé at sætte dig ind i UML, mønstre og UP. Hvordan man uddeler ansvar til de forskellige klasser og hvem der har information om hvad osv.
Avatar billede repox Seniormester
29. maj 2009 - 11:41 #5
Jeg vil godt foreslå dig at skimte denne tråd igennem:
http://www.eksperten.dk/spm/876607

Der er også et par eksempler på OOP, forklaringer og idéer.
Avatar billede albertjonas Nybegynder
29. maj 2009 - 12:00 #6
UML? Hvad er det?
Jeg har godt hørt om det fra en java programmør.
Men hvad er det?

Jeg har også kigget på dette script fra php.net, hvor den med det samme kommer med en fejl:          :S
<?php
class SimpleClass
{
    // invalid member declarations:
    public $var1 = 'hello '.'world';
    public $var2 = <<<EOD
    hello world
    EOD;
    public $var3 = 1+2;
    public $var4 = self::myStaticMethod();
    public $var5 = $myVar;

    // valid member declarations:
    public $var6 = myConstant;
    public $var7 = self::classConstant;
    public $var8 = array(true, false);
   
   
}
?>

Den siger at der er en fejl i denne linie:

    public $var1 = 'hello '.'world';


Ja jeg er hel ny, kan i nok godt høre...
Avatar billede public2 Nybegynder
29. maj 2009 - 12:15 #7
UML står for "Unified Modeling Language" og er en tilgang til at modellere og analysere (infra)struktur i et system.

Der står masser om det på nettet og ikke mindst wikipedia som er et godt udgangspunkt til at lære lidt om de forskellige metoder, men det er omhandler blandt andet en måde at lave diagrammer til at præcisere sin kode så effektiv og optimal som muligt.

Derudover er det en måde at undgå gentagelser (DRY) og lave tingene om efterhånden som et system begynder at tage form. Det er altså systemudvikling på et mere abstrakt plan, men viser sig nyttigt og nødvendigt gang på gang.
Den "gamle" metode som kaldes for "vandfaldsmetoden" er simpelthen at starte med at programmere fra dag 1 og så efterhånden ændre i eksisterende kode, klasser osv. for at få det til at passe sammen. Dette er spil af tid og spil af ressourcer (hvis man f.eks. sidder i et software hus) derfor er det vigtigt at bruge den tid det tager på at kortlægge en overordnet struktur.

Blandt andet er MVC modellen fuldstændig uundværlig i mit hoved og jeg bruger den faktisk hver gang jeg indgår i et udviklingshold for at skabe en lav kobling og høj samhørighed (også UML).

Hvis du er interesseret i at lære mere om det, så er min personlige favorit indenfor det felt en gut der hedder Craig Larman, som har lavet bogen "Applying UML and patterns - an introduction to Object-Oriented Analysis and Design and Iterative Development".

En bog jeg ofte referere som "min bibel" :-D
Avatar billede j4k0b Nybegynder
29. maj 2009 - 12:27 #8
Objektorienteret programmering gælder langt hen ad vejen om at programmerer virkelighedens arbejdsgange ind i dit program, på en måde så det ligner virkeligheden. Hvis du eksempelvis er ved at lave en webshop så har du mange elementer (objekter) der skal repræsentere noget fra den virkelige verden, eksempelvis én ordre, én kunde, ét produkt osv. Når du skriver disse klasser laver du samtidig de egenskaber og funktioner det pågældende objekt stiller omverdenen til rådighed for at manipulerer med sig.

Hvis det er noget der har fanget din interesse, og du er typen der kan sætte sig ned og læse en større omgang abstrakt design-filosofi, så vil jeg anbefale dig at købe denne lærebog fra Datamatiker- og Dataloguddannelsen:

Objektorienteret analyse & design
ISBN-10: 8777511530
ISBN-13: 9788777511530
Pris: cirka 400 kroner

http://www.saxo.com/dk/item/objektorienteret-analyse-design-paperback.aspx
Avatar billede andreas13_fam Nybegynder
01. juni 2009 - 11:47 #9
albertjonas som du kan se står der også  // invalid member declarations:
Altså er det ikke lovligt.

Det skal lige siges at jeg startede med OOP for 1½ måned siden, men måske gør det bare at jeg ikke er så hardcore som de andre.

Jeg tror dit problem ligger i at forstå hvad man skal med OOP.
Her er det vigtigt at forstå at alt hvad du tidligere har kunne gøre i PHP kan du også gøre nu i OOP, og omvendt.
Altså er OOP bare for "de slappe" der gerne vil spare tid og arbejde.

Forstil dig vi skal lave denne tråd i PHP, og det ikke er der database udtræk (næsten utænkeligt).
Vi kunne sagtens gå i gang med at hardcode det i HTML, men vi kunne også skyde gennemvej og lave en class.

I takt med at jeg skulle lave nedenstående eksempel tænkte jeg.
1. vi har en titel "» Forside» Spørgsmål og Svar..."
2. vi har en masse kommentarer med dato, tekst og nummer på.
  a. nummer kan laves automatisk (den stiger med 1 for hver kommentar)
  b. de andre (dato og tekst) må vi i dette simple eksempel selv skrive.

Classen kunne derfor se sådan ud http://pastebin.com/f4d73e4fb

Prøv selv at køre http://pastebin.com/f4d73e4fb som en PHP fil så kan du se resultatet.
Du kan også se hvor let du kan ændre for eksempel baggrundsfarven (gøre normalt i CSS men det er et eksempel)
Avatar billede repox Seniormester
01. juni 2009 - 12:01 #10
@andreas13_fam:
"Altså er OOP bare for "de slappe" der gerne vil spare tid og arbejde."
Det var da noget af en påstand at komme med.

At lave et objekt er da meget simpelt - men at lave noget godt er svært! Og dit eksempel på en 'klasse' viser blot at du ikke har forstået idéen...
Avatar billede andreas13_fam Nybegynder
01. juni 2009 - 13:12 #11
At skrive "de slappe" var nok også forkert. OOP er genialt og rigtig smart til kode der skal genbrugs, det var enlig bare det jeg mente.

Det eneste jeg ville med mit eksempel var at repensentere de vigtigste dele af OOP I PHP. I et simpelt eksempel som var til at forstå.
Eksperterne her på siden kan jo hurtigt komme op med en masse forkortelse som kan kræve en hel bog at forklare.
Avatar billede repox Seniormester
01. juni 2009 - 13:57 #12
@andreas13_fam:
Jeg bliver nød til at understrege at du ikke har forstået idéen med OOP. OOP er meget andet end genanvendelig kode.
Det handler om at lære en struktur og et design mønster i din kode der optimerer din arbejdsgang, dit resourceforbrug og din generelle kode.

Dit eksempel repræsenterer en forsimplet (og ukorrekt) anvendelse af de muligheder som OOP giver dig. Din kode er ikke genanvendelig og blander det værste fra PHP4 og det bedste fra PHP5 sammen. Noget af din kode giver direkte ingen mening.

Som du selv er inde på er du kun 1½ måneds tid inde i din erfaring med OOP og du skal være opmærksom på at det kan tage meget længere tid at rent faktisk komme frem til resultater med OOP som er brugbare.

Jeg er ikke sikker på hvilke forkortelser du henviser til udover UML (som egentlig ikke har vildt meget at gøre med selve udviklingen), men det er oftest nemt at spørge til de ting man ikke forstår og så få dem forklaret.
Avatar billede andreas13_fam Nybegynder
01. juni 2009 - 15:11 #13
I såfald er jeg med på en "lytter".
Men ja det var enlig bare UML jeg tænkte på, men jeg har da tideligere læst andre tråde som er "være" med hensyn til forkortelserne.
Avatar billede repox Seniormester
01. juni 2009 - 15:45 #14
nu deltager spørger jo ikke selv mere, så der er vist ikke så meget at lytte til.

Hvis du er interesseret i at udvikle dig med hensyn til OOP vil jeg anbefale at oprette et spørgsmål hvor folk kan kommentere et objekt du har skrevet. Der vil komme konstruktiv kritik som du ville kunne udnytte og derefter rette til og spørge igen.

Det er en meget god måde at få input på - og jeg garanterer dig at du vil lære af det.
Avatar billede dkfire Nybegynder
01. juni 2009 - 21:46 #15
Jeg vil give repox ret i at mvc er et glimrende eksempel på hvordan oop kan bruge i php.
Et forslag til en kort og simpel gennemgang af mvc kan findes her:
http://www.phpro.org/tutorials/Model-View-Controller-MVC.html
måske kan repox også finde et eksempel eller to ;-)

Og ja andreas13_fam, dit eksempel har intet med oop at gøre. Du viser slet ikke hvordan man arbejder med klasser og objekter. Dine funktioner kunne lige så godt være uden for klassen som inden i.
Jeg vil forslå dig at læse lidt mere om oop og evt mvc hvis du savner forståelse for hvordan man rigtig bruger oop i php applikationer.
Avatar billede andreas13_fam Nybegynder
02. juni 2009 - 10:36 #16
Det ser da ud som en god gennemgang af hvad Oop kan bruges til så det vil jeg da tage mig tid til at læse.
Avatar billede public2 Nybegynder
02. juni 2009 - 20:18 #17
Nu er jeg selv stor tilhænger af MVC modellen og bruger faktisk ikke andet til at designe mine programmer og systemer. Dog vil jeg mene, at MVC ikke altid er lige nem eller retfærdiggøres at bruge i PHP sammenhæng.

PHP benytter jo en server-klient model, hvor persistens er i højsæde eller i hvert fald kan være problemstillinger i forhold til "ægte" objekt-orienterede programmeringssprog, som Java, C#, Python m.fl.

Jeg er forholdsvis ny til PHP (kommer fra ASP og .NET) så kan ikke med rette udtale om hele den kompleksitet omkring OO i PHP, men vil mene, at når vi taler om PHP som PHP er, altså scriptbaseret og real-time fortolket, så kan det være svært at lægge fuldstændig samme model fra UML og MVC ned over den. Derimod har jeg forsøgt mig med PHP frameworket PEAR og i særdeleshed DB_DataObject da jeg havde brug for at lave en mere OODBMS tilgang for at komme lidt rundt om den persistent der lå, og der synes jeg egentlig at tilnærmelsen af en MVC model kom ret tæt på.

Jeg glæder mig kun til at lære noget mere om PHP og OO, for tror at jeg bliver ganske glad for mit skift (dog kan jeg ikke helt sige mig fri fra .NET, er og bliver stor fan af det framework :-P)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows