Nie jest wielkim fanem tłumienia błędów tutaj, z wyjątkiem skryptów wyrzucania lub przypadków, w których naprawdę nie ma dobrego sposobu na złapanie błędu.
Pozwól mi wyjaśnić zachowanie błędu Uninitialized string offset
.To nie jest błąd:
Przykład # 1
$a = 0;
$b = $a['f5'];
$a
jest numeryczna wartość skalarna. W drugiej linii PHP domyślnie rzuca tę wartość numeryczną na ciąg znaków. Łańcuch '0'
ma długość 1.
W PHP można wyszukać znak w ciągu znaków za pomocą indeksu tablicy, ponieważ PHP przechowuje ciągi jako tablice wewnętrznie. Na przykład:
$s= 'abcd';
print_r($s[1]);
Wyjście z tego kodu będzie b
, ponieważ jest to drugi znak w ciągu. W przykładzie # 1 wyszukiwanie 'f5'
jest konwertowane na liczbę, ponieważ łańcuchy znaków mogą być indeksowane tylko po pozycji znaku. echo intval('f5');
pokazuje nam, co PHP interpretuje ciąg 'f5'
jako 0
w kontekście numerycznym.
Ze mną do tej pory? Oto co się dzieje, gdy zastosujemy to przykład # 2
Przykład # 2
$a = '';
$b = $a['f5'];
$a
jest ciąg o zerowej długości. Druga linia jest taka sama jak $b= $a[0];
- tj. Druga linia pyta o pierwszy znak łańcucha o zerowej długości, ale ciąg nie zawiera znaków. Więc PHP generuje następujący błąd, pozwalając wiesz indeks po prostu nie istnieje:
Notice: Uninitialized string offset: 0 in C:\websites\tcv3\wc2009\htdocs\aatest_array.php on line 3
Są twarde uderzenia programowania w luźno wpisywanych języka.
Czy możesz opublikować wiersz 35? –
To tak, jakby tłumić niewłaściwe stwierdzenie. Podaj kod –
Pokaż cały kod, może być w dowolnej linii. – Cesar