[php] class variable mixup

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bakkerl
  • Registratie: Augustus 2001
  • Laatst online: 01-09 19:17

bakkerl

Let there be light.

Topicstarter
Al een paar dagen aan het testen, maar kom er niet meer uit. Bijna geheel bugs.php.net doorgespit en google, maar weinig antwoorden tot nu toe.

Nu eerst het probleem uitleg. De volgende testcode gaat het al fout:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class test
{
  var $a;
  var $b;
  function test()
  {
    $this->$a = "Hello";
    $this->$b = "World!";
  }
  function showWorld()
  {
    echo $this->$a." ".$this->$b;
  }
}
?>


Met de daarbij behorende webpagina:
PHP:
1
2
3
4
5
<?php
require_once "class.php";
$tst = new test();
echo $tst->showWorld();
?>


Op de pagina zou ik nu de volgende tekst verwachten: "Hello World!"
Wat is echter krijg is "World! World!"

Acties:
  • 0 Henk 'm!

Verwijderd

$this->a = "aap";?

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class test
{
  var $a;
  var $b;
  function test()
  {
    $this->a = "Hello";
    $this->b = "World!";
  }
  function showWorld()
  {
      echo $this->a." ".$this->b;
  }
}

$tst = new test();
echo $tst->showWorld();

?>

[ Voor 23% gewijzigd door Verwijderd op 20-08-2003 10:18 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Weet je zeker dat je niet nog met een andere versie van het bestand werkt o.i.d.? Want deze code kan nooit de output geven die jij beschrijft.

Waarom return jij de waarde trouwens niet uit je class, want dit is wel fout:
PHP:
11
12
13
14
function showWorld() 
  { 
      echo $this->$a." ".$this->$b; 
  }

Dit zit in een class, dan is het beter om in plaats van echo er een return statement van te maken.
PHP:
4
echo $tst->showWorld();

Je functie geeft helemaal geen waarde terug dus dit statement slaat nu nergens op. Dat werkt pas als je in je class het return statement geplaatst hebt. Dat is wel beter want dan kun je het de volgende keer beter hergebruiken, het voordeel van een class.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Er gaan 2 dingen fout inderdaad.. $this->a ipv $this->$a en je echo'd een functie die zelf iets echo'd :)

Acties:
  • 0 Henk 'm!

Verwijderd

Bosmonster schreef op 20 August 2003 @ 10:20:
Er gaan 2 dingen fout inderdaad.. $this->a ipv $this->$a en je echo'd een functie die zelf iets echo'd :)
owja, daar zelfs overheen gekeken :9
(soms wil je te snel he ;) ) :+

Acties:
  • 0 Henk 'm!

  • bakkerl
  • Registratie: Augustus 2001
  • Laatst online: 01-09 19:17

bakkerl

Let there be light.

Topicstarter
Indien de $ tekens weghaal bij de variable toekenning ($this->a="Hello";), dan krijg ik helemaal geen resultaat terug. De variable worden dan dus geheel niet gevuld.

Acties:
  • 0 Henk 'm!

Verwijderd

bakkerl schreef op 20 augustus 2003 @ 10:21:
[...]


Indien de $ tekens weghaal bij de variable toekenning ($this->a="Hello";), dan krijg ik helemaal geen resultaat terug. De variable worden dan dus geheel niet gevuld.
jawel, maar dan moet je ze verderop ook gebruiken zonder $ :)
antwoord is al 3 keer gegeven geloof ik ;)

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

bakkerl schreef op 20 August 2003 @ 10:07:
Al een paar dagen aan het testen, maar kom er niet meer uit. Bijna geheel bugs.php.net doorgespit en google, maar weinig antwoorden tot nu toe.

Nu eerst het probleem uitleg. De volgende testcode gaat het al fout:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class test
{
  var $a;
  var $b;
  function test()
  {
    $this->$a = "Hello";
    $this->$b = "World!";
  }
  function showWorld()
  {
    echo $this->$a." ".$this->$b;
  }
}
?>


Met de daarbij behorende webpagina:
PHP:
1
2
3
4
5
<?php
require_once "class.php";
$tst = new test();
echo $tst->showWorld();
?>


Op de pagina zou ik nu de volgende tekst verwachten: "Hello World!"
Wat is echter krijg is "World! World!"
Binnen je constructor test en showWorld is variable $a == $b . dus $this->$a == $this->$b

Als je voortaan de ERROR_REPORTING op E_ALL zet dan zou je netjes een NOTICE melding krijgen die je probleem gelijk duidelijk maakt.

[ Voor 7% gewijzigd door LuCarD op 20-08-2003 10:25 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

had je ook achter gekomen door error_reporting(E_ALL) lijkt mij ;)

Acties:
  • 0 Henk 'm!

  • bakkerl
  • Registratie: Augustus 2001
  • Laatst online: 01-09 19:17

bakkerl

Let there be light.

Topicstarter
djluc schreef op 20 August 2003 @ 10:18:
Weet je zeker dat je niet nog met een andere versie van het bestand werkt o.i.d.? Want deze code kan nooit de output geven die jij beschrijft.

Waarom return jij de waarde trouwens niet uit je class, want dit is wel fout:
PHP:
11
12
13
14
function showWorld() 
  { 
      echo $this->$a." ".$this->$b; 
  }

Dit zit in een class, dan is het beter om in plaats van echo er een return statement van te maken.
De code is als voorbeeld. Er is juist gekozen de echo te laten doen vanuit de functie ;)
PHP:
4
echo $tst->showWorld();

Je functie geeft helemaal geen waarde terug dus dit statement slaat nu nergens op. Dat werkt pas als je in je class het return statement geplaatst hebt. Dat is wel beter want dan kun je het de volgende keer beter hergebruiken, het voordeel van een class.
klopt, de echo heeft in dit geval geen nut. Het blijft een stukje testcode.

Maar indien in je opvolg, in de function een return geeft, blijft het probleem onveranderd. Er de string "World! World" wordt dan terug gegeven.

Acties:
  • 0 Henk 'm!

Verwijderd

offtopic:
Zat net even dit te lezen maar wat is in hemelsnaam het verschil tussen een functie en een class??
Voor zover ik het nu kan beoordelen zou ik een class zo na kunnen maken met een functie? Of is dit nu wat te hoog gegrepen door moi?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 20 August 2003 @ 10:27:
offtopic:
Zat net even dit te lezen maar wat is in hemelsnaam het verschil tussen een functie en een class??
Voor zover ik het nu kan beoordelen zou ik een class zo na kunnen maken met een functie? Of is dit nu wat te hoog gegrepen door moi?
Ga eens wat lezen over object georienteerd programmeren, en je zal zien wat classen zijn.
Een class is niet echt iets wat je na kan maken met een functie. Een class bevat namelijk functies die iets met dat object doet.

Acties:
  • 0 Henk 'm!

  • pgussow
  • Registratie: Maart 2003
  • Laatst online: 18-08 16:13
Dit is redelijk basaal, toch?

class.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
class test 
{ 
  var $a; 
  var $b; 
  
  function test() 
  { 
    $this->a = "Hello"; 
    $this->b = "World!"; 
  } 
  
  function showWorld() 
  { 
      return ($this->a . " " . $this->b); 
  } 
} 
?> 


test.php:
PHP:
1
2
3
4
5
<?php 
    require_once "class.php"; 
    $tst = new test(); 
    echo $tst->showWorld(); 
?> 


Variabelen van een class zonder $-teken aanspreken... RTFM....

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

pgussow schreef op 20 August 2003 @ 10:47:
Dit is redelijk basaal, toch?

[knip]

Variabelen van een class zonder $-teken aanspreken... RTFM....
en jij leest het topic ook :?
Pagina: 1