Beginnende OOP scripter
Ik ben pas bezig met oop scripten.
en ik zou graag reacties willen hebben van wat ik goed doe en wat ik fout doe in mijn scripts
Het zijn werkende scriptjes.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?PHP
class Profiel {
function getnaam($id) {
//Input Controleren.
if(!is_array($id) || count($id) {
return false;
}
//Data ophalen
$query = "select 'naam' from 'gebruikers' where 'id' = '$id'";
$result = mysql_query($query);
//Controleren als qeury werkt
if(!$result) die("Qeury Werkt niet. " . mysql_error());
//Info ophalen uit db als gevonden is
$naam = mysql_result($result, 0);
//Naam weergeven
echo 'Gebruikersnaam:' . $naam . '<br />';
}
}
?>
class Profiel {
function getnaam($id) {
//Input Controleren.
if(!is_array($id) || count($id) {
return false;
}
//Data ophalen
$query = "select 'naam' from 'gebruikers' where 'id' = '$id'";
$result = mysql_query($query);
//Controleren als qeury werkt
if(!$result) die("Qeury Werkt niet. " . mysql_error());
//Info ophalen uit db als gevonden is
$naam = mysql_result($result, 0);
//Naam weergeven
echo 'Gebruikersnaam:' . $naam . '<br />';
}
}
?>
en
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?PHP
class Combat{
function att($att) {
$aanval = round($att/5);
echo 'U deed '.$aanval.' Damage.<br />';
}
function wapenatt($wapenatt) {
$wapenaanval = round($wapenatt/13);
echo 'U deed '.$wapenaanval.' Damage Met u wapen.<br />';
}
function skil1($skil1) {
$skilaanval1 = round($skil1*1.5);
echo 'U deed '.$skilaanval1.' Damage Met u Skil1.<br />';
}
function skil2($skil2) {
$skilaanval2 = round($skil2*2.3);
echo 'U deed '.$skilaanval2.' Damage Met u Skil2.<br />';
}
function total($att, $wapenatt, $skil1, $skil2) {
$aanval = round($att/5);
$wapenaanval = round($wapenatt/13);
$skilaanval1 = round($skil1*1.5);
$skilaanval2 = round($skil2*2.3);
$total = ($aanval+$wapenaanval+$skilaanval1+$skilaanval2);
echo 'U deed '.$total.' Damage in totaal.<br />';
}
}
?>
class Combat{
function att($att) {
$aanval = round($att/5);
echo 'U deed '.$aanval.' Damage.<br />';
}
function wapenatt($wapenatt) {
$wapenaanval = round($wapenatt/13);
echo 'U deed '.$wapenaanval.' Damage Met u wapen.<br />';
}
function skil1($skil1) {
$skilaanval1 = round($skil1*1.5);
echo 'U deed '.$skilaanval1.' Damage Met u Skil1.<br />';
}
function skil2($skil2) {
$skilaanval2 = round($skil2*2.3);
echo 'U deed '.$skilaanval2.' Damage Met u Skil2.<br />';
}
function total($att, $wapenatt, $skil1, $skil2) {
$aanval = round($att/5);
$wapenaanval = round($wapenatt/13);
$skilaanval1 = round($skil1*1.5);
$skilaanval2 = round($skil2*2.3);
$total = ($aanval+$wapenaanval+$skilaanval1+$skilaanval2);
echo 'U deed '.$total.' Damage in totaal.<br />';
}
}
?>
elke functie, prepend je met private, public, of protected. Ik zie meerdere dingen die je kan oplossen met het object, dus $this. Verder is het niet zo net om een echo in een class te doen, als je de html en php gescheiden houd.
maar wat is dan de beste manier om de informatie te weergeven?
Dus je geeft bij wijze van alleen een cijfer terug (attack -> damage), en het verhaal eromheen doe je dus niet in je class terug laten komen.
return 1243;
en in de oproep gedeelte dit:
$combat = new Combat();
U deed Damage
En volledige namen gebruiken is ook handig ;-) $combat -> attack(); bijvoorbeeld
Verder moet je de naamgeving aanpassen en wat overzichtelijker programmeren. PHPDoc misschien een goed idee?
Verder kan je dit natuurlijk helemaal aanpassen, met foutenafhandeling ( exceptions ) en dergelijke. Succes!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
/**
* Profile class
*/
class Profile
{
/**
* @var String
*/
private $name;
/**
* Constructor.
*
* @param String $unique_id
*/
public function __construct( $unique_id )
{
// Control input
if( isValid( $unique_id ) )
{
// Make new database
$database = new MySQL( );
// Connect
$database->connect( 'localhost', 'username', 'password', 'database' );
// Make query
$query =
"
SELECT
name
FROM
users
WHERE
id = '" .$database->addslashes( $unique_id ). "'
";
// Run the query
$database->query( $query );
}
}
/**
* Controls the input.
*
* @param String $unique_id
* @return Bool
*/
protected function isValid( $unique_id )
{
return ( ctype_digit( $unique_id ) );
}
}
?>
/**
* Profile class
*/
class Profile
{
/**
* @var String
*/
private $name;
/**
* Constructor.
*
* @param String $unique_id
*/
public function __construct( $unique_id )
{
// Control input
if( isValid( $unique_id ) )
{
// Make new database
$database = new MySQL( );
// Connect
$database->connect( 'localhost', 'username', 'password', 'database' );
// Make query
$query =
"
SELECT
name
FROM
users
WHERE
id = '" .$database->addslashes( $unique_id ). "'
";
// Run the query
$database->query( $query );
}
}
/**
* Controls the input.
*
* @param String $unique_id
* @return Bool
*/
protected function isValid( $unique_id )
{
return ( ctype_digit( $unique_id ) );
}
}
?>
Gewijzigd op 13/07/2010 19:39:17 door Niels K
want hoor het vaker gebruik geen short tags
Short tags kunnen zijn uitgezet door je webhost. Dan zie je al je php code gewoon in beeld.
maar tot nu toe werkt alles wel gewoon dus en ik maak geen projecten voor andere mensen aleen voor eigen doeleine
Het maakt niet uit voor wie het is.. Als je het nu doet doe je het de volgende keer op een server waar hij uit staat ook:) Je moet proberen jezelf niks verkeerd aan te leren. Want aanleren is makkelijker dan afleren..
ik zal er gaan opletten bij me scripts die nu maak of ga verbeteren
Nog meer tip's & trucs voor OOP?
ik hoor het graag of een Nederlandse tut om oop beter onder de knie te krijgen is erg gewenst
Lees mijn vorige reactie eens..
"ik hoor het graag of een Nederlandse tut om oop beter onder de knie te krijgen is erg gewenst"
Laat pas geleden een lid van phphulp deze eens gemaakt hebben
http://phptuts.nl/view/45/
Verder een aantal tips:
- Veel blijven oefenen
- Gewoon hier op het forum vragen of je denkwijze, script goed is. Daarvoor dient dit forum.
- Veel blijven lezen
- Download een aantal frameworks om te kijken hoe hun het gedaan hebben. Een mooi framework in PHP5 om mee te beginnen is Zend Framework. Oftewel kijk af van andere mensen
Gewijzigd op 13/07/2010 20:16:19 door Niels K
ik zie nergens u reactie staan
maar bedankt voor de link ik ga hem ff goed lezen en uitwerken na mijn wens
Niels Kieviet op 13/07/2010 19:30:36:
Is dit niet wat? Wel een beetje aanpassen naar jouw wens, en de database klassen maken, goede oefening misschien?
Verder moet je de naamgeving aanpassen en wat overzichtelijker programmeren. PHPDoc misschien een goed idee?
Verder kan je dit natuurlijk helemaal aanpassen, met foutenafhandeling ( exceptions ) en dergelijke. Succes!
Verder moet je de naamgeving aanpassen en wat overzichtelijker programmeren. PHPDoc misschien een goed idee?
Verder kan je dit natuurlijk helemaal aanpassen, met foutenafhandeling ( exceptions ) en dergelijke. Succes!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
/**
* Profile class
*/
class Profile
{
/**
* @var String
*/
private $name;
/**
* Constructor.
*
* @param String $unique_id
*/
public function __construct( $unique_id )
{
// Control input
if( isValid( $unique_id ) )
{
// Make new database
$database = new MySQL( );
// Connect
$database->connect( 'localhost', 'username', 'password', 'database' );
// Make query
$query =
"
SELECT
name
FROM
users
WHERE
id = '" .$database->addslashes( $unique_id ). "'
";
// Run the query
$database->query( $query );
}
}
/**
* Controls the input.
*
* @param String $unique_id
* @return Bool
*/
protected function isValid( $unique_id )
{
return ( ctype_digit( $unique_id ) );
}
}
?>
/**
* Profile class
*/
class Profile
{
/**
* @var String
*/
private $name;
/**
* Constructor.
*
* @param String $unique_id
*/
public function __construct( $unique_id )
{
// Control input
if( isValid( $unique_id ) )
{
// Make new database
$database = new MySQL( );
// Connect
$database->connect( 'localhost', 'username', 'password', 'database' );
// Make query
$query =
"
SELECT
name
FROM
users
WHERE
id = '" .$database->addslashes( $unique_id ). "'
";
// Run the query
$database->query( $query );
}
}
/**
* Controls the input.
*
* @param String $unique_id
* @return Bool
*/
protected function isValid( $unique_id )
{
return ( ctype_digit( $unique_id ) );
}
}
?>
Nu wel?
----
Is de methode isValid() alle nodig binnen je klasse? Zo ja maak deze dan private en niet protected. Alle methodes die private zijn beginnen bij mij met een _ dus dan zou het _isValid worden, vind ik duidelijker.
----
Een getal in je query hoef je niet te escapen.
Alleen de casten naar bijvoorbeeld in integer.
Dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$query =
"
SELECT
name
FROM
users
WHERE
id = '" . (int)$unique_id . "'
";
?>
$query =
"
SELECT
name
FROM
users
WHERE
id = '" . (int)$unique_id . "'
";
?>
Dit als extra beveiliging, als je vergeet $unique_id op inhoud te controleren.
Gewijzigd op 13/07/2010 21:17:16 door Martijn B
voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
class Character{
public $characterid = 0;
public $hp = 0;
public $strength = 0;
public $skill = 0;
public $status = 0;
private $database;
public function __construct($id = NULL){
if(!is_null($id)){
$this->db = database::getInstance('mysql');
/// haal speler op en assign vars
}
}
public function save(){
// object opslaan
}
}
class Mage extends Character{
//doe hier stuff voor mage
}
class Combat{
public function doDamage($characterid, $damage){
}
// nog meer combat functies
}
?>
class Character{
public $characterid = 0;
public $hp = 0;
public $strength = 0;
public $skill = 0;
public $status = 0;
private $database;
public function __construct($id = NULL){
if(!is_null($id)){
$this->db = database::getInstance('mysql');
/// haal speler op en assign vars
}
}
public function save(){
// object opslaan
}
}
class Mage extends Character{
//doe hier stuff voor mage
}
class Combat{
public function doDamage($characterid, $damage){
}
// nog meer combat functies
}
?>
Klopt, jullie hebben gelijk. Ik had er niet zo goed over nagedacht, en later komen steeds ideeën in mijn hoofd. Maar voor de TS moet het ook een uitdaging zijn vind ik.
zoals jij een voorbeed geeft is voor mij het idee om een game te bouwen met damage en verschillende classes .
ik doe dit samen met een vriend van mij
en we wouden het eerst in normaal php schrijven(is wel makkelijker voor mij)
maar we dachten van nee we gaan het netter maken qua scripting en we gaan OOP gebruiken.
en die vriend van mij maakt ook AS3 scripts ervoor zoals een worldmap enz
Je kunt AS3 ook gewoon met PHP laten praten door een HTTP request te doen naar een pagina waar je waardes van ophaalt.