set_error_handler() klagar på min funktion

  • Författare
  • Meddelande

desk15

html-guru

  • Inlägg: 68
  • Blev medlem: 03 sep 2015, 11:28

set_error_handler() klagar på min funktion

Inlägg27 apr 2016, 16:00

Hej

Jag försöker göra en klass som ska skriva till en fil varje gång en error uppstår.
Min klass kollar om debug läge är på, om inte så ska den använda set_error_handler() för att ändra funktionen.
I den funktionen som jag anger så skriver den felmeddelandet på filen.

Problemet jag får är att set_error_handler() tycker min callable värde är inte giltig.
Kod: Markera allt
set_error_handler() expects the argument (Logger::writeErrorToFile) to be a valid callback in ...


Min klass som sätter funktionen set ut så här:
Kod: Markera allt
public static function init()
{
    if (!self::$debug) {
        set_error_handler(["Logger", "writeErrorToFile"]);
    }
}


och min funktion ser ut så här:
Kod: Markera allt
public static function writeErrorToFile($errno, $errstr, $errfile, $errline)
{
    $filename = date("Y-m-d") . ".txt";
    $file = new File(self::getCacheDir() . $filename);

    $contents = self::getContents($errno, $errstr, $errfile, $errline);
    $file->write($contents);

    return true;
}



Jag har provat att ändra parametern så den har alla och default värden, även provat ändra return värdet och inget funkar...

Jag kör på Windows 10 och XAMPP.
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rick Cook
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10972
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: set_error_handler() klagar på min funktion

Inlägg27 apr 2016, 17:06

Jag hade försökt debugga mig fram till lite förståelse om problemet.

http://php.net/manual/en/function.method-exists.php
http://php.net/manual/en/function.is-callable.php

I Anax-MVC används ovan två metoder till stor del i src/MVC/CDispatcher. Tex här:
https://github.com/mosbth/Anax-MVC/blob ... c.php#L191

Jag hade testat lite så här:
Kod: Markera allt
public static function init()
{
    var_dump(method_exists(["Logger", "writeErrorToFile"]));
    var_dump(is_callable(["Logger", "writeErrorToFile"]));

    if (!self::$debug) {
        set_error_handler(["Logger", "writeErrorToFile"]);
    }
}


Ett steg fram?
...
..:
.... /mos

desk15

html-guru

  • Inlägg: 68
  • Blev medlem: 03 sep 2015, 11:28

Re: set_error_handler() klagar på min funktion

Inlägg28 apr 2016, 00:10

Jag testade det och både returnera false.

Men jag fixade det genom att istället för att ha "Logger" så hade jag self::class. Så här:
Kod: Markera allt
if (!self::$debug) {
    set_error_handler([self::class, "writeErrorToFile"]);
}


Då var jag nyfiken och testade att köra
Kod: Markera allt
echo self::class;

som då visade hur dum jag var... :cry:

Det som skrevs ut var: "\Honth\Log\Logger".
Japp... glömde namespace...

Tack för hjälpen!
"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rick Cook

Vilka är online

Användare som besöker denna kategori: Bing [Bot] och 19 gäster