• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

php funkcja switch() a w niej liczby 08 i 09

Object Storage Arubacloud
0 głosów
295 wizyt
pytanie zadane 13 marca 2017 w PHP przez doeg Początkujący (430 p.)

Witam!

Stworzyłem sobie plik format_daty.php, który po 'zaincludowaniu' do innych ma podstawiać w miejsce numeru miesiąca lub dnia jego pełną nazwę. Na tym tylko ma polegać jego praca, ale nie działa - wyrzuca taki błąd: 

Parse error: Invalid numeric literal in ....\format_daty.php on line 50

Można go naprawić wstawiając liczby w wierszach 50 i 53 w apostrof lub cudzysłów. Wtedy działa jak należy.

Moje pytanie brzmi: Dlaczego akurat 08 i 09 musi być w apostrofach, natomiast pozostałe liczby nie powodują komplikacji? Dlaczego mój switch() nie lubi 08 i 09, co złego jest w tych liczbach? Wykomentowanie tych fragmentów także sprawia, że nie pojawia się żaden błąd (oczywiście zamiana 08 i 09 wtedy nie działa).

Ps.

Dodam, że całość testowałem tylko w XAMPP'ie (na localhost) - nie wiem, czy na 'pełnowartościowym' serwerze też tak będzie się działo.

A oto kod:

 

<?php

switch ($nazwa_dnia)
{
	case 1:
		$nazwa_dnia = "Poniedziałek";
		break;
	case 2:
		$nazwa_dnia = "Wtorek";
		break;
	case 3:
		$nazwa_dnia = "Środa";
		break;
	case 4:
		$nazwa_dnia = "Czwartek";
		break;
	case 5:
		$nazwa_dnia = "Piątek";
		break;
	case 6:
		$nazwa_dnia = "Sobota";
		break;
	case 0:
		$nazwa_dnia = "Niedziela";
		break;
	}

switch ($nazwa_miesiaca) {
	case 01:
		$nazwa_miesiaca = "Styczeń";
		break;
	case 02:
		$nazwa_miesiaca = "Luty";
		break;
	case 03:
		$nazwa_miesiaca = "Marzec";
		break;
	case 04:
		$nazwa_miesiaca = "Kwiecień";
		break;
	case 05:
		$nazwa_miesiaca = "Maj";
		break;
	case 06:
		$nazwa_miesiaca = "Czerwiec";
		break;
	case 07:
		$nazwa_miesiaca = "Lipiec";
 		break;
	case 08:
		$nazwa_miesiaca = "Sierpień";
 		break;
	case 09:
		$nazwa_miesiaca = "Wrzesień";
 		break;
	case 10:
		$nazwa_miesiaca = "Październik";
		break;
	case 11:
		$nazwa_miesiaca = "Listopad";
		break;
	case 12:
		$nazwa_miesiaca = "Grudzień";
		break;
}

?>

2 odpowiedzi

+3 głosów
odpowiedź 13 marca 2017 przez event15 Szeryf (93,790 p.)
wybrane 13 marca 2017 przez doeg
 
Najlepsza
Lol, przecież to zrozumiałe, że musi być w apostrofach. zaczynasz od "0" to nie dziw się, że interpreter nie potrafi tego złapać... "08" nie jest liczbą. jest stringiem zawierającym cyfry 0 i 8 napisane obok siebie. Nie wiem czy jakikolwiek język by ci pozwolił na coś takiego...
1
komentarz 13 marca 2017 przez xandros Nałogowiec (29,450 p.)
w dodatku od 01 do 07 są traktowane jako hexadecymale :P
komentarz 13 marca 2017 przez event15 Szeryf (93,790 p.)
PHP i tak jest wyrozumiały jeśli chodzi chociażby o podawanie case w postaci stringów :) spróbujta to zrobić w C++.
komentarz 13 marca 2017 przez event15 Szeryf (93,790 p.)

Swoją drogą:

 

<?php
class DateFormatter
{

    private $polishMonthNames = [
         1 => "stycznia",        2 => "lutego",       3 => "marca",
         4 => "kwietnia",        5 => "maja",         6 => "czerwca",
         7 => "lipca",           8 => "sierpnia",     9 => "września",
        10 => "października",   11 => "listopada",   12 => "grudnia"
    ];

    /**
     * @param DateTime $dateTime
     * @return string
     */
    public function getPolishDate(DateTime $dateTime)
    {
        return $dateTime->format('j') . ' '
            . $this->polishMonthNames[ (int) $dateTime->format('n') ] . ' '
            . $dateTime->format('Y');
    }
}

 

komentarz 13 marca 2017 przez doeg Początkujący (430 p.)
No super! Teraz wszystko jasne. Bardzo Wam dziękuję za zainteresowanie. Dzięki też za pomysły na inne rozwiązanie problemu.
komentarz 13 marca 2017 przez efiku Szeryf (75,160 p.)
Słyszeliście o takim dodatku intl?

Podpowiem:

IntlDateFormatter
1
komentarz 13 marca 2017 przez event15 Szeryf (93,790 p.)
Myślę, efik iż znajomość z Tobą jest najbardziej wartościową ze wszystkich PHPowych ! :)
1
komentarz 13 marca 2017 przez xandros Nałogowiec (29,450 p.)
php > $now = new DateTime();
php > $formatter = new IntlDateFormatter('pl-PL', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Europe/Paris', IntlDateFormatter::GREGORIAN);
php > echo $formatter->format($now);
poniedziałek, 13 marca 2017 23:44:29 Czas środkowoeuropejski standardowy
php >

lepiej? :V

komentarz 13 marca 2017 przez xandros Nałogowiec (29,450 p.)
Ty, a jest jsowy odpowiednik?
komentarz 13 marca 2017 przez efiku Szeryf (75,160 p.)
Styknie!
Dzięki koledzy ^^

Drobna uwaga, z tego co pamiętam w dokumentacji mówią, że warto posiadać skonfigurowane "locales"

( sudo dpkg-reconfigure locales  i mieć zaznaczone pl-PL UTF8)

Xandros, googluj ;)
komentarz 14 marca 2017 przez xandros Nałogowiec (29,450 p.)
Google tylko daje paczki (moment.js), a ja chcę waniliowe :v
+1 głos
odpowiedź 13 marca 2017 przez gromula Stary wyjadacz (10,070 p.)

Myślę,że zacznijmy od tego iż łatwiej coś takiego wyprowadzić do tablicy a nie do case, adekwatnie z dniem tygodnia


function getMonthName($nr)
{
    $m[1] = "Styczeń";
    $m[2] = "Luty";
    $m[3] = "Marzec";
    $m[4] = "Kwiecień";
    $m[5] = "Maj";
    $m[6] = "Czerwiec";
    $m[7] = "Lipiec";
    $m[8] = "Sierpień";
    $m[9] = "Wrzesień";
    $m[10] = "Październik";
    $m[11] = "Listopad";
    $m[12] = "Grudzień";
    return $m[$nr];
}

@edit

Jaką wersję php używasz jeśli php7 - http://stackoverflow.com/questions/40735963/parse-error-invalid-numeric-literal

komentarz 13 marca 2017 przez doeg Początkujący (430 p.)
Dzięki. Za pomysł z tablicami także.

Podobne pytania

0 głosów
0 odpowiedzi 987 wizyt
pytanie zadane 1 listopada 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)
0 głosów
1 odpowiedź 4,727 wizyt
pytanie zadane 13 czerwca 2016 w Sprzęt komputerowy przez Jonki Dyskutant (8,180 p.)
+1 głos
1 odpowiedź 556 wizyt

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...