> -----Original Message-----
> From: Robert Stoll [mailto:rst...@tutteli.ch]
> Sent: Sunday, September 08, 2013 12:36 AM
> To: 'Adam Harvey'; 'Dan Ackroyd'
> Cc: 'Nikita Popov'; 'PHP internals'
> Subject: RE: [PHP-DEV] [RFC] Named parameters
> 
> > -----Original Message-----
> > From: a...@adamharvey.name [mailto:a...@adamharvey.name] On
> Behalf Of
> > Adam Harvey
> > Sent: Friday, September 06, 2013 10:11 PM
> > To: Dan Ackroyd
> > Cc: Nikita Popov; PHP internals
> > Subject: Re: [PHP-DEV] [RFC] Named parameters
> >
> > On 6 September 2013 13:01, Dan Ackroyd <dan...@basereality.com>
> wrote:
> > >> I'd say the odds are that those sorts of users are going to be
> > >> writing
> > >
> > >> code that is required to be notice/strict clean anyway — that's
> > >> certainly been true everywhere I've worked that's had a "modern"
> > >> codebase.
> > >
> > > Yes, so say you have a team that:
> > >
> > > * currently has a code base that is notice/strict clean
> > > * wants to move to PHP 5.x which has named parameters
> > > * have code which changes the param name in extends/implements
> > >
> > > Unless they rewrite their code, they wouldn't be able to upgrade
> > > next version of PHP without losing their strict/notice cleaness. So
> > > how would you suggest they upgrade to the version of PHP with named
> > parameters?
> >
> > At the risk of being glib, by cleaning up their parameter names. A
> > team that's testing a PHP upgrade is likely capable of that, and the
> > strict notices would give them the needed feedback in the early stages
> > of testing. That's hardly a rewrite.
> >
> > > Also I'm not sure that having which error level is used actually
> > > changes the behaviour of the language in a meaningful way. It only
> > > suppresses a particular warning message, which can be suppressed
> > > anyway with error_reporting(0).
> >
> > I don't really care which level actually gets used (it could be
> > anywhere from E_STRICT to E_WARNING from where I sit), but I don't
> > think the error reporting for a particular feature should ever be
> > controllable separately from PHP's global error reporting. These sorts
> > of warnings are there to promote better practice.
> >
> > Adam
> >
> 
> Heya,
> 
> I do not like the check at all and after writing a few lines for this email,
> deleting, writing again etc. I have to conclude, named parameters do not
> really suit to PHP if such a check is really implemented. -1 in this case
> 
> I understand that you have to make this check with your current solution. I
> did not have a look at the implementation though, but I guess this
> consistency of parameter names is needed since you do not know what type
> a variable has. This check of the whole class hierarchy certainly slows down
> also use cases where named parameters aren't used at all. But that's not
> even my biggest concern.
> 
> Following an example to outline why I do not like the check:
> 
> interface IExecutor{
>     function execute(callable $command); }
> 
> class SaveExecutor implements IExecutor{
>     public function execute(callable $saveCommand){} }
> 
> function foo(IExecutor $bar){
>     $bar->execute(command=>function(){});
> }
> 
> In the function foo I use IExecutor as contract, I do not really care what the
> implementation is and thus I use command as named parameter. IMO that
> should be enough and I as a developer of the class SaveExecutor can choose
> whatever I like as parameter name to improve the readability.
> Sure, you could say the renaming above isn't really necessary and I could
> have used just $command instead of $saveCommand, but what if you use a
> third library and they named their parameters in the following way:
> 
> interface ICustomer{
>     function createRelation($custId, $adrId, $main=false); }
> 
> Maybe you are able to guess that they expect an customer id, an address id
> and $main stands for whether this address is the main address of the
> customer or not.
> Right now I am not really too bothered about this bad naming of the
> parameters since I can use different ones in my implementation.
> Another use case could be, that one has to comply with some code
> guidelines which might claim, one needs to write a prefix before the
> parameter name if it is a scalar type. Something like $intCustId (puke)
> 
> Without the check I can save the hassle to write a wrapper around the library
> to improve readability or to comply with some code guidelines (there are
> further use cases I suppose).
> 
> I agree that if we introduce named parameters the parameter name has to
> be part of the contract, but as I said, I do not like the constraint and 
> overkill it
> would add up. Personally I use named parameters very seldom and at the
> moment I would prefer the skipping parameters RFC. I see more drawbacks
> than benefits of named parameters in a type-unsafe language such as PHP.
> 
> Cheers,
> Robert

I have a further reason why this check shouldn't be done and the implementation 
need to be changed:

namespace some\library {
    interface ILogger {
        function log($message);
    }
}

namespace another\library{
    interface ILogger{
            function log($msg);
    }
}

namespace {
    class Logger implements some\library\ILogger, another\library\ILogger{
            function log($message){}
    }
}

Valid code today, the check would be another BC break.





--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to