0
<?php
class Kunde 
{
    public $knr;
    public $navn;
    public $adr;
    public $tlfnr;
    public $kurv = array();

    function __construct($nr,$n,$a)
    {
        $this->knr = $nr;
        $this->navn = $n;
        $this->adr = $a;
    }

    function LeggTilVare($vnavn,$vantall,$vpris)
    {
        $this->kurv[]=new Vare($vnavn,$vantall,$vpris);
    }

    function VisVarer()
    {
        for($i=0; $i < count($this->kurv); $i++)
        {
            $text+= $this->kurv[$i]->getInfo() . "<br/>";
        }

        return $text;
    }

class Vare 
{
    public $varenavn;
    public $antall;
    public $pris;

    function __construct($navn,$antall,$pris)
    {
        $this->varenavn=$navn;
        $this->antall=$antall;
        $this->pris=$pris;
    }

    function getInfo()
    {
        return $this->varenavn.", ".$this->antall." st, ".$this->pris.",-";
    }
}

$kunde1 = new Kunde(1,"Andreas","Gronland");

$kunde1->LeggTilVare("Kjekks", 10, 10.00);

私は Java でのプログラミングに慣れていますが、現在 PHP を学んでいます。

私の関数VisVarer()はただ戻るだけで、他には"0"何もありません。別のクラスからの別の関数内での呼び出しgetInfo()、または for ループの何かの問題に関係していると思います。

たぶん、これはこのようなものをプログラムする間違った方法ですか?

echo $kunde1->kurv[0]->getInfo(); // returns "Kjekks, 10 st, 10"

echo $kunde1->VisVarer(); // returns "0"
4

5 に答える 5

2

PHPでは、連結演算子はドットです。この行の内容は次のとおりです。

$text+= $this->kurv[$i]->getInfo() . "<br/>";

java(+ =)から慣れているものと、php固有のものであるドットを使用しています

その行(および同様のものすべて)を次のように変更してみてください

$text .= $this->kurv[$i]->getInfo() . "<br/>";
于 2013-02-05T12:37:48.637 に答える
2

文字列の連結に演算子を+=使用する必要がある場合は、演算子を使用しています。.=

PHPでは、これらは2つの異なる演算、数学的な加算と文字列の連結です。

于 2013-02-05T12:37:56.677 に答える
0

この演算子を使用しています:

+=

これは整数にのみ使用されます。PHPは、文字列を整数に変換しようとします(最終的には0になります)。

代わりに、文字列連結演算子が必要になる可能性があります。

.= 
于 2013-02-05T12:38:20.993 に答える
0

文字列連結は.ではなくで行われ+ます。

そのため、 in.=の代わりに実行する必要があります。+=VisVarer

于 2013-02-05T12:39:19.857 に答える
0

この行を次のように変更します

$text.= $this->kurv[$i]->getInfo() . "<br/>";

PHP の連結代入演算子は ではあり.=ません+=。何が起こっているかというと、結果の文字列を数値として追加している$textため、常にゼロになります。

于 2013-02-05T12:39:38.433 に答える