Re: Bug/Req:#61422&#39003 enble Type Hint autoloading

From: Date: Tue, 01 May 2012 13:16:39 +0000
Subject: Re: Bug/Req:#61422&#39003 enble Type Hint autoloading
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-60388@lists.php.net to get a copy of this message
On Tue, May 1, 2012 at 9:07 PM, reeze <reeze.xia@gmail.com> wrote: > Hi, Laruence: > >    I mean pass a wrong class object to a function/method. if the type hinted > Class didn't loaded, we > could try to load it. (if it's the right class, nothing happened), eg. > >          function func(NotFoundClass $a) {} > > maybe we could pass another class instance. > $a = new DemoClass(); > func($a); > > It would be useful for class_alias like Bug#61422 requested. Hi: class_alias does well with type hint now, the following script : <?php function b (Foo_Bar $a) { echo 'okey'; } class Dummy { } class_alias('Dummy', 'Foo_Bar'); b(new Dummy); ?> works find now(5.3+), output : "okey" thanks > It's a little narrow feature usage scenario,but it gives a way to handle it. > so I think > It might be useful。 >  if failed to autoload it raise E_CATCHABLE_FATAL, loaded class will simple > released >  if user catch the E_CATABLE_FATAL, loaded class will be useful, since it > will be used later. >  if loaded success everyone is happy. > > > On 1 May 2012 20:25, Laruence <laruence@php.net> wrote: >> >> On Tue, May 1, 2012 at 8:03 PM, reeze <reeze.xia@gmail.com> wrote: >> > Hi internals: >> > danko reported this bug#61422: Lack of autoload on type hinting breaks >> > class_alias。 >> > now parmeter type hint DID NOT trying to autoload.  I think allow it >> > autoloading could be helpful. >> > >> > BUGS&Commit for quick refer: >> > - https://bugs.php.net/bug.php?id=61422 >> > - https://bugs.php.net/bug.php?id=39003 >> > >> > - http://svn.php.net/viewvc?view=revision&revision=220906 >> > >> > PROPOSAL(FR): >> > **I'm asking if we can enable type hint autoloading?** >> > >> > I did some homework: >> > - Before FIX for #39003, parameter type hint will try to autoload the >> > hint >> > class if not found. >> >           after this fix it will not. in bug#39003: the final result was >> > DOC >> > Problem, seems we all agreed >> >           that it SHOULD autoloading. >> > - But in >> > >> > revision: http://svn.php.net/viewvc?view=revision&revision=220906 It >> > was >> > **FIXED** >> >           I try to search RFC about typehint, I didn't find anything >> > about >> > it. It was commited really long time ago >> >           almost 6 years ago, it would be very nice if Antony >> > Dovgal still >> > remember it;) >> > >> > REASON: >> >     Here is my reason to ask whether we can enable it: >> > >> > 1. Autoload will only happened when function/method calling. so does any >> > other autoloading, >> >     I mean it wouldn't hurt performance. >> > 2. Class will be used for sure, so trying to autoload it is reasonable: >> >        - If we need check certain Class, then we have to use the class >> > in >> > function/method. >> >        - most of time it already loaded*, so autoloading happened >> > rarely. >> > 3. If pass the wrong type and the hinted class not found  this gives >> > autoloader a change to handle it >> >     like the #61422's test script did. we can do something if not found. >> > since we use the class in >> >     function/method, autoload the class is reasonable. most of the time >> > we >> > would not use the *FEATURE*, >> >     but it could make it more flexible. >> > >> > PATCH: >> > >> > 1. change zend_verify_arg_class_kind to autoload class >> > 2. if class can't load, zend_fetch_class silently return (No fatal here) >> > to >> > give zend_verify_arg_class_kind a chance >> >     to report previous catchable_fatal_error eg: >> > Catchable fatal error: Argument 1 passed to func() must be an instance >> > of >> > AX, integer given。 >> > >> > a simple patch attached request for comment. >> > >> > Finally, What do you guys think about it? >> Hi: >>    thanks for writing this,  but I was a little confused,  please >> correct me if I mis-understand you. >> >>    if you pass a right instance of class to a function , how can that >> class not be loaded already? >> >>    for example: >>    function foo(Foo_Bar $a) { >>    } >> >>    how can you pass a Foo_Bar instance to function foo without >> Foo_Bar class already defined? >> >> >> thanks >> >> >> > >> > Thanks. >> > Best, >> > -- >> > reeze | simpie.com >> >> >> >> -- >> Laruence  Xinchen Hui >> http://www.laruence.com/ > > > > > -- > http://reeze.cn -- Laruence  Xinchen Hui http://www.laruence.com/

« previous php.internals (#60388) next »