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

 ID:                 54541
 User updated by:    gys0324 at yeah dot net
 Reported by:        gys0324 at yeah dot net
 Summary:            spl_autoload_register Loading order
 Status:             Open
 Type:               Bug
 Package:            SPL related
 Operating System:   Win
 PHP Version:        5.2.17
 Block user comment: N
 Private report:     N

 New Comment:

There is two classes extend BClass,

so the error has been happened.

But if just one class which is A0 or A1 extends BClass,

the expected result will be displayed.


Previous Comments:
------------------------------------------------------------------------
[2011-04-15 15:03:02] gys0324 at yeah dot net

Description:
------------
spl_autoload_register



Loading order 

Test script:
---------------
A0Class.php

<?

namespace TESTING;



use TESTING\BClass;

class A0Class extend BClass{



}



A1Class.php

<?

namespace TESTING;



use TESTING\BClass;

class A1Class extend BClass{

}



BClass.php

<?

namespace TESTING;



use TESTING\BClass;

class BClass{



     public function __construct(){

         echo "Child Start";

     }

}



Bootstrap.php

<?php

namespace TESTING;



class Bootstrap {

        

        private static $classes = array ();

        

        public static function init() {

                

                Bootstrap::requireOnce ( __DIR__ );

                

                Bootstrap::loadClass ();

        }

        

        public static function getClasses() {

                

                return Bootstrap::$classes;

        }

        

        private static function requireOnce($path) {

                

                foreach ( scandir ( $path ) as $object ) {

                        

                        if ($object != '.' && $object != '..') {

                                

                                $object = $path . DIRECTORY_SEPARATOR . $object;

                                

                                if (is_file ( $object ) && file_exists ( 
$object )) {

                                        if (preg_match ( '/\.php$/', $object ) 
&& ! preg_match (
'/Bootstrap\.php$/', $object ) && 

! preg_match ( '/testFile\.php$/', $object )

&& !in_array()) {

                                                Bootstrap::$classes [] = 
$object;

                                        }

                                

                                } else if (is_dir ( $object )) {

                                        

                                        Bootstrap::requireOnce ( $object );

                                

                                }

                        }

                }

        }

        

        private static function loadClass() {

                

                for($i = 0; $i < count ( Bootstrap::$classes ); $i ++) {

                        

                        require_once Bootstrap::$classes [$i];

                }

        }

}



spl_autoload_register ( array ('TESTING\Bootstrap', 'init' ) );



testFile.php

<?php



require_once 'lib/Bootstrap.php';



use TESTING\A0Class;



$a0 = new A0Class();





Expected result:
----------------
Child Start

Actual result:
--------------
Fatal error: Class 'TESTING\BClass' not found 


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



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

Reply via email to