Re: __invoke concerns

From: Date: Mon, 04 Aug 2008 10:51:50 +0000
Subject: Re: __invoke concerns
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-39621@lists.php.net to get a copy of this message
Hello, Hello, On Mon, Aug 4, 2008 at 6:57 AM, Stanislav Malyshev <stas@zend.com> wrote: > Hi! > >> 1) I don't believe that having it thrown as another of those magic >> method is a good idea. Rather, I'd like to have it represented by an >> interface: Invokable. That way, type hints/checks can be done in user >> land in a sane matter: > > We can have Invokable and even have Closure implement it, if there's need, I > see no problem with it. > However, I'm not sure we should *require* interface membership for __invoke > to work - I do not see any added value in this. I'm not sure I understand what you mean? Either the interface covers __invoke and "$obj instanceof Invokable" is a safe check to know if we can $obj();, or it doesn't and we know nothing. > >> 2) Do we really want __invoke's argument to be mapped to caller >> arguments. Providing an array of arguments, ala __call(Static) sounds >> more consistent. > > More "consistent" with what? __call is different from __invoke - __call is > global interceptor (takes any function), __invoke is not. And you can easily > convert it to array with function_get_args(). I agree, it's a feature that works "similarly" as __construct, and we don't have __construct($args); Additionally, it would require more work to distinguish: $a = function($b,$c) { ... }; $a(1,2); from class A { public function __invoke($args) { } } $a = new A; $a(1,2); as we certainly don't want function($args){}. In overall, there is no need to discuss that Interface much, as it causes more problems than it solves. But please check out the get_closure handler. > >> 3) Do we really want to allow both static and non-static versions of >> __invoke ? >> class A { public static function __invoke($args) { .. }} $a = new A; >> $a(); being a static call to __invoke doesn't make much sense to me. > > I don't see how static __invoke may be useful. Anyone has a use case? > -- > Stanislav Malyshev, Zend Software Architect > stas@zend.com http://www.zend.com/ > (408)253-8829 MSN: stas@zend.com > > -- Etienne Kneuss http://www.colder.ch Men never do evil so completely and cheerfully as when they do it from a religious conviction. -- Pascal

« previous php.internals (#39621) next »