|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2017-01-05 18:31 UTC] vedad at kajtaz dot net
Description:
------------
Expressions in assert() are evaluated despite setting assert_options(ASSERT_ACTIVE, 0) at runtime.
I understand one should use zend.assertions in PHP 7+, yet IMHO this is either a documentation bug, or a misbehavior.
Test script:
---------------
echo 'PHP VERSION '.PHP_VERSION.' running `'.PHP_SAPI.'` sapi.'.PHP_EOL;
echo 'Initial settings:'.PHP_EOL;
echo 'zend.assertions: '.ini_get('zend.assertions').PHP_EOL;
echo 'assert.active: '.ini_get('assert.active').PHP_EOL;
assert_options(ASSERT_ACTIVE, 0);
echo 'After altering settings:'.PHP_EOL;
echo 'zend.assertions: '.ini_get('zend.assertions').PHP_EOL;
echo 'assert.active: '.ini_get('assert.active').PHP_EOL;
$assert = false;
assert($assert = true);
if($assert)
echo 'Code in assert() was evaluated'.PHP_EOL;
else
echo 'Code in assert() was NOT evaluated'.PHP_EOL;
Expected result:
----------------
PHP VERSION 7.0.14 running `cli` sapi.
Initial settings:
zend.assertions: 1
assert.active: 1
After altering settings:
zend.assertions: 1
assert.active: 0
Code in assert() was NOT evaluated
Actual result:
--------------
PHP VERSION 7.0.14 running `cli` sapi.
Initial settings:
zend.assertions: 1
assert.active: 1
After altering settings:
zend.assertions: 1
assert.active: 0
Code in assert() was evaluated
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 20:00:01 2025 UTC |
Actually, setting zend.assertions to 0 produces the same effect - expression in assert is still evaluated. echo 'PHP VERSION '.PHP_VERSION.' running `'.PHP_SAPI.'` sapi.'.PHP_EOL; echo 'Initial settings:'.PHP_EOL; echo 'zend.assertions: '.ini_get('zend.assertions').PHP_EOL; echo 'assert.active: '.ini_get('assert.active').PHP_EOL; ini_set('zend.assertions', '0'); assert_options(ASSERT_ACTIVE, 0); echo 'After altering settings:'.PHP_EOL; echo 'zend.assertions: '.ini_get('zend.assertions').PHP_EOL; echo 'assert.active: '.ini_get('assert.active').PHP_EOL; $assert = false; assert($assert = true); if($assert) echo 'Code in assert() was evaluated'.PHP_EOL; else echo 'Code in assert() was NOT evaluated'.PHP_EOL;> assert($assert = true); Shouldn't this line be > assert('$assert = true'); After changing it I get the expected result: PHP VERSION 7.0.13 running `cli` sapi. Initial settings: zend.assertions: 1 assert.active: 1 After altering settings: zend.assertions: 1 assert.active: 0 Code in assert() was NOT evaluated