Hallo,

Ik ben bezig met de foutafhandeling van mijn script. Ik wil de foutmeldingen die php geeft loggen. Maar zodra er een fout optreed moet er meer gebeuren zoals bepaalde waardes veranderen. Ik wil graag dat set_error_handler() een functie gebruikt uit een klas.


<?php
 $pag= new pagina("index");
 set_error_handler('$pag->error');
?>

Werkt niet en geeft:

 Warning: set_error_handler() expects the argument ($pag->error) to be a valid callback in G:\wamp\www\index.php on line 27

Het volgende heb ik ook nog geprobeerd:

<?php
global $pag;
$pag= new pagina("index");
function error($level, $message, $file, $line)
 {
  $pag->error($level,$message,$file,$line);	
 }
 set_error_handler('error');
?>

Geeft:

Fatal error: Call to a member function error() on a non-object in G:\wamp\www\index.php on line 25


Is er een manier om dit op te lossen? Of moet ik aan mijn structuur sleutelen?


'$pag->error'

Wat doen die quotes daar?
Zoals je in de manual kan zien verwacht set_error_handler een type callback als parameter. Als je dan even door leest kom je vanzelf op deze pagina waar je precies kan zien hoe je dat doet.

Dit doe je zo:

<?php
$pag= new pagina("index");

set_error_handler( array(&$pag, 'error') , error_reporting() );

?>

Overigens werkt die functie error() bij jou niet omdat die $pag in de functie niet de $pag is die je buiten de scope van je functie hebt gedeclareerd.
Hij zou wel werken indien je het op de onderstaande manier deed:

<?php

$pag= new pagina("index");

function error($level, $message, $file, $line) {
global $pag;
$pag->error($level,$message,$file,$line);
}

set_error_handler('error');

?>


Merk op: in PHP 5 is het afgeraden references (zo'n &-teken bij een toewijzing of voor een functie) te gebruiken, aangezien klassen automatisch al via een soort van reference werken. Nadrukkelijk een reference-expressie gebruiken werkt dan alleen nog maar averechts. Leesvoer.
Jelmer schreef op 20.02.2008 17:15
Merk op: in PHP 5 is het afgeraden references (zo'n &-teken bij een toewijzing of voor een functie) te gebruiken, aangezien klassen automatisch al via een soort van reference werken. Nadrukkelijk een reference-expressie gebruiken werkt dan alleen nog maar averechts. Leesvoer.


Thanks voor de info :-)
Bedankt ik ben er nu helemaal uit :)

Weet ik dat ook weer.

Reageren