Re: About assert()
| From: | Michael Morris | Date: | Wed, 14 Feb 2018 15:40:09 +0000 |
| Subject: | Re: About assert() | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-101870@lists.php.net to get a copy of this message | ||
My earlier reply was through my phone. I've since read the bug report and
saw your note where you couldn't reproduce it.
Assert is a statement in PHP 7. Try this code
function foo() {
debug_print_backtrace();
return true;
}
assert(foo());
In PHP 7 only foo() will be in the backtrace. In PHP 5 assert will be
listed as well.
What you are proposing has already been done. It's also why
zend.assertions has three settings: 1: on, -1: off, 0: emulate PHP 5.
Unless you have code on your hands that is breaking when the -1 setting is
used, the 0 setting should never be used.
On Wed, Feb 14, 2018 at 7:43 AM, Pedro Lacerda <pslacerda@gmail.com> wrote:
> The same beharviour, but
assert as statement also uses 1
> character less..
>
>
> Em 14 de fev de 2018 10:13 AM, "Michael Morris" <tendoaki@gmail.com>
> escreveu:
>
>
> On Wed, Feb 14, 2018 at 1:16 AM Pedro Lacerda <pslacerda@gmail.com> wrote:
>
> > Hi developers,
> >
> > Trying to resolve the bug #75950 (that after long hours I found that I
> > couldn't reproduce), I observed that if zend.assertions >=
> > 0 the
> > generated code inside assert() was indeed executed even if
> `assert.active
> > = off`. Naturally the function arguments were evaluated before entering
> > into the assert() function.
> >
> > https://bugs.php.net/bug.php?id=75950
> >
> > The point is that will be possible to fully disable assertions setting
> > assert.active = false after initialization if we turn
> > assert into a
> > statement. This can mantain fully backward compatibility. Calling
> > assert_options(ASSERT_ACTIVE, true) or
> > false after initialization
> would
> > fully enable or disable the functionality. It seems the most sensible
> thing
> > to do.
> >
> > By the way assert in Java and Python is an statement, and
> > in C it
> isn't a
> > function.
> >
> > So my question is what is the purpose of mantaining
> > assert() a
> function,
> > there are any drawbacks of fully disabling it when `zend.assertions >=
> 0`?
> >
> >
> > PS: Strange that nobody cared in recent emails about the proposal to a
> > small increase of the testing coverage by doubling the testing time
> > duration, was somewhat interesting.
> >
>
>
> Assert.active is the legacy PHP 5 control. Don’t use it.
>
> zend.assertions -1 has the behavior you want. 0 emulates PHP 5 and
> earlier’s broken implementation of assert. If you don’t have legacy
> software to babysit, don’t use it.
>
> >
> >
>