oo site opbouwen
Ik weet hoe ik classes kan maken en gebruiken en het werkt allemaal zoals ik wil.
Mijn vraag is: hoe bouw je op een interessante manier een OO site op?
Is zo-iets bv. interessant, qua structuur?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
// index.php
require_once "pagina.php";
require_once "body.php";
$Body -> echo_pagina ($Pagina);
?>
// index.php
require_once "pagina.php";
require_once "body.php";
$Body -> echo_pagina ($Pagina);
?>
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
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
<?
// pagina.php
class Cpagina
{
public $pagina;
public $jaar;
public $menu;
public $main;
public $titel;
public function __construct( )
{
$local_pagina = $_GET['pagina'] ;
$local_jaar = $_GET['jaar'] ;
$this -> titel = 'OOP site';
include ('menu.php');
$this -> menu = $menu;
switch ($local_pagina)
{
case 'foto' :
$this->pagina = 'foto.php';
include ('foto.php');
$this -> titel = $this -> titel .' - Foto's ';
$this -> main = $main;
break;
case 'contact' :
$this->pagina = 'contact.php';
include ('contact.php');
$this -> titel = $this -> titel .' - Contact ';
$this -> main = $main;
break;
default :
$this->pagina = 'main.php';
$this -> main = 'test main';
break;
}
}
}
$Pagina = new Cpagina;
?>
// pagina.php
class Cpagina
{
public $pagina;
public $jaar;
public $menu;
public $main;
public $titel;
public function __construct( )
{
$local_pagina = $_GET['pagina'] ;
$local_jaar = $_GET['jaar'] ;
$this -> titel = 'OOP site';
include ('menu.php');
$this -> menu = $menu;
switch ($local_pagina)
{
case 'foto' :
$this->pagina = 'foto.php';
include ('foto.php');
$this -> titel = $this -> titel .' - Foto's ';
$this -> main = $main;
break;
case 'contact' :
$this->pagina = 'contact.php';
include ('contact.php');
$this -> titel = $this -> titel .' - Contact ';
$this -> main = $main;
break;
default :
$this->pagina = 'main.php';
$this -> main = 'test main';
break;
}
}
}
$Pagina = new Cpagina;
?>
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
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
<?
// body.php
class Cbody
{
public $hoofding;
public $midden;
public $voet;
public function __construct( )
{
}
public function echo_pagina (Cpagina $Pagina)
{
$this -> hoofding =
'
<html>
<head>
<title>'. $Pagina -> titel .'</title>
<LINK REL=stylesheet HREF="style.css" TYPE="text/css">
</HEAD>
<BODY>
<div class="menu" border="1">
';
$this -> midden=
'
</div>
<div class="main">
';
$this -> voet=
'
</div>
</body>
</html>
';
echo $this -> hoofding;
echo $Pagina -> menu;
echo $this -> midden;
echo $Pagina -> main;
echo $this -> voet;
return 1;
}
}
$Body= new Cbody;
?>
// body.php
class Cbody
{
public $hoofding;
public $midden;
public $voet;
public function __construct( )
{
}
public function echo_pagina (Cpagina $Pagina)
{
$this -> hoofding =
'
<html>
<head>
<title>'. $Pagina -> titel .'</title>
<LINK REL=stylesheet HREF="style.css" TYPE="text/css">
</HEAD>
<BODY>
<div class="menu" border="1">
';
$this -> midden=
'
</div>
<div class="main">
';
$this -> voet=
'
</div>
</body>
</html>
';
echo $this -> hoofding;
echo $Pagina -> menu;
echo $this -> midden;
echo $Pagina -> main;
echo $this -> voet;
return 1;
}
}
$Body= new Cbody;
?>
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
// foto.php
$main=
'
<a target="_blank" href="thumbmails.php?album=43">activiteit 43</a></br>
<a target="_blank" href="thumbmails.php?album=42">activiteit 42</a></br>
<a target="_blank" href="thumbmails.php?album=41">activiteit 41</a></br>
';
?>
// foto.php
$main=
'
<a target="_blank" href="thumbmails.php?album=43">activiteit 43</a></br>
<a target="_blank" href="thumbmails.php?album=42">activiteit 42</a></br>
<a target="_blank" href="thumbmails.php?album=41">activiteit 41</a></br>
';
?>
Als je echt een hele website oo wil maken zal je toch eerst een aantal onderdelen van UML moeten kennen.
Echt een hele toer is het niet hoor. Het is uiteraard even wennen. Geloof me, ik ben "opgevoed" als sequentieel programmeur en OOP knaagde wat, in het begin, maar eens je er mee weg bent, zie je direct de voordelen.
mijn class Cpagina bereidt alle variabelen en parameters voor, mijn class Cmysql haalt alles wat nodig is uit de db.
Dat wordt allemaal gestuurd naar een object van Cbody.
Vooraleer er iets van echo gebeurt, is alles al goed voorbereid.
Quote:
En toch vind ik je toepassing van OOP vrij nutteloos in dit geval. Je kunt veel beter een template engine gebruiken en aparte objecten gebruiken voor bijvoorbeeld data afhandeling, databases, file accessing, etc. Jij gebruikt OOP nu gewoon om je HTML te echo-en. Ik vind je manier juist omslachtig en niet erg flexibel.Echt een hele toer is het niet hoor. Het is uiteraard even wennen. Geloof me, ik ben "opgevoed" als sequentieel programmeur en OOP knaagde wat, in het begin, maar eens je er mee weg bent, zie je direct de voordelen.
Quote:
Niet mee eens. OOP is ook goed toe te passen zonder UML. Het is een beetje raar om te stellen dat UML nodig is voor OOP. Het is handig maar zeker niet nodig. Als je inzicht hebt en bijvoorbeeld design patterns gebruikt dan kom je makkelijk even ver.Als je echt een hele website oo wil maken zal je toch eerst een aantal onderdelen van UML moeten kennen.
Smarty is een bekende en bevalt mij goed.
UML is een hulpmiddel en daar zijn er meer van. Het is in elk geval geen doel en het is evenmin noodzakelijk dat je het kent.
OOP is verder leuk en aardig, maar voor mij is het geen doel op zich. Daar waar ik sneller klaar ben met een stuk procedurele code, komt er gewoon procedurele code in het script te staan. Ik schat dat ik de 80/20-regel aardig toepas, zo'n 80% zal OOP zijn. Smarty, PDO en stored procedures in Postgresql (= ORDBMS) vormen een fraaie combinatie.
Ben het met PHPerik eens, een template-engine lijkt mij een stuk handiger dan de complete html hardcoded in je classe op te nemen. Hiermee verlies je de flexibiliteit en daarmee dus 1 van de grote voordelen van OOP. UML is een hulpmiddel en daar zijn er meer van. Het is in elk geval geen doel en het is evenmin noodzakelijk dat je het kent.
OOP is verder leuk en aardig, maar voor mij is het geen doel op zich. Daar waar ik sneller klaar ben met een stuk procedurele code, komt er gewoon procedurele code in het script te staan. Ik schat dat ik de 80/20-regel aardig toepas, zo'n 80% zal OOP zijn. Smarty, PDO en stored procedures in Postgresql (= ORDBMS) vormen een fraaie combinatie.
Ik vroeg eigenlijk hoe anderen oop in hun site gebruiken.
Qua experiment wou ik eens in het extreme gaan en naarmate de site groeit, ondervind ik dat ik me redelijk makkelijk voel met de structuur die ik gebruik.
Verder is UML zeker niet nodig. Het is erg handig om je idee te delen met anderen, of om het goed duidelijk te maken voor jezelf. Zeker in het begin loop je vaak tegen problemen aan, en verzin je oplossingen die achteraf eigenlijk niet flexibel genoeg noch efficiënt zijn. Misschien dat je met UML deze problemen eerder tegenkomt, maar ik betwijfel of je je daar volledig mee in kan dekken.
Daarnaast is jet prima om tegen die problemen aan te lopen. Leer je alleen maar van, zeker als het kan leiden qua tijd en dergelijke.
Ik raad je aan om eens naar het MVC design pattern te kijken, en eventueel naar de "Partials" die Ruby on Rails gebruikt. Dezen zijn mooi te combineren, en ik denk dat je er meer mee kan dan met je huidige opzet. MVC is misschien geschikter voor webapplicaties, maar ik denk dat het ook prima voor een normale site gebruikt kan worden.
heb je een linkje van MVC in php?
Rik, de taal maakt niet uit bij MVC. MVC = Model View Controller. Veel Googleplezier ;)
MVC in java ken ik, maar dacht dat het in php weer net iets anders zou werken. bedankt iig.
Het principe is hetzelfde.