php / php/php-src

Too big `string` to `int` cast results nonsense

Offen
#19,118 4 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Status: Needs Triage
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

The following code:

<?php
if ( (string) PHP_INT_MAX === '9223372036854775808' ) {
    echo "string identical" . PHP_EOL;
}

if ( PHP_INT_MAX === (int) '9223372036854775808' ) {
    echo "int identical" . PHP_EOL;
}

Resulted in this output:

int identical

But I expected this output instead:

Deprecated: Conversion from string '9223372036854775808' to int loses precision

A very similar error already exists when converting float to int implicitly e.g. $a[ PHP_INT_MAX + 1 ] = '';

See also https://github.com/php/php-src/issues/17081 which reports that for float/int casts

PHP Version
PHP 8.4.8
Operating System

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere das String-zu-Integer-Cast-Verhalten unter PHP 8.4.8 und verfolge anschließend den Konvertierungspfad des PHP-Interpreters von String zu Integer. Vergleiche ihn mit der im Issue referenzierten Behandlung von Präzisionsverlusten bei der Konvertierung von Float zu Integer. Als erledigt gilt die Aufgabe, wenn die Konvertierung eines übergroßen Strings die erwartete Deprecation meldet, statt stillschweigend PHP_INT_MAX zu erzeugen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c, php
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.