Hi Robert,

This is about "declarative" vs "imperative" programming.
Also constraints may be enabled for debugging and completely disabled for
production.
I'm not the inventor of this approach, I just started to think about it
myself :)

You opinion makes sense as well. PHP doesn't have to support all the
possible features.

Thanks. Dmitry.


On Thu, Feb 5, 2015 at 2:47 PM, Robert Stoll <p...@tutteli.ch> wrote:

> Hi Dimitry
>
> > -----Ursprüngliche Nachricht-----
> > Von: Dmitry Stogov [mailto:dmi...@zend.com]
> > Gesendet: Donnerstag, 5. Februar 2015 12:14
> > An: Yasuo Ohgaki; PHP Internals
> > Betreff: [PHP-DEV] Design by Contract
> >
> > Hi Yasuo,
> >
> > Following our conversation, I tried to imagine how DbC should look like
> in PHP from user perspective. Finally, I was
> > influenced by the semantic proposed in D, and syntax proposed for Java.
> So, these are my initial
> > thoughts:
> >
> > For php it may look like the following:
> >
> > function foo()
> >     requre(<input-assert-expression>)
> >     ensure(<output-assert-expression>)
> > {
> >   ...
> > }
> >
> > It would require only one new reserved word "ensure".
> >
> > The assert expressions may be checked or not depending on ini directive.
> > It should be also possible to prevent code generation for assertions
> (zero cost asserts). It was already implemented for
> > https://wiki.php.net/rfc/expectations
> >
> > For inherited methods, only the self <input-assert-expression> should be
> checked, and all parent <output-asser-
> > expression>. This is borrowed from D but not necessary to be repeated
> exactly.
> >
> > I think we shouldn't introduce "invariant" constraints for classes now.
> May be later.
> >
> > Implementation is going to generate code for input constraint after all
> RECV opcodes and before code for function body,
> > and code for output constraint before RETURN opcode (may be reusing
> implementation of "finally").
> >
> > See:
> > http://dlang.org/contracts.html
> > http://jan.newmarch.name/java/contracts/paper-long.html
> >
> > Thanks. Dmitry.
>
> I am not sure if this new syntactic sugar really improves readability.
> What is the difference between the above and having something like?
>
> function foo($x, $y){
>   if(validateFoo($x, $y)){}
>
>   //do something
>   $result = 'some value';
>
>   if(postValidateFoo($result){
>     return $ result;
>   }
> }
>
> Actually putting everything in one function seems even worse from a single
> responsibility point of view. But I suppose I am missing something
> essential here.
>
> Cheers,
> Robert
>
>
>

Reply via email to