Edit report at http://bugs.php.net/bug.php?id=53086&edit=1

 ID:                 53086
 Comment by:         uramihsayibok at gmail dot com
 Reported by:        cmanley at xs4all dot nl
 Summary:            require fails in error handler when E_STRICT is
                     emitted from namespace class
 Status:             Open
 Type:               Bug
 Package:            *General Issues
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

Not sure if this should be a bug or whether it's just unexpected
behavior.



The file is included fine. bla() exists. But it exists in the
MyNamespace 

namespace. So

  require_once('bla.php');

  MyNamespace\bla();

  return;

works.



The question is, then, whether the error handler should be in the global


namespace, the namespace it was originally defined in, or the namespace
of the 

code triggering the error.


Previous Comments:
------------------------------------------------------------------------
[2010-10-17 01:44:49] cmanley at xs4all dot nl

Description:
------------
When an E_STRICT error is emitted from a class within a namespace and
this is 

caught in a custom error handler, then require_once() fails.



To demonstrate this bug, I created a minimal test below. It consists of
3 files. 

Place them in a directory and execute test.php from the command line.

Test script:
---------------
************* file test.php ******************

<?php

error_reporting(E_ALL | E_STRICT);



// Custom error handler.

function handle_error($code, $message, $file, $line, $context) {

        $code = $code & error_reporting();

        if ($code == 0) { // skip @ suppressed errors.

                return;

        }

        $errors = array(

                E_ERROR                         => 'E_ERROR',

                E_WARNING                       => 'E_WARNING',

                E_PARSE                         => 'E_PARSE',

                E_NOTICE                        => 'E_NOTICE',

                E_CORE_ERROR            => 'E_CORE_ERROR',

                E_CORE_WARNING          => 'E_CORE_WARNING',

                E_COMPILE_ERROR         => 'E_COMPILE_ERROR',

                E_COMPILE_WARNING       => 'E_COMPILE_WARNING',

                E_USER_ERROR            => 'E_USER_ERROR',

                E_USER_WARNING          => 'E_USER_WARNING',

                E_USER_NOTICE           => 'E_USER_NOTICE',

                E_STRICT                        => 'E_STRICT',

                E_DEPRECATED            => 'E_DEPRECATED',

        );

        if (array_key_exists($code, $errors)) {

                $errname = $errors[$code];

        }

        else {

                $errname = $code;

        }

        $error = "Error handler caught $errname with message \"" . $message .
'" at ' . $file . ' line ' . $line . ".\n";

        error_log($error);

        require_once('bla.php');

        bla($error);

        return;

}

set_error_handler('handle_error');



// This fails because bla.php can't be required in error handler:

require_once('Abstract.php');







*************** Abstract.php **************

<?php

namespace MyNamespace {

        abstract class AbstractFoo {

                abstract public static function foo(); // PHP 5.3 issues an 
E_STRICT
here about abstract + static, even though it now supports static
inheritance.

        }

}









*************** bla.php ******************

<?php

function bla() {

        print "You should see this.\n";

}

Expected result:
----------------
Error handler caught E_STRICT with message "Static function 

MyNamespace\AbstractFoo::foo() should not be abstract" at 

/home/cmanley/0/Abstract.php line 4.



You should see this.

Actual result:
--------------
Error handler caught E_STRICT with message "Static function 

MyNamespace\AbstractFoo::foo() should not be abstract" at 

/home/cmanley/0/Abstract.php line 4.



PHP Fatal error:  Call to undefined function bla() in
/home/cmanley/0/Abstract.php 

on line 4


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53086&edit=1

Reply via email to