<?php
class Test
{
private $iets;//geen idee of ik deze wel nodig heb..?
public function Test( $blaat )
{
if (!empty($blaat))
{
echo $this->getIets();
}
else
{
die('Niks ingevoerd');
}
}
public function setIets($iets)
{
//echo 'setIets aangeroepen: '.$iets; //werkt hier wel, dus wordt aangeroepen
$this->iets = $iets;
return;
}
public function getIets()
{
return $this->iets;
}
}
?>
<form action="<?php echo htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
<input name="invoer" type="text" /><br />
<input name="posten" type="submit" value="post" />
</form>
<?php
if(isset($_POST['posten']))
{
$aap = new Test($_POST['invoer']);
$aap->setIets("nadien geset"); //dit hoort toch gewoon uitgevoerd te worden, of wat snap ik hier niet?
//echo $aap->getIets(); //werkt hier ook goed
}
?>
<?php
class Test
{
private$iets;//geen idee of ik deze wel nodig heb..?
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
class test
{
private $iets;
public function __construct ($blaat)
{
$this->setIets($blaat);
}
private function setiets($blaat)
{
$this->iets = $blaat;
}
public function getIets()
{
echo $this->iets;
}
}
$aap = new test($_POST['var']);
$aap->getIets();
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.
<?php
class test
{
private $naam;
function setNaam ($eenNaam)
{
$this->naam = $eenNaam;
}
function getNaam ()
{
return $this->naam;
}
function test ($string)
{
echo str_replace('{naam}', getNaam(), $string);
}
}
$aap = new test('mijn naam is {naam} klaasen.');
$aap->setNaam('jan');
?>
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
<?php
class test
{
private $naam;
private $inhoud;
public function setNaam($eenNaam)
{
//dit zet Jan in $naam
$this->naam = $eenNaam;
// dit roept de functie getNaam aan en vervangt dan jouw opgegeven naam
//in $inhoud die we eerder hebben toegekend bij het starten van het object
$this->getNaam();
}
private function getNaam()
{
echo str_replace('{naam}', $this->naam, $this->inhoud);
}
//als je je functie dezelfde naam geeft als de class word deze onmiddelijk uitgevoerd
//bij het starten van het object, __construct doet hezelfde en bij hernoemen van class
//moet je de functie niet meer hernoemen.
public function __construct($var)
{
//dit zet de string die jij opgeeft bij het starten van de klas
$this->inhoud = $var;
}
}
$aap = new test('mijn naam is {naam} klaasen.');
$aap->setNaam('jan');
?>
<?php
class test
{
private$naam;
private$inhoud;
publicfunction setNaam($eenNaam)
{
//dit zet Jan in $naam
$this->naam=$eenNaam;
// dit roept de functie getNaam aan en vervangt dan jouw opgegeven naam
//in $inhoud die we eerder hebben toegekend bij het starten van het object
//als je je functie dezelfde naam geeft als de class word deze onmiddelijk uitgevoerd
//bij het starten van het object, __construct doet hezelfde en bij hernoemen van class
//moet je de functie niet meer hernoemen.
publicfunction __construct($var)
{
//dit zet de string die jij opgeeft bij het starten van de klas
$this->inhoud=$var;
}
}
$aap=new test('mijn naam is {naam} klaasen.');
$aap->setNaam('jan');
?>
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
<?php
class Test {
/**
* Storage of the data
*
* @return: array
**/
private $aData;
/**
* Constructor
* Kunnen we nu lekker leeg laten, maar je zal bijvoorbeeld de db-connectie
* over kunnen nemen hierin
**/
public function __construct() {
}
public function __set($sKey, $sVal) {
switch($sKey) {
case 'naam':
$this->aData['naam'] = $sVal;
break;
case 'inhoud':
if(strpos($sVal, '%s') !== false) {
$this->aData['inhoud'] = $sVal;
}
break;
}
}
public function __get($sKey) {
switch($sKey) {
case 'naam':
return sprintf($this->aData['inhoud'], $this->aData['naam']);
break;
}
}
}
$oClass = new Test();
$oClass->naam = 'Henk';
$oClass->inhoud = 'Hallo mijn naam is %s';
echo $oClass->naam;
?>
<?php
class Test {
/**
* Storage of the data
*
* @return: array
**/
private$aData;
/**
* Constructor
* Kunnen we nu lekker leeg laten, maar je zal bijvoorbeeld de db-connectie
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