PHP 5.6 introduced the splat operator, which unpacks arrays or objects implementing Traversable interfaces into argument lists. Its most evident application is to call functions without having to resort to call_user_func_array(). So, which method is faster?
I was looking how to improve performance of Slim’s Http\Cookies::parseHeader() function: as a C developer I find it rather non-optimal because it uses regular expressions and excessive memory allocations. I wondered it it is possible to use the same optimizations that I would use in C and if it gives any benefit.
I have spent an hour today debugging a weird issue: PHPUnit complained that it tried to call an undefined function PHPUnit\Framework\Assert\assertEquals(). Because right now I am working with custom PHP extensions, I suspected that my code somehow corrupted PHP’s internal data structures. But reality prepared me a surprise.
For the second time in a row, I find a bug in PHP. This time PHP segfaults due to memory corruption during the request shutdown phase.
When testing your own PHP extensions, it is very important not to miss any memory leaks. Wherever Valgrind shows a memory leak, you need to check your code for bugs. However, sometimes you can find a memory leak in the PHP Core.
When `valgrind php` shows lots of errors like “Conditional jump or move depends on uninitialised value(s)”, chances are that the PHP and PCRE extension were built without Valgrind support.
When writing or debugging PHP extensions, it is very useful to have test coverage. It is also very interesting to know what test covers which files, similar to what PHPUnit generates for PHP.
From time to time you have to deal with someone else’s code. And the code you have to deal with sometimes surprises you. For example, Pimple, a small Dependency Injection Container for PHP; recent versions of which, according to README,
are more focused on performance. Learning something new is always interesting and sometimes funny, and therefore I started to read the code.