David Sklar wrote:
I was thinking about adding one or two regex-related features to the engine:

1. "preg_case": this would behave just like case but instead of doing an
equality comparison, would match against a regular expression, e.g.

switch($data) {
   preg_case '/^\d{5}(-\d{4})?$/':
       print "US Postal Code";
       break;
   preg_case '/^[a-z]\d[a-z] ?\d[a-z]\d$/i';
       print "Canadian Postal Code";
       break;
   default:
       print "something else!";
}


i've started to play with a more general way to handle this:


  switch(mixed data [, callback compare_function])
  {
     ...

"compare_function" would default to the functionality of the
"==" operator to show the current behavior

"compare_function" will be called with two parameters:
the switch expression and the case value and should
return true if both match, false otherwise

as a special case "compare_function" should also accept
"==="

this way we do not have to add new keywords and are not
limited to preg expresions here,
possible uses not possible now would include:

switch($foobar, "===") {
  case false: ...
  case 0: ...
  case '': ...

switch($foobar, "preg_match") {
  case '/^\d{5}$/':  ...
  case '/(foo)?bar/': ...

switch($foobar, "fnmatch") {
  case '*.gif': ...
  case '*.jpg': ...

switch($foober, "my_custom_function") {
 ...

switch($foobar, array($this, "compare_function") {
 ...




-- Hartmut Holzgraefe <[EMAIL PROTECTED]>

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



Reply via email to