php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #70455 Missing constant: IntlChar::NO_NUMERIC_VALUE
Submitted: 2015-09-07 23:10 UTC Modified: 2015-09-08 00:23 UTC
From: colinodell@php.net Assigned:
Status: Closed Package: intl (PECL)
PHP Version: 7.0.0RC2 OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: colinodell@php.net
New email:
PHP Version: OS:

 

 [2015-09-07 23:10 UTC] colinodell@php.net
Description:
------------
IntlChar::getNumericValue() will return a "magic number" of float(-123456789) if no numeric value exists for the given code point.  This behavior is correct and consistent with both the underlying library and HHVM's implementation.

However, the ICU library defines a constant for this magic number called U_NO_NUMERIC_VALUE, which we'd map to IntlChar::NO_NUMERIC_VALUE.  However, PHP does not expose this constant.  I believe this is a bug because both ICU and HHVM refer to a constant for this value, but we don't. (And magic numbers are bad.)

I would therefore request that this constant be added/exposed as IntlChar::NO_NUMERIC_VALUE.  This name will match the current naming conventions as well as the name used by HHVM.

(HHVM references this constant in the source but doesn't expose it - I've submitted a corresponding report here: https://github.com/facebook/hhvm/issues/6209)

If you disagree with my assessment that this is a bug, then I respectfully request this be changed to a Feature/Change Request.

Test script:
---------------
See https://3v4l.org/48Bnh or run this yourself:

<?php

$value = IntlChar::getNumericValue("x");
var_dump($value);
var_dump($value === IntlChar::NO_NUMERIC_VALUE);

Expected result:
----------------
float(-123456789)
bool(true)

Actual result:
--------------
float(-123456789)

Fatal error: Uncaught Error: Undefined class constant 'NO_NUMERIC_VALUE' in /in/48Bnh:5
Stack trace:
#0 {main}
  thrown in /in/48Bnh on line 5

Process exited with code 255.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2015-09-08 00:04 UTC] cmb@php.net
An alternative might be to return FALSE instead, which seems to
be a common pattern to indicate failure in PHP.
 [2015-09-08 00:23 UTC] colinodell@php.net
> An alternative might be to return FALSE instead, which seems to
> be a common pattern to indicate failure in PHP.

While this does seem perfectly reasonable, it would deviate from the underlying library's behavior (which the RFC says should be adhered to) and HHVM's implementation.

I'm not necessarily against your idea, I'm just hesitant to jump on that implementation without considering these points first.
 [2016-04-08 08:03 UTC] ab@php.net
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=93f8eaf3b8c9400f230dc904d52508882f83ee5f
Log: Fixed bug #70455 Missing constant: IntlChar::NO_NUMERIC_VALUE
 [2016-04-08 08:03 UTC] ab@php.net
-Status: Open +Status: Closed
 [2016-07-20 11:32 UTC] davey@php.net
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=93f8eaf3b8c9400f230dc904d52508882f83ee5f
Log: Fixed bug #70455 Missing constant: IntlChar::NO_NUMERIC_VALUE
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 25 02:01:30 2024 UTC