Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] OOP funkcja __toStrng(), blędne dane zwracane przez funkcję
Zajac1982
post 27.05.2012, 12:06:15
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.05.2012

Ostrzeżenie: (0%)
-----


Witajcie! Obecnie raczkuję w programowaniu OOP w PHP i mam problem: mój program powinien wypisywać na ekranie sumę dwóch liczb, np. 2+3=5. Problem w tym, że otrzymuję ciągle wynik 0 i nie wiem, czemu. W programie użyłem funkcji __toString by wyświetlić na ekranie pola klasy Test4.

Program wygląda tak:

<?php
class Test4
{

var $a;
var $b;

public function __toString($zmienna)
{
$zmienna=$this->a.'+'.$this->b.'='.$a+$b;

return $zmienna;
}

public function ustawZmienne($a, $b)
{
if (is_numeric($element)) {
$a->$this->a=$a;
$b->$this->b=$b;
return true;
}
else
return false;
}

}
$test=new Test4();
$test->ustawZmienne(4,2);

echo $test->__toString($zmienna);

?>
Go to the top of the page
+Quote Post
konrados
post 27.05.2012, 12:23:47
Post #2





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


  1. if (is_numeric($element)) {
  2. $a->$this->a=$a;
  3. $b->$this->b=$b;
  4. return true;
  5. }


Jakiś chyba nowy PHP wyszedłsmile.gif

Co robi $a->$this ? Chciałeś chyba $this->a=$a;
Plus - gdzie masz zdefiniowaną zmienną $element, którą używasz?

Update: $zmienna=$this->a.'+'.$this->b.'='.$a+$b
Tak się łączy łańcuchy (tekst), Ty chcesz po prostu:
return $this->a+$this->b;

Zanim zabierzesz się za OOP powinieneś poznać podstawy (zmienne, zasięg, operatory, funkcje).

Ten post edytował konrados 27.05.2012, 12:29:22
Go to the top of the page
+Quote Post
d3ut3r
post 27.05.2012, 12:48:22
Post #3





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


Wstawiając kod na forum użyj tagów będzie bardziej czytelne. Druga rzecz to metoda __toString to metoda magiczna więc jej wywoływanie jest kontrolowane przez php ty tylko musisz zrobić:

  1. echo $object;



--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
Zajac1982
post 27.05.2012, 17:58:02
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 27.05.2012

Ostrzeżenie: (0%)
-----


Dzięki za pomoc. Poprawiłem program i teraz działa jak chcę.

<?php
class Test4
{

var $a;
var $b;

public function __toString($a, $b)
{
$suma=$this->a+$this->b;

return $suma;
}

public function ustawZmienne($a, $b)
{
if (is_numeric($a) and is_numeric($b)) {
$this->a=$a;
$this->b=$b;
echo $a."+".$b."=";
return true;
}
else
return false;
}

}
$test=new Test4();
$test->ustawZmienne(4,5);

echo $test->__toString(4,3);

?>
Go to the top of the page
+Quote Post
Crozin
post 27.05.2012, 18:35:29
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


__toString() jest metodą, która nie przyjmuje żadnych argumentów.

PS. Używaj BBCode.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.07.2025 - 04:13