OOP, verbeteringen
lasdesigner - 24/03/2006 18:09
PHP beginner
Ik heb een simpel OOP scriptje gemaakt:
<?php
class Werkgever
{
var $naam;
var $geld;
var $uren;
var $prijspu;
function SetGegevens($naam, $geld, $uren)
{
// set de gegevens
$this->naam = $naam;
$this->geld = $geld;
$this->uren = $uren;
}
function PrijsPerUur($prijs)
{
$this->prijspu = $prijs;
}
function Werken($uur)
{
$this->uren = $this->uren+$uur;
$this->geld = $this->uren*$this->prijspu;
}
function LaatZien()
{
echo "Werkgever: ". $this->naam . "<BR />";
echo "Prijs Per Uur: ". $this->prijspu . "<BR />";
echo "Geld verdiend: €". $this->geld . "<BR />";
echo "Aantal Uren Gewerkt: ".$this->uren . "<BR />";
}
}
$luuk = new Werkgever;
$luuk->SetGegevens("Luuk", 0, 0);
$luuk->PrijsPerUur(10);
$luuk->Werken(5);
$luuk->LaatZien();
?>
<?php
class Werkgever
{
var $naam ;
var $geld ;
var $uren ;
var $prijspu ;
function SetGegevens( $naam , $geld , $uren )
{
// set de gegevens
$this -> naam = $naam ;
$this -> geld = $geld ;
$this -> uren = $uren ;
}
function PrijsPerUur( $prijs )
{
$this -> prijspu = $prijs ;
}
function Werken( $uur )
{
$this -> uren = $this -> uren + $uur ;
$this -> geld = $this -> uren * $this -> prijspu ;
}
function LaatZien( )
{
echo "Werkgever: " . $this -> naam . "<BR />" ; echo "Prijs Per Uur: " . $this -> prijspu . "<BR />" ; echo "Geld verdiend: €" . $this -> geld . "<BR />" ; echo "Aantal Uren Gewerkt: " . $this -> uren . "<BR />" ; }
}
$luuk = new Werkgever;
$luuk -> SetGegevens ( "Luuk" , 0 , 0 ) ;
$luuk -> PrijsPerUur ( 10 ) ;
$luuk -> Werken ( 5 ) ;
$luuk -> LaatZien ( ) ;
?>
En wilde vragen of jullie verbeteringen kunnen vinden in dit script? k wil namelijk OOP lerne, maar er zijn weinig (goede/uitgebreide) tutorials. Vandaar dat ik het zo doe.. Ik weet niet of dit mag.. Maar ik denk het wel ;)
5 antwoorden
Gesponsorde links
Stijn - 24/03/2006 18:18
PHP expert
Ik vermoed dat je PHP 4.x hebt en geen PHP 5.x. Als je PHP 5.x hebt raad ik aan om met private/public/protected en al de PHP5 oop aspecten (zie het laatste artikel op http://www.phpfreakz.nl - da's de NL versie die op PHP.net staat met uitgebreide en verstaanbare voorbeelden)
Nu over je script:
1. Ik zou een contstructor aanbrengen. Is makkelijker voor het aanmaken van je nieuw object.
2. Ik zou je waarden van je parameters controleren.
3. Je LaatZien() functie zou ik geen gebruik maken van echo maar met een return parameter:
--watIkZouDoenMetJeClass.php--
<?php
class Werkgever
{
var $naam;
var $geld;
var $uren;
var $prijspu;
function Werkgever($naam, $geld, $uren) //Werkgever() is dezelfde naam als je class en dus een constructor
{
// set de gegevens
$this->naam = $naam;
$this->geld = $geld;
$this->uren = $uren;
}
function PrijsPerUur($prijs)
{
$this->prijspu = $prijs;
}
function Werken($uur)
{
$this->uren = $this->uren + $uur;
$this->geld = $this->uren * $this->prijspu;
}
function LaatZien()
{
$output = NULL;
$output .= "Werkgever: ". $this->naam . "<BR />";
$output .= "Prijs Per Uur: ". $this->prijspu . "<BR />";
$output .= "Geld verdiend: €". $this->geld . "<BR />";
$output .= "Aantal Uren Gewerkt: ".$this->uren . "<BR />";
return $output;
}
}
$luuk = new Werkgever("Luuk", 0, 0);
$luuk->PrijsPerUur(10);
$luuk->Werken(5);
echo $luuk->LaatZien();
?>
<?php
class Werkgever
{
var $naam ;
var $geld ;
var $uren ;
var $prijspu ;
function Werkgever( $naam , $geld , $uren ) //Werkgever() is dezelfde naam als je class en dus een constructor
{
// set de gegevens
$this -> naam = $naam ;
$this -> geld = $geld ;
$this -> uren = $uren ;
}
function PrijsPerUur( $prijs )
{
$this -> prijspu = $prijs ;
}
function Werken( $uur )
{
$this -> uren = $this -> uren + $uur ;
$this -> geld = $this -> uren * $this -> prijspu ;
}
function LaatZien( )
{
$output = NULL ;
$output .= "Werkgever: " . $this -> naam . "<BR />" ;
$output .= "Prijs Per Uur: " . $this -> prijspu . "<BR />" ;
$output .= "Geld verdiend: €" . $this -> geld . "<BR />" ;
$output .= "Aantal Uren Gewerkt: " . $this -> uren . "<BR />" ;
return $output ;
}
}
$luuk = new Werkgever( "Luuk" , 0 , 0 ) ;
$luuk -> PrijsPerUur ( 10 ) ;
$luuk -> Werken ( 5 ) ;
?>
groeten, stijn
lasdesigner - 24/03/2006 18:20
PHP beginner
Wat bedoel je precies hiermee?
1. Ik zou een contstructor aanbrengen. Is makkelijker voor het aanmaken van je nieuw object.
Wat is een constructor?
Stijn - 24/03/2006 18:30
PHP expert
kijk eens onderaan. je moet geen 2 lijnen "verbruiken". Hij roept dan automatisch die functie aan.
lasdesigner - 24/03/2006 19:18
PHP beginner
Ik heb nog een vraag, ik ben nu bezig met een class 'Lokaal' En nu wil ik hierin leerlingen zetten.. Meerdere dus. Maar hoe kan ik dit doen?
Dus dat ik heb:
(dit heb ik nu, maar kan dnek ik niet?)
<?php
class Klaslokaal
{
var $leerling;
var $leeftijd;
var $favovak;
var $aantal;
function SetLeerling($leerling, $leeftijd, $favovak)
{
$this->leerling = $leerling;
$this->leeftijd = $leeftijd;
$this->favovak = $favovak;
$this->aantal++;
}
function Aantal()
{
return $this->aantal;
}
}
?>
<?php
class Klaslokaal
{
var $leerling ;
var $leeftijd ;
var $favovak ;
var $aantal ;
function SetLeerling( $leerling , $leeftijd , $favovak )
{
$this -> leerling = $leerling ;
$this -> leeftijd = $leeftijd ;
$this -> favovak = $favovak ;
$this -> aantal ++;
}
function Aantal( )
{
return $this -> aantal ;
}
}
?>
KLein begin..
Maar hoe doe ik dat dus?
Stijn - 24/03/2006 19:44 (laatste wijziging 24/03/2006 19:46)
PHP expert
eerst en vooral wil je dezelfde type gegevens intikken (waarden zijn anders natuurlijk). dan gebruik je het best een array. Nu wil je meerdere leerlingen intikken. Dit kan op verschillende manieren. Dit zou ik doen:
<?php
class Klaslokaal
{
var $leerling = array( );
var $leeftijd = array( );
var $favovak = array( );
var $aantal = 0; //initialeseren
function SetLeerling($leerling, $leeftijd, $favovak)
{
$this->leerling[ ] = $leerling;
$this->leeftijd[ ] = $leeftijd;
$this->favovak[ ] = $favovak;
$this->aantal++; // hoe kan je niets met 1 optellen :p
}
function Aantal()
{
return $this->aantal;
}
}
//beetje array's
$leerling = array('stijn' , 'jan' , 'vinTage');
$leeftijd = array(16 , 17 , 40);
$favovak = array('informatica' , 'wiskunde' , 'chemie');
$obj = new Klaslokaal;
//dan de loop
foreach( $leerling as $key) {
$obj->SetLeerling( $leerling[ $key ] , $leeftijd[ $key ] , $favovak [$key ] );
}//end loop
echo $obj->Aantal( );
?>
<?php
class Klaslokaal
{
var $leerling = array ( ) ; var $leeftijd = array ( ) ; var $aantal = 0 ; //initialeseren
function SetLeerling( $leerling , $leeftijd , $favovak )
{
$this -> leerling [ ] = $leerling ;
$this -> leeftijd [ ] = $leeftijd ;
$this -> favovak [ ] = $favovak ;
$this -> aantal ++; // hoe kan je niets met 1 optellen :p
}
function Aantal( )
{
return $this -> aantal ;
}
}
//beetje array's
$leerling = array ( 'stijn' , 'jan' , 'vinTage' ) ; $leeftijd = array ( 16 , 17 , 40 ) ; $favovak = array ( 'informatica' , 'wiskunde' , 'chemie' ) ;
$obj = new Klaslokaal;
//dan de loop
foreach ( $leerling as $key ) {
$obj -> SetLeerling ( $leerling [ $key ] , $leeftijd [ $key ] , $favovak [ $key ] ) ;
} //end loop
?>
groeten stijn
er is ook nog een andere manier, maar dit is ook mogelijk
Gesponsorde links
Dit onderwerp is gesloten .