2012-01-28 3 views
0

Теперь я имею дело с PHP, но I`ve stucked со странным вопросом: я делаю простой Foo для длины строки:Проблемы с передачей PHP?

function slen($str) { 
    $len; 
    for ($len=0; $str[$len]; $len++) { 
      /* while tehre is a symbol in $str continue counting, old C metnod */ 
    } 
    return (int)$len; 
} 

это `ы в качестве кода, и выводит длину, но стрелы с предупреждающим сообщением PHP: PHP Примечание: Неинициализированное смещение строки: 3 в /home/ilian/Desktop/SERVER/ex4.php в строке 5 И на моей строке 5 есть инициализация цикла цикла. Поэтому я понял, что PHP может сбивать с толку, не зная, какие переменные он проверяет для TRUE в этом массиве, потому что он может быть «Array», «HELLO», «MESS», 50, а длина - 4, что верно, но в случай, когда я проверяю простую строку на длину. Любое удобное объяснение?

+1

Вы знаете о функции ['strlen'] (http://php.net/strlen), правильно? – deceze

ответ

4

Проблема в том, что в какой-то момент ваше состояние условие ($str[$len]) попытается получить доступ к смещению за пределами строки. Это ваше условие остановки, но это условие остановки вызывает уведомление, так как доступ к неопределенному смещению считается ошибкой (и это правильно). Вам нужно будет проверить независимо от того, существует ли смещение с использованием isset($str[$len]), что не вызывает уведомления.

+0

Nice touch @deceze Я только что прочитал о isset empty и unset foos и обнаружил, что они делают исправление ... Но есть ли еще что-нибудь, что нужно проверить на конец строки, например C '' \ 0 "или EOF или NULL или? –

+0

@Ilian No. Строки PHP - это байтовые массивы, а не области NUL'-терминальных областей памяти. – deceze

0

Вам не нужно написать функцию, чтобы получить длину строки, PHP имеет этот встроенный для вас в нескольких внутренних функций:

  1. strlen - длина строки
  2. mb_strlen - Длина строки, которая может иметь многобайтовые символы в нем
  3. count - длина массива или количество элементов в объекте

, если все вам нужно подсчитать, сколько времени стоит строка, перейдите с strlen, для массивов вы должны использовать count. Гораздо лучше, чем кататься самостоятельно.

+0

Не совсем ... Мне нужна пользовательская версия проверки длины строки. –