| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             
             [2012-03-16 21:10 UTC] danko at very dot lv
  [2012-05-01 13:51 UTC] danko at very dot lv
 
-Type: Bug
+Type: Documentation Problem
  [2012-05-01 13:51 UTC] danko at very dot lv
  [2021-10-07 10:45 UTC] cmb@php.net
 
-Summary: Lack of autoload on type hinting breaks class_alias
+Summary: Clarify when autoloading is triggered
-Status:  Open
+Status:  Verified
-Package: SPL related
+Package: *General Issues
  [2021-10-07 10:45 UTC] cmb@php.net
  [2023-04-30 11:27 UTC] hotmonikamehra at gmail dot com
  | 
    |||||||||||||||||||||||||||||||||||||
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 12:00:01 2025 UTC | 
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