Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Php 7 i PHPStorm 10
Forum PHP.pl > Inne > Hydepark
Fred1485
Chciałem pobawić się z PHP7, pobrałem testową wersję PHPStorm 10. Interpreter dodałem, więc efekty moich wypocin pisane w PHP7 w przeglądarce działają, ale w IDE wyrzuca dziwne błędy, mianowicie:

  1. public function __construct (array $resources, array $requirements, int $destruction)
  2. {
  3. $this->resources = $resources;
  4. $this->requirements = $requirements;
  5. $this->destruction = $destruction;
  6. }


Rzutuję $destruction na int, konkretyzując obiekt dostaję błąd:

  1. $level = new \Game\Fields\DeepDeath([], [], 30);


Błąd dotyczy tego, że konstruktor oczekiwał nie int a obiektu o typie int. Już to drażni w oczy, mając metodę:

  1. public function getDestruction (): int
  2. {
  3. return $this->destruction;
  4. }


I wywołanie:

  1. echo $level->getDestruction();


Otrzymuję kolejny błąd, jak się można domyślić, że nie mam metody __toString w obiekcie int. IDE bierze wartość skalarną jakby był to obiekt. Dodam, że w przeglądarce działa wszystko. Może trzeba w opcjach przełączyć coś?

batman
Sprawdź czy na pewno masz wybrane PHP7 w Languages & Frameworks -> PHP -> PHP Language level. Samo ustawienie interpretera nie gwarantuje poprawnego zidentyfikowania języka.
Poza tym piszesz, że błąd pojawia Ci się w wywołaniu konstruktora, a wcześniej pisałeś, że kod poprawnie się uruchamia. To jak to w końcu jest? Najlepiej będzie jak wrzucić screny z opisem błędów z PhpStorma.
Fred1485
Już prostuję, w IDE pokazuję błąd, natomiast w przeglądarce wszystko działa wink.gif W opcjach mam ustawiony interpreter na PHP7 oraz wersję także na 7.

  1. namespace Game\Fields;
  2.  
  3.  
  4. abstract class Field
  5. {
  6. protected $resources = [];
  7.  
  8. protected $requirements = [];
  9.  
  10. protected $destruction;
  11.  
  12. public function __construct (array $resources, array $requirements, int $destruction)
  13. {
  14. $this->resources = $resources;
  15. $this->requirements = $requirements;
  16. $this->destruction = $destruction;
  17. }
  18.  
  19. public function getResources (): array
  20. {
  21. return $this->resources;
  22. }
  23.  
  24. public function getRequirements (): int
  25. {
  26. return $this->requirements;
  27. }
  28.  
  29. public function getDestruction (): int
  30. {
  31. return $this->destruction;
  32. }
  33. }
  34.  
  35. class DeepDeath extends Field {}
  36.  
  37. class MysteryDark extends Field {}
  38.  
  39. class SunEnd extends Field {}


Wywołanie:

  1. declare(strict_types=1);
  2.  
  3. require_once __DIR__ . '/Fields/Fields.php';
  4.  
  5. $level = new \Game\Fields\DeepDeath([], [], 30);
  6.  
  7. echo $level->getDestruction();


Sorki za niską rozdzielczość tongue.gif

http://abload.de/img/beztytuuhhqif.png
Pyton_000
To jest bug wink.gif
Prawdopodobnie zostało to już poprawione. Spróbuj pobrać EAP i sprawdź jeszcze raz.

https://confluence.jetbrains.com/display/Ph...+Access+Program
batman
Tak jak mówi @Pyton_000. Sprawdź najnowszą dostępną wersję. Jeśli błąd będzie się nadal pojawiał, zgłoś go do JetBrains. Ostatnio miałem błąd związany z obsługą klas anonimowych. Dwa maile, opis sytuacji + kod powodujący błąd i ticket wystawiony. Teraz trzeba poczekać, aż ktoś go ruszy wink.gif
Fred1485
No niestety w EAP to samo tongue.gif Trzeba będzie napisać do twórców.

--edit

Na stacku napisali, żeby zmienić int na \int i o dziwo działa. Co u licha?
com
bo on szuka domyślnie definicji int w twojej przestrzeni nazw, tak samo jest z innymi klasami np Exception nie zadziała, a \Exception tak wink.gif

Btw to nawet widać na Twoim zamieszczonym obrazku wink.gif
Pyton_000
@com tak ale to jest niepoprawne zachowanie bo int nie jest typem obiektowym jak Int w Java.
com
no owszem, być może phpdoc by pomógł smile.gif
Pyton_000
Nie, nie pomaga smile.gif
com
no to w takim razie trzeba to zgłosić i poprawią, w końcu php7 dopiero wyszedł więc pewnie jeszcze będzie sporo innych błędów.

Fix of scalar types in namespaced classes for PHP 7 biggrin.gif poprawili biggrin.gif
Pyton_000
A działa chociaż ta poprawka ? biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.