bizar probleem parent::__construct
ik zit met een vervelend bizar probleem dat ik al werkend heb gezien bij iemand anders zijn code.
ik heb een main controller die de view init
Code (php)
ik heb andere child constructors! De view word prima geinjecteerd door parent::__construct
Code (php)
Wat is nu het probleem ik kan geen variable aanmaken in childs voor de view
werkt niet. ik krijg steeds undefined variable op de error.
maar als ik dit doe in de main controller lukt dat wel???
waarom kunnen de childs dit niet als parrent construct word? hoe kan ik dit het beste oplossen?
Dit heeft niets met 'bizar' te maken. In je parent heb je $this->view niet gedefinieerd. Die variabele wordt dus runtime aan gemaakt en is daarmee private geworden. Descending classes kunnen die variabele dus niet gebruiken. Leer de verschillen tussen private, protected en public, dan is dit niet meer 'bizar'.
En gebruik ook een autoloader.
protected of public maken van view werkt niet.
in de main controller kan ik dus vars on the fly maken
$this->view->nummer = 8 geen probleem
maar in de childcomtrollers krijg ik steeds undefined variable TESS_view::nummer.
terwijl ik op de tutorial die gast hetzelfde zie doen in de childs met dezelfde code ongeveer denk ik.
ligt dat aan men instellingen ofzo? ik zie anders geen uitweg?
tenzij de views telkens op te roepen in de child controllers in plaats van in de main controller
maar dan heeft die ook geen nut meer.
Laat (de code) eens zien hoe je dat doet vanuit de child controller.
die zegt dat $this->view->naam gelijk aan men modal die bv Anthony returned
variable $this->view->naam blijft leeg NULL;
Code (php)
Toevoeging op 18/06/2013 10:22:44:
doe ik dit inde main werkt het wel
Net had je het over een foutmelding die je kreeg, nu heb je het over een variabele die NULL is. Dat zijn 2 verschillende dingen. En waar roep je die $this->view->naam op?
print $this->naam;
alles werkt als ik de view in elke controller aanmaak
dus elke keer $this->view = new TESS_view;
maar ik wil dat in men main doen daarvoor dient deze tog.
ik begrijp het echt niet. ik zie mensen dit doen. ben al van gisteren middag bezig dit op te lossen maar in vind geen oplossing.
Plaats nu eens gewoon even al je code inclusief de code waar het misgaat.
Anthony de meulemeester op 18/06/2013 10:04:22:
in de main controller kan ik dus vars on the fly maken
Om te beginnen moet je dat helemaal niet doen 'vars on the fly' aanmaken. Niet alleen een slechte gewoonte, ook is het dan helemaal niet mogelijk om buiten het object die variabelen nog aan te roepen. Nogmaals, omdat ze dan private worden.
Anthony de meulemeester op 18/06/2013 10:48:16:
ik begrijp het echt niet. ik zie mensen dit doen.
Dat lijkt me dus klinklare onzin, dat kan namelijk helemaal niet. Alleen BINNEN een object, hoewel het dan nog steeds een slechte gewoonte blijft.
Code (php)
index controller
Code (php)
main controller
Code (php)
en de client side index
Code (php)
Toevoeging op 18/06/2013 11:28:40:
error = Notice: Undefined property: TESS_view::$naam in C:\xampp\htdocs\tess-framework\application\views\index\index.php on line 6
Gewijzigd op 18/06/2013 11:27:23 door anthony de meulemeester
Toevoeging op 18/06/2013 11:40:43:
Je hebt je model niet gedeclareerd terwijl je die wel aanspreekt: $this->model->test();
Daarnaast moet je ook je prooperties in je classes declareren.
Quote:
wat bedoel je met dat variabelen private worden? Variabelen worden toch niet vanzelf private?
- See more at: http://www.phphulp.nl/php/forum/topic/bizar-probleem-parentconstruct/91205/last/#sthash.6X6C8u7O.dpuf
- See more at: http://www.phphulp.nl/php/forum/topic/bizar-probleem-parentconstruct/91205/last/#sthash.6X6C8u7O.dpuf
ik dacht ook dat ze standaard public worden. Werden ze maar private...
Code (php)
Levert dus inderdaad wel 'ikke' op. Dat stuk van de private mag je dus vergeten inderdaad :-)
Neemt niet weg dat het 'on the fly' aanmaken van allerlei variabelen in een class een slecht gewoonte is.... Je object krijgt er namelijk allerlei onvoorziene gegevens bij die het verder niet zal managen, immers, het object zelf weet niet eens dat het er is. Voor jezelf is het ook zeer ongewis welke variabelen er op welk moment allemaal bestaan en debuggen wordt dan ook een ramp.
Wouter J op 18/06/2013 11:46:16:
ik dacht ook dat ze standaard public worden. Werden ze maar private...
Quote:
wat bedoel je met dat variabelen private worden? Variabelen worden toch niet vanzelf private?
- See more at: http://www.phphulp.nl/php/forum/topic/bizar-probleem-parentconstruct/91205/last/#sthash.6X6C8u7O.dpuf
- See more at: http://www.phphulp.nl/php/forum/topic/bizar-probleem-parentconstruct/91205/last/#sthash.6X6C8u7O.dpuf
ik dacht ook dat ze standaard public worden. Werden ze maar private...
Ja, dat zou wel gaaf zijn :-)
Offtopic:
Sinds wanneer is dat fijne (ahum) "See more at: ..." regeltje weer terug? Irritant...
Toevoeging op 18/06/2013 11:50:57:
Erwin H op 18/06/2013 11:49:12:
woops...
inderdaad, hehehe ;-)
kijk nu inject ik view in elke controller
ik krijg nu op men scherm
Notice: Undefined property: TESS_view::$naam in C:\xampp\htdocs\tess-framework\application\views\index\index.php on line 6 -
Code (php)
steek ik het in de constructer krijg ik 'ikke ' op men scherm.
in de constructor werkt het. was da nu weer alemaal;
Code (php)
Toevoeging op 18/06/2013 11:57:43:
ik kan dus enkel in de constructor $this->view aanpassen.
raar
Gewijzigd op 18/06/2013 11:53:56 door anthony de meulemeester
NIET:
$this->view->load('index/index');
$this->view->naam = 'anthony';
MAAR:
$this->view->naam = 'anthony';
$this->view->load('index/index');
Blijkbaar bestaat de variabele naam niet in het view object.
Maar let op wat je nu aan het doen bent, want dit kan dus wel!:
Met alle gevolgen van dien.
Ger van Steenderen op 18/06/2013 12:52:08:
Dat is helemaal niet raar, je kan alleen in een constructor variabelen van een object aanmaken.
Huh? Wat bedoel jij nu?