Asus EN8800GTS, Asus P5E, Intel E8400, 2x500gb Spinpoint (raid0), Zalman HP 600 watt, cnps 9500 led, creative xfi music, 4x1gb hyperX PC2 8500
Check dit eens: http://nl3.php.net/manual/en/language.oop5.basic.php
If money talks then I'm a mime
If time is money then I'm out of time
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
| <?php class a{ public function __construct(){ new b($this); } public function printFooBar(){ echo 'foobar'; } } class b{ public function __construct(a $a){ $a->printFooBar(); } } $a = new a(); ?> |
geeft: Notice: Undefined variable: this in ... maar &$this lijkt wat beter te werken.. even proberenorf schreef op maandag 24 augustus 2009 @ 21:35:
zoiets bedoel je?
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 <?php class a{ public function __construct(){ new b($this); } public function printFooBar(){ echo 'foobar'; } } class b{ public function __construct(a $a){ $a->printFooBar(); } } $a = new a(); ?>
Asus EN8800GTS, Asus P5E, Intel E8400, 2x500gb Spinpoint (raid0), Zalman HP 600 watt, cnps 9500 led, creative xfi music, 4x1gb hyperX PC2 8500
Niet als je hem als argument wilt meegevenMatis schreef op maandag 24 augustus 2009 @ 21:32:
Je moet sws de -> operator gebruiken.
Check dit eens: http://nl3.php.net/manual/en/language.oop5.basic.php
Een vertaling van het scriptje zoals jij hem hebt in Java, naar PHP is zoiets:
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
| <?php class A { private $b; public function __construct() { $b = new B($this); } public function printFooBar() { echo "Foobar"; } } class B { public function __construct(&$obj) { $obj->printFooBar(); } } $a = new A(); ?> |
De output is dan gewoon "Foobar". Ik weet niet precies wat jij had, maar volgens mij had jij hier ook uit moeten kunnen komen. Ik heb dan wel de &-operator gebruikt, maar die is eigenlijk niet eens nodig door de manier waarop PHP objecten behandeld (hij maakt alleen een kopie als je daar expliciet een opdracht voor geeft).
Ik zie in dit stukje code geen notice. Daarnaast hoeven objecten niet als reference doorgegeven te worden met '&', omdat dat sinds php5 standaard gebeurt.Meijuh schreef op maandag 24 augustus 2009 @ 21:38:
[...]
geeft: Notice: Undefined variable: this in ... maar &$this lijkt wat beter te werken.. even proberen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?php class A { protected function printFoobarA() { echo "Foobar"; } } class B extends A { public function __construct() { $this->printFoobarA(); } } $b = new B(); ?> |
Omdat compositie vaak een betere oplossing is dan inheritance.iBasch schreef op maandag 24 augustus 2009 @ 23:19:
Waarom niet zoiets?
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Appels zijn ook beter dan peren!Grijze Vos schreef op dinsdag 25 augustus 2009 @ 00:30:
[...]
Omdat compositie vaak een betere oplossing is dan inheritance.
Dat is een gedurfde uitspraak. Wel is het zo dat er met zo'n abstract voorbeeld nooit te zeggen is of het een beter is dan het andere als je het toepast zoals de TS dat doet.Grijze Vos schreef op dinsdag 25 augustus 2009 @ 00:30:
[...]
Omdat compositie vaak een betere oplossing is dan inheritance.
Moet ik serieus morgen op het werk mijn kopie van GoF opentrekken om een stuk uit het eerste hoofdstuk te quoten?
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Ikzelf vraag me persoonlijk af waar die notice vandaan komt, en of de TS niet nog meer code heeft die daarvan de oorzaak is. De voorbeelden die hier zijn gegeven lijken me in ieder geval correct.
Tesla Model Y RWD (2024)
Grijze Vos schreef op dinsdag 25 augustus 2009 @ 01:55:
Moet ik serieus morgen op het werk mijn kopie van GoF opentrekken om een stuk uit het eerste hoofdstuk te quoten?
Nee hoor, maar wel de volgende keer iets beter onderbouwen als je in een bepaalde context contextloze uitspraken doet die bepaald geen wet zijn. Dat inheritance fout gebruikt wordt - sure. Dat in een aantal van die situaties aggregatie/compositie een beter alternatief was geweest - ook sure. Maar dit soort losse flodders zijn gewoon gevaarlijk om op een forum als dit te roepen. Voor je het weet krijg je "tables zijn bah" situaties waarin mensen niet meer snappen dat tables soms op websites wel degelijk de beste keuze kunnen zijn.
curry684 schreef op dinsdag 25 augustus 2009 @ 11:52:
[...]
offtopic:
Nee hoor, maar wel de volgende keer iets beter onderbouwen als je in een bepaalde context contextloze uitspraken doet die bepaald geen wet zijn. Dat inheritance fout gebruikt wordt - sure. Dat in een aantal van die situaties aggregatie/compositie een beter alternatief was geweest - ook sure. Maar dit soort losse flodders zijn gewoon gevaarlijk om op een forum als dit te roepen. Voor je het weet krijg je "tables zijn bah" situaties waarin mensen niet meer snappen dat tables soms op websites wel degelijk de beste keuze kunnen zijn.
Mwoah, ik dacht dat we niet aan voorkouwen deden hier. Misschien ben ik te naief als ik denk dat mensen bij zo'n opmerking eens een keertje googlen en erachter komen waarom ik zo'n opmerking plaats.
On-topic:
De oplossing van Patriot iets verder naar boven zonder de & werkt gewoon onder mijn PHP5 installatie.
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Maar je opmerking slaat gewoon compleet de plank mis, of hij nou waar is of niet. Hij is namelijk totaal niet van toepassing. Composition is namelijk inherent iets heel anders dan inheritance, gezien het feit dat je bij inheritance het doorgaans over een is-a relationship hebt, ipv has-a. Op het moment dat je inheritance gaat gebruiken voor has-a relationsships, dán is je opmerking zinnig. Maar die context is hier niet duidelijk (A en B kunnen Auto en Stuur representeren, maar net zo goed ook Dier en Hond), en dus is je opmerking irrelevant, en zijn de opmerkingen die je van curry684 en Patriot op je eigen reactie krijgt imho zeer terecht.Grijze Vos schreef op dinsdag 25 augustus 2009 @ 14:04:
[...]
offtopic:
Mwoah, ik dacht dat we niet aan voorkouwen deden hier. Misschien ben ik te naief als ik denk dat mensen bij zo'n opmerking eens een keertje googlen en erachter komen waarom ik zo'n opmerking plaats.
[ Voor 22% gewijzigd door .oisyn op 25-08-2009 14:18 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Jij doet nu net alsof van te voren de domein enititeiten vast worden gelegd door iemand's manager, en dat die persoon dan gaat kijken of er sprake is van inheritance of compositie bij de verschillende relaties die gelegd moeten worden. Zo werkt het in de praktijk niet. Mijn hele punt is juist dat bij het designen van een object model te snel naar inheritance word gegrepen, terwijl dat juist vaak fout is..oisyn schreef op dinsdag 25 augustus 2009 @ 14:12:
[...]
Maar je opmerking slaat gewoon compleet de plank mis, of hij nou waar is of niet. Hij is namelijk totaal niet van toepassing. Composition is namelijk inherent iets heel anders dan inheritance, gezien het feit dat je bij inheritance het doorgaans over een is-a relationship hebt, ipv has-a. Op het moment dat je inheritance gaat gebruiken voor has-a relationsships, dán is je opmerking zinnig. Maar die context is hier niet duidelijk (A en B kunnen Auto en Stuur representeren, maar net zo goed ook Dier en Hond), en dus is je opmerking irrelevant, en zijn de opmerkingen die je van curry684 en Patriot op je eigen reactie krijgt imho zeer terecht.
Het is wel frappant dat mij wordt verweten dat ik zonder de context te kennen zeg dat inheritance overused is (wat gewoon een statistisch feit is), en dat er bij degene die ook zonder de context te kennen meteen inheritance aandraagt niets over wordt gezegd. Persoonlijk ging ik er even vanuit dat de TS wel gewoon weet wanneer welke variant wanneer te gebruiken.
@hieronder: "vaak" is niet "vrijwel altijd".
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Maar volgens mij is de TS er ondertussen al vandoor.
Tesla Model Y RWD (2024)
De entiteiten zijn al vastgelegd - het zijn de classes zoals de TS die bedacht heeft.Grijze Vos schreef op dinsdag 25 augustus 2009 @ 14:54:
[...]
Jij doet nu net alsof van te voren de domein enititeiten vast worden gelegd door iemand's manager, en dat die persoon dan gaat kijken of er sprake is van inheritance of compositie bij de verschillende relaties die gelegd moeten worden.
Die persoon die dat aandroeg zei ook niet dat het zo moest. Hij vroeg in feite "waarom niet gebruik maken van inheritance". Compleet zonder waarde-oordeel. Het is vervolgens aan de TS om die vraag te beantwoorden.Het is wel frappant dat mij wordt verweten dat ik zonder de context te kennen zeg dat inheritance overused is (wat gewoon een statistisch feit is), en dat er bij degene die ook zonder de context te kennen meteen inheritance aandraagt niets over wordt gezegd.
[ Voor 9% gewijzigd door .oisyn op 25-08-2009 15:17 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ik ben pas begonnen met OOP, dus heb er (nog) niet zo veel verstand van... Met het MVC principe extend ik ook steeds de appcontroller, maar nu ik erover nadenk is het inderdaad niet helemaal hoe de TS het toepast, ik probeerde echter alleen maar een manier aan te dragen die hetzelfde resultaat geeft, ongeacht of dit goed of fout toegepast wordt. Het is inderdaad aan de TS om te beoordelen of deze het ook daadwerkelijk op die manier gaat gebruiken. Wel grappig dat mijn stukje code tot zo'n discussie leidt..oisyn schreef op dinsdag 25 augustus 2009 @ 15:15:
Die persoon die dat aandroeg zei ook niet dat het zo moest. Hij vroeg in feite "waarom niet gebruik maken van inheritance". Compleet zonder waarde-oordeel. Het is vervolgens aan de TS om die vraag te beantwoorden.
@Grijze Vos: Bij zo'n uitspraak verwacht ik echter wel een uitleg, want op deze manier weet ik gewoon niet waarom mijn code direct al afgekeurd wordt.
Maar goed, ik denk dat de TS er wel uit moet komen met de gegeven voorbeelden, alleen nog even wachten op een reactie.