Hi,

I like the idea. Maybe the return value could be a numerical constant:

$WS_NUMBER=0
$WS_STRING=1
etc
quicker than string compares

PHP refererence I think is:
function ws__typeof ( &$v )

-
Kevin


"Leif W" <[EMAIL PROTECTED]> wrote:

> Hi!
> 
> I'm having some difficulty with the PHP and Perl translations when it comes
> to the simple "typeof" feature found in most other languages.  Ok, it's
> maybe something I dislike about both these languages but please don't bash
> them.  :-)  They have no typeof feature.  They are both very much
> "roll-your-own" philosophy about some things like this.  Perl much more so
> than PHP, but PHP is a bit more accomodating with several is_type($var)
> functions.  There's even a gettype, but its use is highly discouraged as the
> strings returned are likely to change and it's slow.  (But I wonder about
> the logic behind this, if everyone has to write their own typeof).
> 
> Anyways, how about the addition of a ws__typeof function, and if your
> language has a typeof, then it's just a simple wrapper.  But also, to have a
> more unified mechanism for possible input and output types...
> 
> Here's some Perl and PHP code I am working on.  Any thoughts of suggestions
> on how to approach the problem and get a more unified interface across the
> different languages?
> 
> Leif
> 
> ========================
> Perl
> ========================
> # ws__typeof - used to estimate the data type
> #
> # Input Data Types (language specific):
> #     SCALAR (number, string), ARRAY, HASH, or CODE
> #
> # Output Data Types (JavaScript / generic):
> #     number, boolean, function, string, object, array, date, default
> #
> # Takes a reference as input, determines type of reference,
> # if SCALAR, dereferences and determines format of data
> #
> sub ws__typeof
> {
> #    my $self = shift; # for OO, disregard for now
>     my $ref = shift || carp "Not enough args (0 of 1) sent to ws__typeof:
> $!";
> 
>     if ( $ref =~ /^SCALAR/ )
>     {
>         if ( $$ref =~ /^\d+$/ )
>         {
>             return( "number" );
>         }
>         elsif ( $$ref =~ m/\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/ )
>         {
>             return( "date" );
>         }
>         elsif ( $$ref =~ /^[\d\s\w]+([\d\s\w])*$/ ) # not binary string
> friendly
>         {
>             return( "string" );
>         }
>         else
>         {
>             return( "unknown" );
>         }
>     }
>     elsif ( $ref =~ /^ARRAY/ )
>     {
>         return( "array" );
>     }
>     elsif ( $ref =~ /^HASH/ )
>     {
>         return( "object" );
>     }
>     elsif ( $ref =~ /^CODE/ )
>     {
>         return( "code" );
>     }
>     else
>     {
>         return( "unknown" );
>     }
> }
> 
> ========================
> PHP
> ========================
> /*
>  * ws__typeof - used to estimate the data type
>  *
>  * Input Data Types (language specific):
>  *     boolean, array, object, null
>  *     scalar (numeric {integer, float}, string)
>  *
>  * Output Data Types (JavaScript / generic):
>  *     number, boolean, function, string, object, array, date, default
>  *
>  * Takes a reference as input, determines type of reference,
>  * if SCALAR, dereferences and determines format of data
>  */
> 
> function ws__typeof ( $v )
> {
>     if ( is_bool( $v ) )
>     {
>         return "boolean";
>     }
>     else if ( is_scalar( $v ) )
>     {
>         if ( is_numeric( $v ) )
>         {
>             if ( is_integer( $v ) )
>             {
>                 return "integer";
>             }
>             else if ( is_float( $v ) )
>             {
>                 return "float";
>             }
>             else // imaginary?  ;-)
>             {
>                 return "unknown number";
>             }
>         }
>         else if ( is_string( $v ) )
>         {
>             if ( preg_match( "/\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/",
> $v ) )
>             {
>                 return "date";
>             }
>             else if ( preg_match( "/^\w+([\w\d])*$/", $v ) )
>             {
>                 return "string";
>             }
>             else
>             {
>                 return "unknown string";
>             }
>         }
>         else
>         {
>             return "unknown scalar";
>         }
>     }
>     else if ( is_array( $v ) )
>     {
>         return "array";
>     }
>     else if ( is_object( $v ) )
>     {
>         return "object";
>     }
>     else if ( is_null( $v ) )
>     {
>         return "null";
>     }
>     else
>     {
>         return "unknown";
>     }
> }
> 
> 
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by: SF.net Giveback Program.
> SourceForge.net hosts over 70,000 Open Source Projects.
> See the people who have HELPED US provide better services:
> Click here: http://sourceforge.net/supporters.php
> _______________________________________________
> Dynapi-Dev mailing list
> [EMAIL PROTECTED]
> http://www.mail-archive.com/[EMAIL PROTECTED]/


-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
_______________________________________________
Dynapi-Dev mailing list
[EMAIL PROTECTED]
http://www.mail-archive.com/[EMAIL PROTECTED]/

Reply via email to