Even PDO doesn't support passing an array as a parameter for, say, the right side of SQL operator IN. Sometimes it can be easier to make a loop that does $db->quote() and then always use that loop for IN than to generate a string of question marks of the appropriate length and ensure that the parameters before the list, the parameters in the list, and the parameters after the list are always bound in the same order.
Yeah, that is mildly annoying, but that's a pretty niche feature missing. I've wanted it maybe a half-dozen times in my career. (And I think it's a limitation of the underlying C APIs as well?)
Which doesn't help if you happen to have only one user, or a small number of users one at a time, doing relatively heavyweight queries. You might end up doing cURL on localhost to spawn a bunch of subprocesses.
If you *need* to spawn subprocesses, there is a module for it. It's not something 99% of users ever need to do, and is usually a sign that you're either using the wrong language entirely, or are architecting things completely ass-backwards.
Language design, as I said, is as much about choosing what features to leave out as it is what features to add. PHP has very, very limited multiprocessing support. But C has no eval() function, and anyone asking for it would rightly be asked what the hell they were thinking. Likewise, I think it's fair to say anyone looking for top-notch multiprocessing support in PHP is doing something at least a little fucky. I've done it myself, once or twice, but it was always something PHP was not meant to do.
A numeric string in PHP behaves like an int in some contexts but not in others. This inconsistency leads people like her* to prefer languages that use strong dynamic typing, such as Python.
Preference is fine, but she is declaring a language fundamentally flawed because it doesn't match her personal preference.
Now, it is a valid complaint that PHP will often make counterintuitive or even lossy conversions, with barely a notice logged. Were I to design a PHP replacement language, I would certainly make it so that only lossless conversions can happen implicitly (eg. string "0.0" can convert to float 0.0 but not int 0). But that is still a matter of preference, and PHP's "let's try to make it work" philosophy is at least consistent here.
As have I. But the messy part is that references to functions are stored as strings as opposed to being some other specialized type, as in C (function pointers), Python (callable objects), and C++ (both of the above). In addition, prior to PHP 7, it was impossible to catch a call to a missing function as an exception; programs had to use the look before you leap (LBYL) anti-pattern.
On the other hand, using it as a string allows some rather useful tricks. Like that pseudo-polymorphism thing I mentioned - I was writing a report generator, and needed three functions implemented for every report type. I *could* have just written one function, and made a giant switch statement for the two-dozen report types, or I could have shoehorned them into classes and objects... but instead I just set up a naming convention, and did some string concatenation to get the right function names.
* Eevee's name is Evelyn according to her Twitter account. I know her from a Discord server about Game Boy development.
Noted, thanks.