Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> niezgodność typów argumentów metody, error: must be an instance of string, string given - wtf?
Can I
post 20.04.2007, 19:14:05
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.06.2006
Skąd: Coventry, UK

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Can I 20.04.2007, 19:18:53


--------------------
stay all night, we're save the population
flash / flex / web developer
Go to the top of the page
+Quote Post
Statozor
post 20.04.2007, 19:26:36
Post #2





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 23.09.2006

Ostrzeżenie: (0%)
-----


Zmienna $queryStr musi być obiektem klasy string inaczej nie wypali
Go to the top of the page
+Quote Post
Can I
post 20.04.2007, 19:32:23
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.06.2006
Skąd: Coventry, UK

Ostrzeżenie: (0%)
-----


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ć


--------------------
stay all night, we're save the population
flash / flex / web developer
Go to the top of the page
+Quote Post
Statozor
post 20.04.2007, 19:37:19
Post #4





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 23.09.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
batman
post 20.04.2007, 19:38:11
Post #5





Grupa: Moderatorzy
Postów: 2 902
Pomógł: 266
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
--------------------
blog
Kuchnia Kopytka
www.wykangurzeni.pl
Go to the top of the page
+Quote Post
Can I
post 20.04.2007, 23:46:27
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.06.2006
Skąd: Coventry, UK

Ostrzeżenie: (0%)
-----


rozumiem


--------------------
stay all night, we're save the population
flash / flex / web developer
Go to the top of the page
+Quote Post
dr_bonzo
post 20.04.2007, 23:52:22
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
menic
post 21.04.2007, 00:00:55
Post #8





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

Ostrzeżenie: (0%)
-----


dobrze pamietasz smile.gif


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
Sedziwoj
post 21.04.2007, 18:20:38
Post #9





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


I to jest w manualu, więc nie rozumiem czemu od razu nie odesłaliście...
http://www.php.net/manual/en/language.oop5.typehinting.php" title="Zobacz w manualu PHP" target="_manual

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).


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
menic
post 21.04.2007, 18:37:48
Post #10





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

Ostrzeżenie: (0%)
-----


Sedziwoj: w manualu wszystko jest ;-)


--------------------
Jak masz cos zrobic dobrze...
...To musisz zrobić to sam.

Uchwycić moment...
Go to the top of the page
+Quote Post
Sedziwoj
post 21.04.2007, 18:41:12
Post #11





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.11.2018 - 18:40