Napi lolphp


<?php
function triple(int $i)
{
	return 3 * $i;
}
[...]
$num = triple(3);
echo $num;

result:
PHP Catchable fatal error: Argument 1 passed to triple() must be an instance of int, integer given, called in /home/carl/public_html/lolphp/index.php on line 12 and defined in /home/carl/public_html/lolphp/index.php on line 2


<?php
[...]
function quadruple(integer $i)
{
	return 4 * $i;
}
[...]
$num2 = quadruple(2);
echo $num2;

result:
PHP Catchable fatal error: Argument 1 passed to quadruple() must be an instance of integer, integer given, called in /home/carl/public_html/lolphp/index.php on line 15 and defined in /home/carl/public_html/lolphp/index.php on line 7

Hozzászólások

A hibaüzenet maga a lol (főleg a második esetben). Valahogy úgy kéne hangoznia, hogy typehinting does not work on int(eger) vagy primitive types. Egyébként mivel van is_int, is_bool, stb. függvény, még csak bonyolult se volna se megoldani (tudom, kikerülni se nehéz, rakjam be a függvény első sorába).

Csak PHP-ben értelme nem lenne tekintve a mindenféle type juggling ökörséget. Egy időben mi is belefutottunk abba, hogy ezer helyen egyszerűbb lenne az életünk, ha kicsit jobban be lennének tartva a típusok, vége az lett, hogy irreálisan sok munka mindenhol kikényszeríteni, így inkább szartunk bele és ellenőriztük a főbb helyeken.

(Meg levontuk a következtetést a következő projektre: PHP must die.)

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Csak épp semmi nem akadályoz meg téged abban, hogy csinálj egy "integer" osztályt. Számára ez a typehint ugyanolyan, mint akármelyik más és ha nem talál olyan osztályt/interfészt, akkor adja a standard hibaüzenetet, behelyettesítve az adott stringet. Szóval semmi meglepő nincs a működésében. Vagy esetleg a java fordítótól is elvárod, hogy a $ prefixxel írt változónév esetén szóljon, hogy ez nem PHP?