Wpis z mikrobloga

WTF #php
Mam kod z taką funkcją:

<?php
function a($x, $y){
  return 1 + $x + $y;
}

echo a();

Co się wydarzy kiedy wywołam a() bez wymaganej liczby parametrów? Fatal error, prawda? Nieprawda: https://eval.in/562142


Czy tak było zawsze? Jest możliwość zmienienia tego zachowania w konfiguracji php? PHP 5.x.
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@thecar: Nie wiem czy jest możliwość zmiany tego. Lecz możesz podać w deklaracji jakiego typu ma być dany parametr, przy braku dostaniesz fatala na twarz.
  • Odpowiedz
Lecz możesz podać w deklaracji jakiego typu ma być dany parametr, przy braku dostaniesz fatala na twarz.

Fatal error poleci jeżeli dodasz type hinty do argumentów funkcji.


@hajs86: @pitu120: ale deklaracją może być tylko klasa, interfejs, array albo callable. Dopiero od PHP 7 można używać prymitywów typu int, string.

Pewnie sobie możesz własny handler błędów zainstalować,
  • Odpowiedz
@thecar: W 5.x możesz podać typ parametru. Przetestowałem na tym Twoim linku i wersji 5.5:

Catchable fatal error: Argument 2 passed to a() must be an instance of string, none given
  • Odpowiedz
nie widzę tu możliwości obsługi wyłącznie konkretnych typów warningów


@thecar:

bool handler ( int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] )
if ($errstr == 'Missing
  • Odpowiedz
@pitu120: pokaż w jaki sposób: https://eval.in/562246

Catchable fatal error: Argument 1 passed to a() must be an instance of integer, integer given, called in /tmp/execpad-6803be568291/source-6803be568291 on line 7 and defined in /tmp/execpad-6803be568291/source-6803be568291 on line 2
@qwertyu: OK, wygląda na to, że jeżeli zwrócę w pozostałych przypadkach FALSE, to domyślny error handler z PHP obsłuży pozostałe warningi.

It is important to remember that the standard PHP error handler is completely bypassed
  • Odpowiedz
@thecar: Bo kiedyś to był język pisany na kolanie a w miarę rozwoju i rosnącej popularności trzeba było zachowywać kompatybilność wsteczną. Ale nie wiem czy to jedyny i najważniejszy powód, może są i inne
  • Odpowiedz