czwartek, 20 grudnia 2007

Ja tu chyba czegoś nie czaje....

Przykładowy kod:

<?php

class MyClass {
public function foo( string $msg ) {
echo "Message : $msg";
}
}

$obj = new MyClass();

$msg = "siemanko";
echo 'Typ $msg : ' . gettype( $msg ) . '<br />';

$obj->foo( $msg );

?>


I teraz ciekawostka! Intepreter php wyświetli nam taki rezultat:
Typ $msg : string

Catchable fatal error: Argument 1 passed to MyClass::foo() must be an instance of string, string given, called in H:\www\wz\tests.php on line 14 and defined in H:\www\wz\tests.php on line


Zapraszam do gorącej dyskusji pod tytułem "wtf?!" !!

UPDATE
Poprawną odpowiedz na pytanie "wtf?!" podał agent rządowy midnight i wygrywa nagrodę niespodziankę do odbioru droga mailową ;-)
Links:
Wyjaśnienie na forum php.pl
Manual PHP

Dziękuje wszystkim za udział !!

5 komentarzy:

  1. Nie wiem jaka masz wersje PHP, ale u mnie dziala jak usunalem "public" i "string".

    OdpowiedzUsuń
  2. no bo wyłączyłeś kontrole typu to Ci działa. Ja tam nie głowie się nad tym co by tu zrobić, żeby to ominąć, tylko jestem zdziwiony tym co mi wywaliło :P

    php 5.2.3

    OdpowiedzUsuń
  3. Looknij to:
    http://forum.php.pl/niezgodnosc_typow_argumentow_metody_t66787.html

    OdpowiedzUsuń
  4. Looknij to (forum.php.pl):
    http://tnij.org/ako2

    PS. Usun poprzedni komentarz - za dlugi link :/

    OdpowiedzUsuń
  5. no to pozdro dla takiej dziwnej "kontroli typów" która na to wychodzi, nie obsługuje typów wbudowanych ;P

    dzięki midnight !

    OdpowiedzUsuń