Edit report at https://bugs.php.net/bug.php?id=61265&edit=1
ID: 61265 Comment by: phpmpan at mpan dot pl Reported by: manchokapitancho at gmail dot com Summary: __autoload should know about traits Status: Open Type: Feature/Change Request Package: Class/Object related PHP Version: 5.4.0 Block user comment: N Private report: N New Comment: `instanceof` operator does not trigget class loading: ----------------------------------------- class X {} function __autoload($name) { echo "Loading $name...\n"; } $x = new X(); if ($x instanceof X) { echo 'x is X'; } if ($x instanceof NonExistingClass) { echo 'blarg'; } ----------------------------------------- The same applies to argument types. Previous Comments: ------------------------------------------------------------------------ [2012-03-25 17:10:13] phristen at yahoo dot com This would certainly be a nice feature. However, keep in mind that it is not always possible to tell whether something is a class or an interface. For example, when doing something like this, we can't tell whether 'A' is an interface or a class: if ($a instanceof A) { } ------------------------------------------------------------------------ [2012-03-08 14:39:39] manchokapitancho at gmail dot com Yes, there is a use case. Currently, I use a workaround but in general, the idea behind is that after I locate the file, corresponding to the class name being autoloaded, I require_once the file and then check if the class is really inside (class_exists). As of 5.4, class_exists returns false for traits and I have to use class_exists || trait_exists. Not a big deal, really, but it is still possible to have different paths for classes (ex. /classes) and different one for traits (/traits). ------------------------------------------------------------------------ [2012-03-08 13:26:06] shiranai7 at hotmail dot com Sorry.. it should say "It is NOT a critical feature" instead of "NOW". ------------------------------------------------------------------------ [2012-03-08 13:25:04] shiranai7 at hotmail dot com It is now a critical feature but it would be nice. For example - if I decided to format the filenames depending on what is being autoloaded (class/interface/trait) I could not easily do it. Adding a second argument to the autoload callback would make this possible and should not break anything. ------------------------------------------------------------------------ [2012-03-04 17:11:11] g...@php.net Could you elaborate a bit on the usecase? Until now, there didn't seem to be the need to handle interfaces differently in an autoloader. Why would you treat traits differently from classes and interfaces? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=61265 -- Edit this bug report at https://bugs.php.net/bug.php?id=61265&edit=1