2011/6/8 Johannes Schlüter <johan...@schlueters.de>: > On Wed, 2011-06-08 at 10:38 +0200, Hannes Magnusson wrote: >> 2011/6/8 Johannes Schlüter <johan...@schlueters.de>: >> > On Tue, 2011-06-07 at 12:12 -0700, Stas Malyshev wrote: >> >> Hi! >> >> >> >> > https://wiki.php.net/rfc/callable >> >> >> >> It is good there's an RFC. However it seems to lack code examples. I >> >> understand it may be obvious to the proposers how it looks like, but >> >> it'd be nice to have the actual example there as it is done nearly >> >> everywhere else. >> > >> > The RFC is missing information about what happens in codebases which >> > already have a "callable" type declared. Will that be prevented or will >> > they hit a runtime error? ("callable expected, callable type found") >> >> You mean an interface/class with that name? >> The error would be 'expected instanceof callable, string/array/closure >> recieved. >> >> gettype("strpos") will still return a string, not callable. >> >> A callable wouldn't be fully featured type. > > Which means that > class callable { }
No. 'callable' is a parser token. >> > What about default values? Will >> > function foo(callback $cb = 'strpos') { } >> > be valid? >> >> No default values, other then NULL allowed. >> Otherwise we would need to support array("classname", "methodname") >> too, and then people would want default array values for array >> typehinting etc etc etc. > > Ok. I assume NULL as default value would be allowed, though. This would > be consistent for the language and allow such things: > > function foo(callback $cb = NULL) { > if (!$cb) { > $cb = function() { /* .. default implementation */ > } > .... > } Etienne pointed out that default values for arrays can actually contain values.. I actually had no idea. I suppose we then need to support default values for an array callable. But yes, a callable can have the default value of null, following the rules of class hinting. -Hannes -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php