Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Object-oriented programming _ niezgodność typów argumentów metody

Napisany przez: Can I 20.04.2007, 19:14:05

cześć,

mam interfejs:

  1. <?php
  2. interface UserDAO {
  3.  
  4. public function findUsersByFornameSurnameOrEmail( string $queryStr );
  5.  
  6. }
  7. ?>


i implementację w MySQLUserDAO. testuję to sobie i dostaję taki błąd:

Cytat
Argument 1 passed to MySQLUserDAO::findUsersByFornameSurnameOrEmail() must be an instance
of string, string given, called in (...)


wywołanie w teście wygląda tak:

  1. <?php
  2. $queryStr = "jan";
  3. $actualUsers = $this->dao->findUsersByFornameSurnameOrEmail( $queryStr );
  4. ?>


czy te typy argumentów to muszą być typy zdefiniowane przeze mnie, a nie wbudowane w PHP?

Napisany przez: Statozor 20.04.2007, 19:26:36

Zmienna $queryStr musi być obiektem klasy string inaczej nie wypali

Napisany przez: Can I 20.04.2007, 19:32:23

no a nie jest? winksmiley.jpg
czyli zgaduję, że w PHP5 nie ma jakiegoś auto-boxingu i wbudowanej klasy string czy String, czyli sam bym sobie musiał zdefiniować

Napisany przez: Statozor 20.04.2007, 19:37:19

Sam chciałem tak kiedyś zrobić ale też się nie dało więc doszedłem właśnie do takiego wniosku jak Ty.
Możesz w funkcji sprawdzać typ zmiennej co jest lepsze niż tworzenie nowej klasy dla stringów winksmiley.jpg

Napisany przez: batman 20.04.2007, 19:38:11

Taki zapis

  1. <?php
  2. public function findUsersByFornameSurnameOrEmail( string $queryStr );
  3. ?>


oznacza, że do metody przekazany ma zostać obiekt typu string. W PHP nie ma "wbudowanych" obiektów, tak jak ma to miejsce na przykład w C#. W podanym przez Ciebie przykładzie, do metody przekazujesz łańcuch znaków, a nie obiekt string i przez to zgłaszany jest błąd.

Napisany przez: Can I 20.04.2007, 23:46:27

rozumiem

Napisany przez: dr_bonzo 20.04.2007, 23:52:22

I wymuszac da sie, jak pamietam, tylko obiekty i tablice.

Napisany przez: menic 21.04.2007, 00:00:55

dobrze pamietasz smile.gif

Napisany przez: Sedziwoj 21.04.2007, 18:20:38

I to jest w manualu, więc nie rozumiem czemu od razu nie odesłaliście...
http://pl.php.net/http://www.php.net/manual/en/language.oop5.typehinting.php

Cytat
PHP 5 introduces Type Hinting. Functions are now able to force parameters to be objects (by specifying the name of the class in the function prototype) or arrays (since PHP 5.1).

Napisany przez: menic 21.04.2007, 18:37:48

Sedziwoj: w manualu wszystko jest ;-)

Napisany przez: Sedziwoj 21.04.2007, 18:41:12

Cytat(menic @ 21.04.2007, 19:37:48 ) *
Sedziwoj: w manualu wszystko jest ;-)


Ha ha ha, bardzo śmieszne. Tam masz opisany język, ale nie jak go używać.
To że wiesz jak się tworzy obiekt, nie oznacza że umiesz programować obiektowo.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)