Autor Zpráva
robbie
Profil
Ahoj, v článku je uvedeno toto:

(bool)(true / 2) / vyhodi mi to prazdny vysledek
"měla babka" + "4 jablka" /A non-numeric value encountered -toto by se melo pretypovat na int
(int) ((1 - 0.9) * 100) /opet prazdny vysledek a toto by mel byt take int 10 , ze
true . "2" / opet nic

je to zamer autora nebo je neco spatne s online php zobrazenim na: sandbox.onlinephpfunctions.com

Děkuji
TomášK.
Profil *
Tipuju, že v případech, kdy se nic nezobrazí, tu hodnotu jen spočítáš, ale nevypíšeš.
CZechBoY
Profil
Chyba se zobrazuje od nějaké verze 7.1, článek byl psán nejspíš pod php 5.
Alphard_
Profil *
Doplním odpovědi kolegů. V tom úkolu jsou uvedené různé výrazy a čtenářovým úkolem je vyzkoušet je vyhodnotit. K tomu opravdu nestačí prosté copy&paste, ale je třeba doplnit alespoň výpis výsledků. Což jde udělat např. takto (samozřejmě existuje mnoho variant, i bez pole):
<?php

$test = [];
$test[] = (bool)(true / 2);
$test[] = "měla babka" + "4 jablka";
$test[] = (int) ((1 - 0.9) * 100);
$test[] = true . "2";

var_dump($test);

výsledkem tohoto kódu na PHP 5.6 (pro verzi 5 byl ten návod psaný) je:
array(4) {
  [0]=>
  bool(true)
  [1]=>
  int(4)
  [2]=>
  int(9)
  [3]=>
  string(2) "12"
}

Na nejnovější verzi PHP 7.2 potom dostáváme:
<br />
<b>Warning</b>:  A non-numeric value encountered in <b>[...][...]</b> on line <b>5</b><br />
<br />
<b>Notice</b>:  A non well formed numeric value encountered in <b>[...][...]</b> on line <b>5</b><br />
array(4) {
  [0]=>
  bool(true)
  [1]=>
  int(4)
  [2]=>
  int(9)
  [3]=>
  string(2) "12"
}

Jak je vidět, všechny výrazy se stále vyhodnocují stejně (tj. jsou vyhodnotitelné), ale v případě nevalidních vstupů nás PHP od verze 7.1 na tuto skutečnost upozorňuje:
New E_WARNING and E_NOTICE errors have been introduced when invalid strings are coerced using operators expecting numbers (+ - * / ** % << >> | & ^) or their assignment equivalents. An E_NOTICE is emitted when the string begins with a numeric value but contains trailing non-numeric characters, and an E_WARNING is emitted when the string does not contain a numeric value.
robbie
Profil
Skvělé, díky moc.
Ale to jsem blázen>)) včera to vůbec nefungovalo a dnes v pohodě>)).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0