Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:17063 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 4013 invoked by uid 1010); 1 Jul 2005 16:07:17 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 3998 invoked from network); 1 Jul 2005 16:07:17 -0000 Received: from unknown (HELO ntlworld.com) (127.0.0.1) by localhost with SMTP; 1 Jul 2005 16:07:17 -0000 X-Host-Fingerprint: 82.1.27.86 spc2-hava1-4-0-cust86.cosh.broadband.ntl.com Received: from ([82.1.27.86:5450] helo=localhost.localdomain) by pb1.pair.com (ecelerity 1.2 r(5656M)) with SMTP id 80/4C-29969-43A65C24 for ; Fri, 01 Jul 2005 12:07:16 -0400 Message-ID: <80.4C.29969.43A65C24@pb1.pair.com> To: internals@lists.php.net Date: Fri, 01 Jul 2005 17:07:08 +0100 User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) X-Accept-Language: en-us, en MIME-Version: 1.0 References: <42C32829.60500@iamjochem.com> <20050701151327.A2920@vlo> <42C54445.7070106@iamjochem.com> <42C54F98.20003@iamjochem.com> In-Reply-To: <42C54F98.20003@iamjochem.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Posted-By: 82.1.27.86 Subject: Re: [PHP-DEV] [Fwd: [PHP] constant() - php5] From: nick.telford@ntlworld.com (Nicholas Telford) Due to PHPs dynamic typing, unquoted strings are treated as strings unless a constant by that name exists. Thankfully it's clever enough to raise a notice to tell you it couldn't find a constant by that name, which makes debugging much easier. The reason constant() throws a warning rather than a notice is because PHP knows you're looking for a constant by that name and flags it as a more serious error, wheras before, it could just be that you want to use an unquoted string :) If you think it's a bit strange, it may seem so, but logically, if an unquoted number is equivilent to it's quoted counter-part, the same must be true for strings. Nicholas Telford Jochem Maas wrote: > Derick Rethans wrote: > >> On Fri, 1 Jul 2005, Jochem Maas wrote: >> >> >>> echo constant('CNST'); >>> >>> when: >>> >>> echo CNST; >>> >>> only triggers an E_NOTICE. >>> (assuming, in both cases that CNST is not defined). >>> >>> IMHO it should at most trigger an E_NOTICE. >> >> >> >> Did you compare the output of the two statements? > > > I did. > >> echo constant('CNST'); >> shows nothing (except the warning) >> >> echo CNST; >> shows "CNST" (and a notice). >> >> This makes perfect sense to me to differentiate between them like this. > > > ok - agreed that the echo behaviour is logical - but I wasn't actually > pertaining to the echo behaviour (and what was being echo'ed wasn't > relevant to my > original question). > > my point is that using a constant directly in your code when that > constant doesn't exist > only causes an E_NOTICE but passing a string to constant() when a > constant of the given > name doesn't exist causes an E_WARNING. > > I would either expect both to cause the same level of error OR that > trying to > use an undefined constant directly in code would cause a lower level of > error. > > but if you say the error output behaviour is expected/correct/desired > then I'm > happy to except it (and adjust my expectations accordingly) > - if you (anyone) could explain why (because I don't grok the logic behind > this behaviour) I would be very grateful, maybe it will bring me one > step closer > to being able to call myself a real programmer. :-/ > > anyway thanks for taking the time to reply, > I gather that you, Derick (amongst others!), have a plate full of PHP work > in the form of unicode and date related stuff (which I am very much looking > forward to!) - i.e. you are busy-busy, time is short, etc etc. > > kind rgds, > Jochem > > >> >> Derick >>