Teknisk set er der ikke den helt store forskel på classes og funktioner, men igen så er der en verden til forskel, jeg vil prøve at lave et par eksempler, jeg vil tage udgangs punkt basisk tekst manipulering:
1. eksempel man kan godt bruge en class som et slags funktions library
Følgende funktioner:
function str_replace($search, $replace, $subject, $replace_count= null){
}
function str_repeat($iput, $mult){
}
kan omskrives til:
class String {
static function replace($search, $replace, $subject, $replace_count= null){
}
static function repeat($iput, $mult){
}
}
// statiske methoder kaldes således
String::repeat(':', 4);
Hvis du vælger at bruge denne model til dine classes får du ikke noget som helst ud det andet end det faktisk ser lidt pænere ud kode mæssigt. Der hvor du virkelig begynder at kunne drage nytte af classes er når du bruger dem som objects. Hvis du virkelig vil drage nytte af classes, skal du først begynde at se på objekter som du ser dem i virkelighedens verden. tag en kugle pen som eksempel, tag en kugle pen op og se hvad den kan gøre, man kan i de fleste tilfælde trykke på knappen i enden og så kommer spidsen frem og trykker man på den igen forsvinder den, hvis det skulle om skrives til et object ville det se sådan her ud
class BallPen {
private $color = null;
private $ball_state = 'in';
public function __construct($color = 'blue'){
}
public function pushEnd(){
if($this->ball_state == 'in'){
$this->ball_state = 'out';
} else {
$this->ball_state = 'in';
}
}
public function getBallState(){
return $this->ball_state;
}
public function getColor(){
return $this->color;
}
}
// Bruges sådan her
$ballpen = new BallPen();
$ballpen->pushEnd();
echo $ballpen->getBallState() // returnere 'out';
hvis du kan se princippet i hvordan det fungere, så kan vi komme igang med den lidt mere "indviklede" del.
Hele filosofien i object orienteret programmering er at det skal være let at skifte en specifik del af koden ud for at tilføre nye features osv. men lad os fortsætte med kuglepennen, lad os sige du gerne vil have en af de der kugle penne med en hel masse farver i, og så kan trykke en ud af gangen, du kan sikkert godt huske dem, sådan en fætter der til forvirring lige så godt kunde være en dildo der gemte sig i din sidepige's penalhus ;-)
jeg vil bruge classen oppe over uden at lave nogen som helst ændringer til den, jeg vil istedet tilføje en ny classe
class MultiColorBallPen {
private $ball_pens = array();
private $active_color = null;
private $ball_state = 'in';
public function addBallPen(BallPen $pen){
$this->ball_pens[$pen->getColor()] = $pen;
}
public function pushEnd($color){
if($this->ball_state == 'in'){
$this->ball_state = 'out';
} else {
$this->ball_state = 'in';
}
if(isset($this->ball_pens[$color])){
$this->active_color = $this->ball_pens[$color];
return $this->ball_pens[$color];
}
}
public function getBallState(){
return $this->ball_state;
}
public function getColor(){
return $this->active_color->getcolor();
}
}
// Den bruges således
$colors = new MultiColorBallPen();
$colors->addBallPen(new BallPen('red'));
$colors->addBallPen(new BallPen('green'));
$colors->addBallPen(new BallPen('blue'));
if($colors->pushEnd('red')){
echo $colors->getColor(); // returnere red
}
Håber du kan se hvordan man kan bruge classes til at tilføje features uden at skulle ændre i gammel kode. det er bare en af fordelene ved object orienteret programmering. men efter som der er skrevet bøger om emnet kan jeg blive ved med fordelene ved det. håber ihvertfald at mine eksempler har gevet dig lidt bedre insight i hvordan det fungere..