Vooropgesteld:
Ik ben het met iedereen eens die claimt dat het "mooier kan dan in php"

.oisyn schreef op 02 november 2004 @ 10:39:
Als ik het over OOP heb bedoel ik een gedegen ontworpen OO systeem waar encapsulatie, polymorphisme en overerving de boventoon voeren. Wat functies rangschikken binnen een class hoort daar niet echt bij.
Dat je die concepten kan gebruiken bij OOP, maakt ze nog niet verplicht natuurlijk. Ook in java kan je alle variabelen public maken, geen getters/setters programmeren etc. Is er dan nog steeds encapsulatie? Ja, imho wel.
Zo ook bij een php-klasse. Zolang je functies op de klasse aanroept, die iets interns doet waar je aanroeper verder geen weet van hoeft te hebben is er imho al (een vorm van) encapsulatie.
Dat dat dan bij Java, C# en anderen veel mooier en stricter uitgevoerd kan worden doet daar niks aan af.
Polymorfisme en overerving worden in php inderdaad wat minder gebruikt, doordat het niet echt typesafe is (php4 iig), is het ook wat minder nodig om zo strict alles volgens polymorfische patronen te programmeren.
Onderstaande codevoorbeelden zullen tenslotte beide werken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // A:
class Test{ function toString() { return "Test"}}
class Test2{ function toString() { return "Test2"}}
// B:
class Object{ function toString() { return "Object"}}
class Test extends Object { function toString() { return "Test"}}
class Test2 extends Object { function toString() { return "Test2"}}
// hulpcode
function useOb($obj) { echo $obj->toString(); }
// Test:
useObj(new Test());
useObj(new Test2()); |
Waarom dan de moeite van overerving nemen?

Ik ben het dan ook eens met Soultaker, want wat ik al eerder zei, de lifespan van een enkel script is gewoon veel te kort om allerlei relaties tussen objecten te leggen.
Ook als je in een korte lifespan veel code moet uitvoeren kan het handig zijn om de boel in OO op te zetten. Je zegt het zelf geloof ik al hier in deze thread. Wat is belangrijker; de snellere development/betere onderhoudbaarheid of de performance?
In een Java-webapp waar ik mee bezig ben hebben de objecten vooral een lange levensduur doordat ze gecached worden of via factories worden gebouwd om hergebruikt te kunnen worden na een "reset" of omdat ze toch stateless zijn. Niet omdat er in het ontwerp nou ruimte was om objecten een lang leven te geven.