Garip PHP davranışı: Bir değişkene tamsayı 8 atamaz

5 Cevap php

Ben sadece şimdiye kadar benim kısa geliştirici hayatta karşılaştığımız tuhaf 'hata' ile karşılaştı düşünüyorum. Ben sadece herhangi bir değişkene değer atamak sekiz olamaz gibi görünüyor. Exemple:

<?php
$seven = 07;
$eight = 08; //what's wrong here?
$sevenB = 7;
$eightB = 8;

echo $seven;
echo $eight;
echo $sevenB;
echo $eightB;
?>

Çıktısı:

7078

The debugger in NetBeans tells me 0 is assigned to $eight, while the other variables are fine. If I remove the zeroes before the values, eight gets assigned, but as soon as this variable is used in a constructor, then it's replaced by zero again. WTF?

Here's my config: WAMP 2.0g, PHP 5.2.9, Apache 2.2.11, NetBeans 6.7.1. Disabling Xdebug (2.05) doesn't change a thing.

Kim bu tutarsız davranışı sorumludur? Bunu düzeltmek için?

Yardımlarınız için teşekkürler!

5 Cevap

PHP bir sekizlik olarak bir önceki 0 ile sayılar davranır.

Re: PHP:Integers.

PHP, sıfır prefaced olan bir sayı sekizlik olarak kabul edilir. Sekizli (8 tabanı) yalnızca rakam 0-7 Çünkü, 08 geçersiz ve sıfır olarak tedavi edilir.

this manual page daha fazla bilgi için bkz, ve sözdizimi bölümünde uyarı unutmayın: ". Geçersiz haneli sekizlik bir tamsayı (yani 8 ya da 9), numaranın geri kalanı göz ardı edilir verilmemiş ise"

<?php
var_dump(01090); // 010 octal = 8 decimal
?>

Eğer bir sıfır ile numaraları öneki varsa (0) onlar sekizlik sayı olarak yorumlanır. 7 yüksek sekizli sayıdır. onaltılık sayılar için 0x (kadar 15 / F) da var

nasıl düzeltebilirim: sadece 0 ;) ile önek yok

Sizin (bir ay takvimine gibi) sıfır ile bir dizi yol arıyoruz Eğer böyle bir şey deneyebilirsiniz:

<?
   for ($num = 1; $num <= 31; $num++) {
   if($num<10)
      $day = "0$num"; // add the zero
   else
      $day = "$num"; // don't add the zero
   echo "<p>$day</p>";
?>

Herkes de sıfır ile lider bir sayı Sekizli olarak kabul edilir belirtti benziyor

(Ler) printf yapmak için tek doğru yoldur.