PHP: Blad parsera? Skad taki wynik dodawania

0

W trakcie programowania modelu tokena natrawilem na ponizszy problem.
Mozliwe ze to trywialna kwestia ale wpatruje sie w to i nie moge zrozumiec dlaczego tak to dziala.

    public function getExpiry()
    {
        return (int) $this->expiry;
    }

    public function getCreated()
    {
        return (int) $this->created;
    }

    public function isTokenValid()
    {
        echo $this->getCreated() ." , " . $this->getExpiry();
        echo "<br />";
        echo $this->getCreated() ." + " .$this->getExpiry() . " = " . $this->getCreated()+$this->getExpiry();
        die();
        // DALSZY KOD
    }

Wynik na ekranie mam nastepujacy (co jest totalnie bez sensu) :

1363363494 , 3000000
1366363494

Gdy natomiast usune z trzeciego echo sume- na ekranie wyswietla sie wszystko poprawnie:

1363363494 , 3000000
1363363494 + 3000000 = 

Czy ktos mi powie dlaczego?

1

Czy ktos mi powie dlaczego?

Afair, operator + ma wyższy precedence (?) od operatora konkatenacji stringów.

Spróbuj tak:

echo $this->getCreated() ." + " .$this->getExpiry() . " = " . ($this->getCreated()+$this->getExpiry());
0

Ponieważ ten ciąg:

$this->getCreated() ." + " .$this->getExpiry() . " = " . $this->getCreated()

jest traktowany jako string (i konwertowany potem na liczbę), do której chcesz dodać to: $+$this->getExpiry()

.
Coś jak `"1"."2a" + "2"` --> "12a" + "2" --> php robi z tego liczby --> `12 + 2` i dodaje. Przy konwertowaniu na liczby - jak trafi się znak, który nie jest cyfrą to reszta jest odrzucana.

Rozwiązanie: weź ostatnie wyrażenie w nawias. Wtedy pierwsze zsumuje to co chcesz, potem złączy stringi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1