login  Naam:   Wachtwoord: 
Registreer je!
 Forum

nadien toegevoegde variablen ophalen in class (Opgelost)

Offline vinTage - 30/11/2009 22:20 (laatste wijziging 30/11/2009 22:28)
Avatar van vinTageNieuw lid Ik ben dus ook maar eens begonnen met het mezelf aanleren om classes te schrijven, maar loop al HEEL snel vast....(leeftijd wss )

Alles werkt eigenlijk wel, maar ik krijg het niet voor elkaar om getIets() op te vragen in mn class (regel 10).
  1. $aap = new Test($_POST['invoer']);
  2. $aap->setIets("nadien geset");//deze dus (regel 42)


In de (complete) code staat bij de comments wat er wel/niet meewerkt en wat ik zou willen dat er gebeurd.

  1. <?php
  2. class Test
  3. {
  4. private $iets;//geen idee of ik deze wel nodig heb..?
  5.  
  6. public function Test( $blaat )
  7. {
  8. if (!empty($blaat))
  9. {
  10. echo $this->getIets();
  11. }
  12. else
  13. {
  14. die('Niks ingevoerd');
  15. }
  16. }
  17.  
  18.  
  19. public function setIets($iets)
  20. {
  21. //echo 'setIets aangeroepen: '.$iets; //werkt hier wel, dus wordt aangeroepen
  22. $this->iets = $iets;
  23. return;
  24. }
  25.  
  26. public function getIets()
  27. {
  28. return $this->iets;
  29. }
  30.  
  31. }
  32.  
  33. ?>
  34. <form action="<?php echo htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
  35. <input name="invoer" type="text" /><br />
  36. <input name="posten" type="submit" value="post" />
  37. </form>
  38. <?php
  39. if(isset($_POST['posten']))
  40. {
  41. $aap = new Test($_POST['invoer']);
  42. $aap->setIets("nadien geset"); //dit hoort toch gewoon uitgevoerd te worden, of wat snap ik hier niet?
  43. //echo $aap->getIets(); //werkt hier ook goed
  44. }
  45. ?>


Wie wil deze naab het verlossende antwoord geven ? 

thx

5 antwoorden

Gesponsorde links
Offline kurohyou - 01/12/2009 00:07 (laatste wijziging 01/12/2009 00:22)
Avatar van kurohyou Oud lid allereerst het is niet nodig om
return; in setiets te zetten, je return niets, je zet gewoon een var.
de reden waarom je niets krijgt is omdat $iets nog niets inhoud, je zet je var pas nadat je de class heb aangeroepen.
je hebt je class zo gemaakt dat bij de instantie van je object onmiddelijk word gevraagd wat $iets is.

doe eens private $iets = "nu zie je iets";
en ipv return een echo $this->iets in getiets
en je zal wss wel een antwoord krijgen dan

  1. class test
  2. {
  3. private $iets;
  4. public function __construct ($blaat)
  5. {
  6. $this->setIets($blaat);
  7. }
  8. private function setiets($blaat)
  9. {
  10. $this->iets = $blaat;
  11. }
  12. public function getIets()
  13. {
  14. echo $this->iets;
  15. }
  16. }
  17.  
  18. $aap = new test($_POST['var']);
  19. $aap->getIets();
Offline vinTage - 01/12/2009 22:02 (laatste wijziging 01/12/2009 22:08)
Avatar van vinTage Nieuw lid Misschien (zeker weten ) ligt het aan mij, maar ik krijg na een lange tijd testen, het nog steeds niet aan de gang, maar hieronder heb ik een nieuw voorbeeldje gemaakt, wat denk ik beter omschrijft wat ik ongeveer wil.

  1. <?php
  2. class test
  3. {
  4. private $naam;
  5.  
  6. function setNaam ($eenNaam)
  7. {
  8. $this->naam = $eenNaam;
  9. }
  10.  
  11. function getNaam ()
  12. {
  13. return $this->naam;
  14. }
  15.  
  16. function test ($string)
  17. {
  18. echo str_replace('{naam}', getNaam(), $string);
  19. }
  20.  
  21. }
  22.  
  23.  
  24. $aap = new test('mijn naam is {naam} klaasen.');
  25. $aap->setNaam('jan');
  26. ?>


Het zal allemaal wel logisch zijn voor diegene die overweg kunnen met classe, maar voor mij is het echt abracadabra :d
Offline kurohyou - 01/12/2009 22:31 (laatste wijziging 01/12/2009 22:49)
Avatar van kurohyou Oud lid je doet weer hetzelfde als vorige keer,
new test(string) voert onmiddelijk de functie test uit en hij wil een str_replace doen door middel van getNaam maar $this->naam zet je maar pas na de start van je object, dus kan hij niets vinden omdat $naam niets inhoud.
let er ook op om geen namen van integer en string, etc te gebruiken in classes, dit kan voor problemen zorgen als je $this->string doet

  1. <?php
  2. class test
  3. {
  4. private $naam;
  5. private $inhoud;
  6.  
  7. public function setNaam($eenNaam)
  8. {
  9. //dit zet Jan in $naam
  10. $this->naam = $eenNaam;
  11. // dit roept de functie getNaam aan en vervangt dan jouw opgegeven naam
  12. //in $inhoud die we eerder hebben toegekend bij het starten van het object
  13. $this->getNaam();
  14. }
  15. private function getNaam()
  16. {
  17. echo str_replace('{naam}', $this->naam, $this->inhoud);
  18. }
  19. //als je je functie dezelfde naam geeft als de class word deze onmiddelijk uitgevoerd
  20. //bij het starten van het object, __construct doet hezelfde en bij hernoemen van class
  21. //moet je de functie niet meer hernoemen.
  22. public function __construct($var)
  23. {
  24. //dit zet de string die jij opgeeft bij het starten van de klas
  25. $this->inhoud = $var;
  26. }
  27. }
  28.  
  29. $aap = new test('mijn naam is {naam} klaasen.');
  30. $aap->setNaam('jan');
  31. ?>


en als je je echt wil verdiepen in oop dan kan ik volgende aanraden.
-PHP Object Oriented Solutions [David Powers]
één van de beste boeken die er is vind ik persoonlijk wat betreft OOP in php
Offline ArieMedia - 02/12/2009 09:02
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Ikzelf vind __set() en __get() heerlijk werken..

  1. <?php
  2. class Test {
  3.  
  4. /**
  5. * Storage of the data
  6. *
  7. * @return: array
  8. **/
  9.  
  10. private $aData;
  11. /**
  12. * Constructor
  13. * Kunnen we nu lekker leeg laten, maar je zal bijvoorbeeld de db-connectie
  14. * over kunnen nemen hierin
  15. **/
  16.  
  17. public function __construct() {
  18.  
  19. }
  20.  
  21. public function __set($sKey, $sVal) {
  22. switch($sKey) {
  23. case 'naam':
  24. $this->aData['naam'] = $sVal;
  25. break;
  26. case 'inhoud':
  27. if(strpos($sVal, '%s') !== false) {
  28. $this->aData['inhoud'] = $sVal;
  29. }
  30. break;
  31. }
  32. }
  33.  
  34. public function __get($sKey) {
  35. switch($sKey) {
  36. case 'naam':
  37. return sprintf($this->aData['inhoud'], $this->aData['naam']);
  38. break;
  39. }
  40. }
  41. }
  42.  
  43. $oClass = new Test();
  44. $oClass->naam = 'Henk';
  45. $oClass->inhoud = 'Hallo mijn naam is %s';
  46. echo $oClass->naam;
  47. ?>
Offline vinTage - 02/12/2009 22:43 (laatste wijziging 02/12/2009 22:43)
Avatar van vinTage Nieuw lid Ik reageer zo traag omdat ik dit alles niet echt gelijk bevatte en snapte, maar nu is me EINDELIJK duidelijk hoe een en ander werkt.

In het simpel, verkeek ik me gewoon op het __construct / function test gedeelte.
Het ontbrak me gewoon aan de logica, die ik dankzei Ontani's en kurohyou uitleg nu wel hoop te hebben 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.236s