Doc #78218 [Nab]: function intercepts execution of code that is not executed
Edit report at https://bugs.php.net/bug.php?id=78218&edit=1
ID: 78218
User updated by: lozinskiy dot artem at gmail dot com
Reported by: lozinskiy dot artem at gmail dot com
Summary: function intercepts execution of code that is not
executed
Status: Not a bug
Type: Documentation Problem
Package: Unknown/Other Function
Operating System: Ubuntu 18.04 LTS
PHP Version: 7.1.30
Block user comment: N
Private report: N
New Comment:
>> Whatever the actual magical process is behind ticks, I don't think there's a bug
>> here.
Seriously, I made a convenient code analysis for myself using this function, but because of this
there is no bug, as you said, I cannot trust this analysis, for me this is a bug and a problem,
besides, only here is this behavior, and how can catch or identify this moment? How can I determine
that the function has been correctly reversed here and not here?
Previous Comments:
------------------------------------------------------------------------
[2019-06-26 14:48:49] requinix@php.net
Whatever the actual magical process is behind ticks, I don't think there's a bug here.
Look at https://3v4l.org/hneib/vld#output to see
exactly what PHP is doing with the code.
------------------------------------------------------------------------
[2019-06-26 14:30:39] lozinskiy dot artem at gmail dot com
But why on line 30 this function executed?
After all, up to 30 lines the cycle must be completed and the code will not be executed further.
------------------------------------------------------------------------
[2019-06-26 14:14:27] requinix@php.net
Because the very first thing that happens when execution enters the function is that execution
immediately leaves the function. And as documented, "not all statements are tickable".
------------------------------------------------------------------------
[2019-06-26 14:05:19] lozinskiy dot artem at gmail dot com
Description:
------------
---
From manual page: https://php.net/function.register-tick-function
---
PHP Version 7.1.30-1+ubuntu18.04.1+deb.sury.org+
Linux ubuntu 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64
---
function intercepts execution of code that is not executed
Test script:
---------------
<?php
declare(ticks=1);
function my_function() {
echo print_r(debug_backtrace(), 1) . '<br/>';
}
register_tick_function('my_function', true);
$t = false;
$ar = ['test1' => '111'];
var_dump('->' . __METHOD__ . ' on ' . __FILE__ . ':' . __LINE__);
foreach ($ar as $k => $e) {
$t = ($k === 'test2');
var_dump('$t==='. var_export($t, 1));
if ($t===false) {
continue;
}
var_dump('this line code is not executed (execute "continue")');
test2();
test3(); // this will handled or ..
// test4(); // uncomment this and this will handled (but function not exist)
}
var_dump('->' . __METHOD__ . ' on ' . __FILE__ . ':' . __LINE__);
function test2() {
// this never handled (why? =))
return 1;
}
function test3() {
var_dump('->' . __METHOD__ . ' on ' . __FILE__ . ':' .
__LINE__);
}
Expected result:
----------------
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 10
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 12
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 13
[function] => my_function [args] => Array ( [0] => 1 ) ) )
/var/www/test.local/public/test/tick.php:15:string '-> on
/var/www/test.local/public/test/tick.php:15' (length=49)
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 15
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 19
[function] => my_function [args] => Array ( [0] => 1 ) ) )
/var/www/test.local/public/test/tick.php:21:string '$t===false' (length=10)
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 21
[function] => my_function [args] => Array ( [0] => 1 ) ) )
/var/www/test.local/public/test/tick.php:34:string '-> on
/var/www/test.local/public/test/tick.php:34' (length=49)
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 34
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 39
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 43
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Actual result:
--------------
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 10
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 12
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 13
[function] => my_function [args] => Array ( [0] => 1 ) ) )
/var/www/test.local/public/test/tick.php:15:string '-> on
/var/www/test.local/public/test/tick.php:15' (length=49)
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 15
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 19
[function] => my_function [args] => Array ( [0] => 1 ) ) )
/var/www/test.local/public/test/tick.php:21:string '$t===false' (length=10)
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 21
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 30
[function] => my_function [args] => Array ( [0] => 1 ) ) )
/var/www/test.local/public/test/tick.php:34:string '-> on
/var/www/test.local/public/test/tick.php:34' (length=49)
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 34
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 39
[function] => my_function [args] => Array ( [0] => 1 ) ) )
Array ( [0] => Array ( [file] => /var/www/test.local/public/test/tick.php [line] => 43
[function] => my_function [args] => Array ( [0] => 1 ) ) )
---
that wrong...
---
on line 30 function intercepted execution on this line
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78218&edit=1
Thread (17 messages)
- lozinskiy dot artem at gmail dot com
- requinix@php.netDoc #78218 [Opn->Nab]: function intercepts execution of code that is not executed
- lozinskiy dot artem at gmail dot comDoc #78218 [Nab]: function intercepts execution of code that is not executed
- requinix@php.netDoc #78218 [Nab]: function intercepts execution of code that is not executed
- lozinskiy dot artem at gmail dot comDoc #78218 [Nab]: function intercepts execution of code that is not executed
- requinix@php.netDoc #78218 [Nab->ReO]: function intercepts execution of code that is not executed
- lozinskiy dot artem at gmail dot comDoc #78218 [ReO]: function intercepts execution of code that is not executed
- cmb@php.netDoc #78218 [ReO->Fbk]: function intercepts execution of code that is not executed
- lozinskiy dot artem at gmail dot comDoc #78218 [Fbk->Asn]: function intercepts execution of code that is not executed
- cmb@php.netDoc #78218 [Asn->Opn]: function intercepts execution of code that is not executed
- mkmknb743 at protonmail dot comDoc #78218 [Com]: function intercepts execution of code that is not executed
- hsdfg56gh32 at protonmail dot comDoc #78218 [Com]: function intercepts execution of code that is not executed
- bczx64sgh3 at protonmail dot comDoc #78218 [Com]: function intercepts execution of code that is not executed
- zxvtghs4566s at protonmail dot comDoc #78218 [Com]: function intercepts execution of code that is not executed
- jhsf78hjhd at protonmail dot comDoc #78218 [Com]: function intercepts execution of code that is not executed
- jdg56er at protonmail dot comDoc #78218 [Com]: function intercepts execution of code that is not executed
- brandon698sherrick at outlook dot comDoc #78218 [Com]: function intercepts execution of code that is not executed