On Jul 23, 2006, at 5:38 AM, Matt W wrote:
While we're on the subject, one of my favorite personal patches to
PHP is one that adds the %n specifier. The parameter to %n is a
reference which recieves the total length of the string with all
replacements so far. %n itself is replaced by nothing at all. You
could do this with $n = strlen( $s = sprintf( blah blah blah ) ) +
strlen( $s .= sprintf( the rest of the blah ) );, but it's a very
nice shortcut if you need the replaced length in the middle of the
conversion or for a situation like this (and the above doesn't work
too well if you have positional params!):
printf( "Some processing message with %s replacements...%n",
'some', &
$n );
// do some stuff here
print str_repeat( ' ', $n ) . "\rSome status text here that doesn't
worry about whether the replaced text was longer.";
Here's the printf(3) manpage description for %n (MacOS X system, BSD
manpage):
n The number of characters written so far is stored into
the inte-
ger indicated by the int * (or variant) pointer
argument. No
argument is converted.
Any chance of getting this into PHP? I can provide a patch.
I had thought about adding %n too, but didn't know what the
reaction would
be or if it'd be used. (And the length thing would have to be changed
[later] for Unicode length or such, I assume?) Also, wasn't sure
about the
internals code for the reference and writing to it, etc. :-)
I'm completely unversed in the current Unicode stuff; I can only
provide a patch against 5.2. Someone who knows the Unicode crud would
have to update it for HEAD, and given the recent loud argument about
HEAD vs branch commits, I don't know how well a 5.2-only patch would
go over. Any advice on that point?
-- Gwynne, Daughter of the Code
"This whole world is an asylum for the incurable."
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php