2016-10-10 6 views
6

mam wdrożenie interfejsu Iterator i jeśli zaimplementować to powrót skalarne (po nawiązaniu http://php.net/manual/en/class.iterator.php), mam ten błąd:PHP7: nie powinien przyjmować liczby całkowitej deklaracji typu powrotu skalarnego?

TypeError: Return value of Collection::key() must be an instance of scalar, integer returned

Realizacja klasa:

class Collection implements \Iterator 
{ 
    public function key(): \scalar 
    { 
     return key($this->colecao); 
    } 
    // other methods implementations... 
} 

Według PZP referencyjny całkowitą należy rozważyć wartością skalarną (http://php.net/manual/en/migration70.new-features.php)

Scalar type declarations come in two flavours: coercive (default) and strict. The following types for parameters can now be enforced (either coercively or strictly): strings (string), integers (int), floating-point numbers (float), and booleans (bool).

Czy jest jakiś błąd w moim kodzie, czy byłby to błąd?

Dziękuję za wszelkie wyjaśnienia!

+0

'publiczny klucz funkcyjny(): int' jest tym, czego potrzebujesz. Musisz określić, który typ skalarny zwróci. –

+0

Typy zwrotów mogą być tylko http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.types Nie ma czegoś takiego jak skalar, o którym słyszałem o – RiggsFolly

+0

Typy pokazane w dokumentacji PHP nie są prawdziwymi typami, których można używać w kodzie, mają być po prostu opisowe dla ludzkich czytelników. Na przykład. nie ma typu o nazwie 'mixed', to po prostu oznacza, że ​​funkcja może zwrócić wiele typów. – Barmar

Odpowiedz

5

PHP nie ma typu znanego jako \scalar. PHP obsługuje tylko typy those. A twój typ \scalar wygląda na inną klasę.

Powiązane problemy