| 
        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: Tue Nov 04 07: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