Sara Golemon wrote:
I say this with no degree of sarcasm or ill-will: Create a formal proposal.

Well, you asked for it ;).

Goals:
- remove confusion when a user thinks about a function's name
- develop consistency throughout the language
- be backwards compatible as much as possible

The basic idea began as "rename confusing functions but keep their old names as aliases to the 'preferred' version with a view to eventually removing the old ones". Well, let's take a look at a few things. Using a little bit of counting code and get_defined_functions(), it appears that there are 510 internal functions containing underscores and 304 which don't (PHP 5.0.4). The obvious solution appears to be to change all functions to use underscores.

I went through the function list in an attempt to do just that. Many functions convert reasonably well - chop() remains chop(), escapeshellarg() becomes escape_shell_arg(). A fair number, however, were not quite so friendly. Should fclose() and feof() remain as such or should they become f_eof() and f_close()? fileatime() to file_atime() or file_a_time()? Is basename one word or two? There are also a fair number of functions like nl2br() - nl_2_br() would be silly.

It seems to me, therefore, that we should get rid of the underscores. Yes, this means changing a lot more functions around, but adding underscores will just make function names MORE confusing where there's ambiguity - and that's what we want to remove. It's one of the big complains about PHP, that ambiguity. Furthermore, we don't want to make substantial changes to function names - doing things like nl2br() -> nl_to_br() will confuse more people than necessary and may conflict with existing user-defined function names.

So, let's list functions and replace out all the underscores.  We get:
http://mjec.net/php/functions.html

Well, that's not actually consistent with PHP overall. cal_to_jd() becomes caltojd() - that should really be cal2jd() to stay consistent. So lets do that. And at this stage I also added some checking to make sure there were no functions being duplicated. Well, there was one - diskfreespace() is an alias of disk_free_space(). That is, however, the only internal conflict I could find. That listing is at:
http://mjec.net/php/betterfunctions.html

There are a few functions I think need actual renaming, for consistency:
bindec() -> bin2dec()
decbin() -> dec2bin()
octdec() -> oct2dec()
decoct() -> dec2oct()
hexdec() -> hex2dec()
dechex() -> dec2hex()
Those are the only ones I can think of at the moment. If you can think of any more, please tell me.

So, let's look at where we are now. We can rename all 510 underscore-containing functions to not using their underscores, a relatively easy transformation. Similarly, changing '_to_' to '2' before killing underscores is trivial. Those bindec() -> bin2dec() etc have to be done manually. Then alias the old versions to the new function names.

So, if a user knows a function's name they don't have to worry about underscores any more. The language is consistent with respect to underscores - there aren't any. But you can still use all the old function names, so we retain BC. I believe the suggestion was to remove this by PHP 8, which sounds reasonable.

What's wrong with this proposal? Well, a few things. Firstly, it doesn't make all function names intuitive - there's still the word order problem. Secondly, it's a hell of a lot of work to change 510 function names and then alias them.

Well, the first one just needs someone to go through all 813 distinct functions (not 814 because diskfreespace() is in there twice) and note which order they're in, then reorder them. I'll do this when I've got a bit more time on my hands - probably early next week.

The second bit is fair enough, yes. It might be automatable? I'm not sure and will look into this once I get a proper internet connection back.

The One Big Argument against the more wide-spread use of PHP is that it doesn't have consistent function names. If this can be fixed, well, you bewdy, as we say in .au. All I have to remember is haystack, needle except in_array() and array_search().

And those are my two cents.

-mjec
--
http://mine.mjec.net/

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to