davidc Sat Jan 19 19:27:22 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/standard/tests/strings lcfirst.phpt
Modified files: /php-src/ext/standard basic_functions.c php_string.h string.c Log: - MFH (lcfirst()) - Initial test for lcfirst
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.725.2.31.2.64.2.15&r2=1.725.2.31.2.64.2.16&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.15 php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.16 --- php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.15 Mon Dec 31 07:17:14 2007 +++ php-src/ext/standard/basic_functions.c Sat Jan 19 19:27:21 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.725.2.31.2.64.2.15 2007/12/31 07:17:14 sebastian Exp $ */ +/* $Id: basic_functions.c,v 1.725.2.31.2.64.2.16 2008/01/19 19:27:21 davidc Exp $ */ #include "php.h" #include "php_streams.h" @@ -2624,6 +2624,11 @@ ZEND_END_ARG_INFO() static +ZEND_BEGIN_ARG_INFO(arginfo_lcfirst, 0) + ZEND_ARG_INFO(0, str) +ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO(arginfo_ucwords, 0) ZEND_ARG_INFO(0, str) ZEND_END_ARG_INFO() @@ -3148,6 +3153,7 @@ PHP_FE(substr_replace, arginfo_substr_replace) PHP_FE(quotemeta, arginfo_quotemeta) PHP_FE(ucfirst, arginfo_ucfirst) + PHP_FE(lcfirst, arginfo_lcfirst) PHP_FE(ucwords, arginfo_ucwords) PHP_FE(strtr, arginfo_strtr) PHP_FE(addslashes, arginfo_addslashes) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/php_string.h?r1=1.87.2.2.2.3.2.1&r2=1.87.2.2.2.3.2.2&diff_format=u Index: php-src/ext/standard/php_string.h diff -u php-src/ext/standard/php_string.h:1.87.2.2.2.3.2.1 php-src/ext/standard/php_string.h:1.87.2.2.2.3.2.2 --- php-src/ext/standard/php_string.h:1.87.2.2.2.3.2.1 Mon Dec 31 07:17:15 2007 +++ php-src/ext/standard/php_string.h Sat Jan 19 19:27:21 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_string.h,v 1.87.2.2.2.3.2.1 2007/12/31 07:17:15 sebastian Exp $ */ +/* $Id: php_string.h,v 1.87.2.2.2.3.2.2 2008/01/19 19:27:21 davidc Exp $ */ /* Synced with php 3.0 revision 1.43 1999-06-16 [ssb] */ @@ -53,6 +53,7 @@ PHP_FUNCTION(substr); PHP_FUNCTION(quotemeta); PHP_FUNCTION(ucfirst); +PHP_FUNCTION(lcfirst); PHP_FUNCTION(ucwords); PHP_FUNCTION(strtr); PHP_FUNCTION(strrev); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.445.2.14.2.69.2.10&r2=1.445.2.14.2.69.2.11&diff_format=u Index: php-src/ext/standard/string.c diff -u php-src/ext/standard/string.c:1.445.2.14.2.69.2.10 php-src/ext/standard/string.c:1.445.2.14.2.69.2.11 --- php-src/ext/standard/string.c:1.445.2.14.2.69.2.10 Wed Jan 16 08:34:33 2008 +++ php-src/ext/standard/string.c Sat Jan 19 19:27:21 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: string.c,v 1.445.2.14.2.69.2.10 2008/01/16 08:34:33 tony2001 Exp $ */ +/* $Id: string.c,v 1.445.2.14.2.69.2.11 2008/01/19 19:27:21 davidc Exp $ */ /* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */ @@ -2646,6 +2646,36 @@ } /* }}} */ +/* {{{ + Lowercase the first character of the word in a native string */ +static void php_lcfirst(char *str) +{ + register char *r; + r = str; + *r = tolower((unsigned char) *r); +} +/* }}} */ + +/* {{{ proto string ucfirst(string str) + Make a string's first character lowercase */ +PHP_FUNCTION(lcfirst) +{ + char *str; + int str_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + return; + } + + if (!str_len) { + RETURN_EMPTY_STRING(); + } + + ZVAL_STRINGL(return_value, str, str_len, 1); + php_lcfirst(Z_STRVAL_P(return_value)); +} +/* }}} */ + /* {{{ proto string ucwords(string str) Uppercase the first character of every word in a string */ PHP_FUNCTION(ucwords) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/strings/lcfirst.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/strings/lcfirst.phpt +++ php-src/ext/standard/tests/strings/lcfirst.phpt --TEST-- "lcfirst()" function --INI-- precision=14 --FILE-- <?php /* Make a string's first character uppercase */ echo "#### Basic and Various operations ####\n"; $str_array = array( "TesTing lcfirst.", "1.testing lcfirst", "HELLO wORLD", 'HELLO wORLD', "\0", // Null "\x00", // Hex Null "\x000", "abcd", // double quoted string 'xyz', // single quoted string string, // without quotes "-3", -3, '-3.344', -3.344, NULL, "NULL", "0", 0, TRUE, // bool type "TRUE", "1", 1, 1.234444, FALSE, "FALSE", " ", " ", 'b', // single char '\t', // escape sequences "\t", "12", "12twelve", // int + string ); /* loop to test working of lcfirst with different values */ foreach ($str_array as $string) { var_dump( lcfirst($string) ); } echo "\n#### Testing Miscelleneous inputs ####\n"; echo "--- Testing arrays ---"; $str_arr = array("Hello", "?world", "!$%**()%**[][[[&@#~!", array()); var_dump( lcfirst($str_arr) ); echo "\n--- Testing lowercamelcase action call example ---\n"; class Setter { protected $vars = array('partnerName' => false); public function __call($m, $v) { if (stristr($m, 'set')) { $action = lcfirst(substr($m, 3)); $this->$action = $v[0]; } } public function __set($key, $value) { if (array_key_exists($key, $this->vars)) { $this->vars[$key] = $value; } } public function __get($key) { if (array_key_exists($key, $this->vars)) { return $this->vars[$key]; } } } $class = new Setter(); $class->setPartnerName('partnerName'); var_dump($class->partnerName); echo "\n--- Testing objects ---\n"; /* we get "Catchable fatal error: saying Object of class could not be converted to string" by default when an object is passed instead of string: The error can be avoided by chosing the __toString magix method as follows: */ class string { function __toString() { return "Hello world"; } } $obj_string = new string; var_dump(lcfirst("$obj_string")); echo "\n--- Testing Resources ---\n"; $filename1 = "dummy.txt"; $file1 = fopen($filename1, "w"); // creating new file /* getting resource type for file handle */ $string1 = get_resource_type($file1); $string2 = (int)get_resource_type($file1); // converting stream type to int /* $string1 is of "stream" type */ var_dump(lcfirst($string1)); /* $string2 holds a value of "int(0)" */ var_dump(lcfirst($string2)); fclose($file1); // closing the file "dummy.txt" unlink("$filename1"); // deletes "dummy.txt" echo "\n--- Testing a longer and heredoc string ---\n"; $string = <<<EOD Abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 @#$%^&**&[EMAIL PROTECTED]:())))((((&&&**%$###@@@[EMAIL PROTECTED]&* abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 EOD; var_dump(lcfirst($string)); echo "\n--- Testing a heredoc null string ---\n"; $str = <<<EOD EOD; var_dump(lcfirst($str)); echo "\n--- Testing simple and complex syntax strings ---\n"; $str = 'world'; /* Simple syntax */ var_dump(lcfirst("$str")); var_dump(lcfirst("$str'S")); var_dump(lcfirst("$strS")); /* String with curly braces, complex syntax */ var_dump(lcfirst("${str}S")); var_dump(lcfirst("{$str}S")); echo "\n--- Nested lcfirst() ---\n"; var_dump(lcfirst(lcfirst("hello"))); echo "\n#### error conditions ####"; /* Zero arguments */ lcfirst(); /* More than expected no. of args */ lcfirst($str_array[0], $str_array[1]); lcfirst((int)10, (int)20); echo "Done\n"; ?> --EXPECTF-- #### Basic and Various operations #### Notice: Use of undefined constant string - assumed 'string' in %s on line %d string(16) "tesTing lcfirst." string(17) "1.testing lcfirst" string(11) "hELLO wORLD" string(11) "hELLO wORLD" string(1) " string(1) " string(2) " string(4) "abcd" string(3) "xyz" string(6) "string" string(2) "-3" string(2) "-3" string(6) "-3.344" string(6) "-3.344" string(0) "" string(4) "nULL" string(1) "0" string(1) "0" string(1) "1" string(4) "tRUE" string(1) "1" string(1) "1" string(8) "1.234444" string(0) "" string(5) "fALSE" string(1) " " string(5) " " string(1) "b" string(2) "\t" string(1) " " string(2) "12" string(8) "12twelve" #### Testing Miscelleneous inputs #### --- Testing arrays --- Warning: lcfirst() expects parameter 1 to be string (Unicode or binary), array given in %s on line %d NULL --- Testing lowercamelcase action call example --- string(%d) "partnerName" --- Testing objects --- string(11) "hello world" --- Testing Resources --- string(6) "stream" string(1) "0" --- Testing a longer and heredoc string --- string(639) "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789 @#$%^&**&[EMAIL PROTECTED]:())))((((&&&**%$###@@@[EMAIL PROTECTED]&* abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789" --- Testing a heredoc null string --- string(0) "" --- Testing simple and complex syntax strings --- string(5) "world" string(7) "world'S" Notice: Undefined variable: strS in %s on line %d string(0) "" string(6) "worldS" string(6) "worldS" --- Nested lcfirst() --- string(5) "hello" #### error conditions #### Warning: lcfirst() expects exactly 1 parameter, 0 given in %s on line %d Warning: lcfirst() expects exactly 1 parameter, 2 given in %s on line %d Warning: lcfirst() expects exactly 1 parameter, 2 given in %s on line %d Done
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php