Edit report at https://bugs.php.net/bug.php?id=61422&edit=1
ID: 61422 User updated by: danko at very dot lv Reported by: danko at very dot lv Summary: Lack of autoload on type hinting breaks class_alias Status: Open Type: Bug Package: SPL related Operating System: Linux PHP Version: 5.4.0 Block user comment: N Private report: N New Comment: Sorry, what I meant in the last example is // Create a Demo object using "Y", // and pass that to function expecting "X" Previous Comments: ------------------------------------------------------------------------ [2012-03-16 21:06:27] danko at very dot lv Description: ------------ I found #39003 which implies that autoload *was* called for type hinting previously and called for removal of this "unnecessary" feature. I beg to differ. Our framework depends on using class_alias to provide a dynamic modular structure, and one real class may have multiple aliases depending on situation, and these aliases are currently added when needed. Therefore, if an object is creating using alias X (or no alias at all) and is passed to a function expecting the same class under alias Y (and no object was created using that alias) a completely invalid fatal error is raised (see a simplified demo below). I would also like to point out, that if after calling autoload it turns out that it was not, in fact, an alias, the call will fatally fail anyway, so a really useless autoload will be only called once. I don't see any "resource consumption" problem here. Test script: --------------- <? class Demo { } // An "autoload" handler creating an alias for the same class spl_autoload_register(function ($class) { class_alias('Demo', $class); }); // Create a Demo object using "A" // and pass that to function expecting "A" function success(A $test) { echo "Success ".get_class($test)."\n"; } success(new A()); // Create a Demo object using "B", // then create another Demo object using "C" // and pass that to function expecting "B" function also(B $test) { echo "Success ".get_class($test)."\n"; } new B(); also(new C()); // Create a Demo object using "X", // and pass that to function expecting "B" function fail(X $test) { echo "Success ".get_class($test)."\n"; } fail(new Y()); // Note that all of these names refer to the same class, // and all objects are of the same class Expected result: ---------------- Success Demo Success Demo Success Demo Actual result: -------------- Success Demo Success Demo PHP Catchable fatal error: Argument 1 passed to fail() must be an instance of X, instance of Demo given ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=61422&edit=1