25
Tags:
php
Skrevet af
Bruger #285
@ 05.06.2003
Introduktion
Denne artikel er skrevet i forbindelse med, at jeg selv ville prøve OOP i PHP. Jeg synes, at jeg derfor sideløbende kunne skrive denne artikel, så jeg nemmere kunne beskrive mulige problemer, og hvilke ting jeg undrede mig over.
Hvad er OOP?
OOP står for Objekt Orienteret Programmering (det kommer fra det lignende engelske udtryk), og foregår ved, at man laver klasser (på engelsk hedder det class), der indeholder funktioner. Det kunne fx være en computer-klasse man laver. Man kan oprette en ny computer-kasse – her kan man fx sætte CPU-størrelse, antal MB RAM, størrelse på harddiske etc. Man kan spørge sig selv, hvorfor det er smart at bruge OOP i stedet for funktioner. Det er faktisk pga., at det er MEGET lettere at genbruge. Man kan fx lave en fil med computer-klassen, og denne fil includer man så i sine scripts. Og når man har en rettelse, så skal man blot lave den i den ene fil – det kunne fx være, at man ville udvide computer-klassen så den også indeholdt oplysninger om software (fx OS).
Et eksempel
<?php
// I OOP navngiver man som regel klasser med et stort begyndelsesbogstav
class Computer
{
var $cpu;
var $ram;
function setCpu($cpuNewSpeed)
{
$this -> cpu = $cpuNewSpeed;
}
function getCpu()
{
return $this -> cpu;
}
function setRam($ramNewAmount)
{
$this -> ram = $ramNewAmount;
}
function getRam()
{
return $this -> ram;
}
}
?>
Vi kan nu prøve at ”oprette” en computer. Den kalder vi myComputer:
<?php
$myComputer = new Computer;
$myComputer -> setCpu(2000);
$myComputer -> setRam(512);
echo $myComputer -> getCpu() . "MHz og " . $myComputer -> getRam() . "MB";
?>
Som man kan se, så skal man bruge funktioner til at give variabler i klassen værdier. Man kan ikke adressere dem direkte – hvilket jo også er meget fornuftigt!
Konstruktør
Når man laver en klasse kan man også lave en konstruktør. En konstruktør i denne sammenhæng er en, der bliver kaldt, når man opretter klassen. Det kan fx være smart da man så kan bestemme CPU-størrelse og RAM-mængde, når man opretter den. Denne funktion skal hedde det samme som klassen – i vores tilfælde vil den derfor se således ud:
<?php
function Computer($cpuNewSpeed=0, $ramNewAmount=0)
{
$this -> cpu = $cpuNewSpeed;
$this -> ram = $ramNewAmount;
}
?>
Det kan bruges således:
<?php
// returnerer 0MHz og 0MB
$myComputer = new Computer;
echo $myComputer -> getCpu() . "MHz og " . $myComputer -> getRam() . "MB";
// returnerer 1500MHz og 0MB
$myComputer2 = new Computer(1500);
echo $myComputer2 -> getCpu() . "MHz og " . $myComputer2 -> getRam() . "MB";
// returnerer 1500MHz og 256MB
$myComputer3 = new Computer(1500, 256);
echo $myComputer3 -> getCpu() . "MHz og " . $myComputer3 -> getRam() . "MB";
/*
Ulovligt! Man skal give det første argument en værdi - man kan ikke give det
andet argument en værdi, og så blot lade det første tage default value!
Derfor er det vigtigt at sætte dig vigtigste først!
{
*/
$myComputer4 = new Computer(, 256);
echo $myComputer4 -> getCpu() . "MHz og " . $myComputer4 -> getRam() . "MB";
/*
}
*/
?>
Afsluttende bemærkning
Jeg kan godt have svært ved at se, hvad OOP skal bruges til ved nogle ting, men ved andre ting er det virkelig smart! Men husk – det er objekter man arbejder med! Overført til ”det virkelige liv” kan det være bil, hus, computer, cykel etc.!
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (15)
Nice... havde ikke helt fundet ud af hvad man brugte classes til før jeg læste denne artikel ;D
Ser ganske godt ud. Måske den er lidt kort, men det er måske bare fordi det ikke er svære
Hjalp mig lidt med hvad klasser helt præcist er
Takker
Meget fin artikel, dog er der en enkelt fejl:
"Som man kan se, så skal man bruge funktioner til at give variabler i klassen værdier. Man kan ikke adressere dem direkte – hvilket jo også er meget fornuftigt!"
Det kan man faktisk sagtens $class->var. Dog er det god OO skik at gøre som du gør.
Udover det, så synes jeg at når artiklen er skrevet på det tidspunkt som den er skrevet på, så bør du også skrive om det nye i PHP5
Objektorienterethed er som sådan ikke noget med klasser (det her lyder helt i skoven det ved jeg) en klasse er egentligt bare en datatype! i det øjeblik du laver en instans af klassen (MyComputer mycomp=new MyComputer) er det et objekt. Objektorienterhed er også at sende et objekt med som parameter i en funktion, fx. function udskriv($enCpmuter)....... herefter skal funktionen så kaldes med udskriv(mycomp). Dette er nogle af de småting der gør objektorienteret programmering... ellers meget interessant artikel
Til Brian Hvarregaard's kommentar ovenfor:
Hvordan nogen kan postulere at klasser ikke som sådan har noget med Objektorientering at gøre, fatter jeg ikke.
Klasser er ikke objekter, nej, men det er definitionen af typerne og hvilke attributter, metoder osv objekter af typen har.
Dvs klasser bruges til at definere objekt-typer ... altså modellere objecterne ... er det ikke rimeligt objektorienteret?!?
Held og lykke med at lave OOP uden klasser ... hvad vil du bruge som model til at instansiere dine objekter fra?!? Primitiver?!?
Klasser er ikke bare datatyper .. det er definitioner af objekt-typer og alt hvad der berører denne type (adfærd,arv,tilgang ....).
Fin artikel, men jeg ville godt have set et eksempel på, hvordan du udvidder en klasse, og derefter bruger denne. Dvs. hvordan skal denne klasse inkluderes? ligesom man ellers gør? og skal det være en require eller en include der skal bruges til det?
OOP er en maade at organisere sit program paa. Du kan ogsaa skrive objekt-orienteret kode i C og Perl.
Artiklens faglige indhold er god nok. Du formidler dog ikke OOP-ideen på en rigtig og god måde. Her ville en henvisning til en eller anden teoretisk side være godt. Dit indledningsafsnit påstår at OOP bare er en udlagring af funktioner. Senere udbedrer du dog definitionen. Det er ikke nemt at forklare OOP!
Ang. Jonatan Hertels kommentar: Hertel har en lille smule ret i sin opfattelse. Dog interpreterer han Brians kommentar på en alt for dårlig måde. Han har enten ikke læst Brians kommentar fornuftigt, eller VIL simpelthen ikke forstå den. Som Brian siger, "..lyder helt i skoven..", essensen kan jeg følge. Brian siger, at OOP ikke er defineret ved klasser. Og det har han unægteligt ret i!
Jeg syntes Hertel skulle være mere tilbageholdender og høfligere i sine formuleringer. Du kan godt sige til hvis der er noget du ikke fatter Jonatan, det skal du ikke straffes for.
Mvh Jakob Wilm
Glimrende artikel
Keep up the good work
Kanon artikel!
keep it up!
Fin artikel, meen jeg kan ikke få¨det til at virke, skal alle 4 vinduer med kode sættes ind i samme dokument.....og i den givne rækkefølge????
Til Michael:
...du bør generelt opretter dine klasser i seperate filer, da det øger genbrugeligheden en del ;o)
I det her tilfælde kan du jo evt. lave en fil/side indeholdende selve klasse-definitionen - eksempelvis "classComputer.php" - og endelig en der så gør brug af klassen (den kunne du passende kalde "computer.php").
NB. Du skal dog lige være opmærksom på at du skal gøre klassen "tilgængelig" for i dit php-script i "computer.php vha. en include-sætning.
Det gør du ved at lave skrive "include('classComputer.php')"... fungerer på samme måde som java's "package" keyword. ;o)
får vi aldrig en fortsættelse?
Jeg synes ikke det fremgår af artiklen, at du ved særlig meget om klasser i PHP. En konstruktør behøver eksempelvis ikke hedder det samme som klassen, den kan hedde __construct.
Hvorfor har du ikke taget destruktører med? I PHP hedder de __destruct, så der desværre ingen ~klassenavn for C++-programmørerne her.
Og så var der det, som Kaare gjorde dig opmærksom på. Det gælder jo kun for private og protected medlemmer, hvilket du forresten heller ikke har inkluderet. Hvor er de statiske medlemmer?
Ja, artiklen hedder "Start på OOP", og bør derfor ikke indeholde alle de avancerede metoder og facts... Men både du og jeg ved, det ikke er derfor, din artikel er så kort. Det må blive en 1'er.
Du skal være
logget ind for at skrive en kommentar.