Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:42339 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 46994 invoked from network); 18 Dec 2008 22:22:19 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 18 Dec 2008 22:22:19 -0000 Authentication-Results: pb1.pair.com header.from=nrixham@gmail.com; sender-id=pass; domainkeys=bad Authentication-Results: pb1.pair.com smtp.mail=nrixham@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.219.20 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: nrixham@gmail.com X-Host-Fingerprint: 209.85.219.20 mail-ew0-f20.google.com Received: from [209.85.219.20] ([209.85.219.20:36006] helo=mail-ew0-f20.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 8A/AA-09584-A1DCA494 for ; Thu, 18 Dec 2008 17:22:19 -0500 Received: by ewy13 with SMTP id 13so731276ewy.23 for ; Thu, 18 Dec 2008 14:22:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:reply-to :user-agent:mime-version:to:cc:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=vu4lItiFqZd1rfCoduaARCK3OlQkUlziTX++YwwtBgA=; b=oB8l3LiarPsweZ/9tYyNmwNWBpPFZujxWa2KIHdcbywV1NKN7yqgljSOGz54PzLUw/ WjcqccEcx9wj2xVKiuBLpe2xhcgWgZNSyYzvcbLNd7kUSOJ2N6XOoGYBPiOG+2oFrDfw po9q8riSSoYhkifFeIYUFPPhC4AzhMVwJNFA8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:reply-to:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; b=vUGxydNBa9WpMWVyapN1kVSoanpRzJeFYHw/mexC0Jx149IzjKVetfCtj+6sh4PzG+ 3WbGji8G6DImWjyyUiRFtCSzjuPwOj+eZ+0wJhIFxG0qkBiYNFJVuOXPnB2x6X5qFJHr pUV+bGnE9jzXgQ10omsHf0gcySrMeRk8Wt/NY= Received: by 10.210.79.9 with SMTP id c9mr2914543ebb.155.1229638935865; Thu, 18 Dec 2008 14:22:15 -0800 (PST) Received: from ?192.168.2.6? (82-41-135-70.cable.ubr02.grth.blueyonder.co.uk [82.41.135.70]) by mx.google.com with ESMTPS id c22sm8402542ika.20.2008.12.18.14.22.15 (version=TLSv1/SSLv3 cipher=RC4-MD5); Thu, 18 Dec 2008 14:22:15 -0800 (PST) Message-ID: <494ACD0D.6000308@gmail.com> Date: Thu, 18 Dec 2008 22:22:05 +0000 Reply-To: nrixham@gmail.com User-Agent: Thunderbird 2.0.0.18 (Windows/20081105) MIME-Version: 1.0 To: Dave Ingram CC: Giorgio Sironi , internals@lists.php.net References: <69.22.48223.7E389494@pb1.pair.com> <494A3B12.80509@dmi.me.uk> <8637af910812181126y3c0f0badv64f591c22480834e@mail.gmail.com> <494ACA01.1000100@dmi.me.uk> In-Reply-To: <494ACA01.1000100@dmi.me.uk> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] Q on Primitives From: nrixham@gmail.com (Nathan Rixham) Dave Ingram wrote: >> I remember that multiple signatures was said to have a possible very >> difficult implementation. However, a similar behaviour can be achieved by >> some instanceof(). >> >> > I thought it probably would be awkward, but we do already have some type > hinting that can also be accomplished with instanceof() -- this is just > an extension of that idea. Although it's not my idea as such! > > instance of is handy however it isn't the cleanest; consider: public static function parseByte( $var ) { $testPassed = false; if( $var instanceof Number ) { $var = $var->byteValue(); $testPassed = true; } if( $var instanceof String ) { $var = $var->__toString(); } if( !$testPassed && is_numeric( $var ) ) { $var = 0 + $var; $testPassed = true; } if( $testPassed && Byte::MIN_VALUE <= $var && Byte::MAX_VALUE >= $var ) { return $var; } throw new NumberFormatException(); } could be: public static function parseByte( Number $var ) { return $var->byteValue(); } public static function parseByte( String $var ) { if( is_numeric( $var = $var->__toString() ) ) { $var = 0 + $var; if( Byte::MIN_VALUE <= $var && Byte::MAX_VALUE >= $var ) { return $var; } } throw new NumberFormatException(); } mini-use-case but shows how useful it would be..