Длина строки PHP без strlen () - PullRequest
3 голосов
/ 12 ноября 2010

Просто просматривая последнюю версию стандартов кодирования PHP, и что-то попалось на глаза:

http://svn.php.net/viewvc/php/php-src/trunk/CODING_STANDARDS?revision=296679&view=markup

Стандарт кодирования № 4 гласит: «При написании функций, которые работают со строками, не забывайте, что PHP содержит свойство length каждой строки и что его не следует вычислять с помощью strlen () ...»

Я ВСЕГДА использовал strlen, и, возможно, уже поздно, но как получить доступ к встроенному свойству длины строки в PHP?

Ответы [ 3 ]

10 голосов
/ 12 ноября 2010

Они говорят о функции C , а не о функции PHP.Функция C перестанет считать после первого \0, но строки PHP могут содержать \0 в другом месте, кроме конца.

1 голос
/ 12 ноября 2010

Было ясно сказано, что они говорят о стандартах кодирования PHP, а не о функции C или расширении движков PHP.

========================Стандарты кодирования PHP========================В этом файле перечислены несколько стандартов, которым должен следовать любой программист, добавляющий или изменяющий код в PHP.Поскольку этот файл был добавлен на очень поздней стадии разработки PHP v3.0, кодовая база (пока) не полностью следует ему, но движется в этом общем направлении.Так как мы теперь хорошо разбираемся в выпусках версии 4, многие разделы были перекодированы для использования этих правил.

Тем не менее я не нашел никакой соответствующей информации о свойстве длины строки, но думаю, что в будущем они могутраскрыть информацию, если она связана с новой версией PHP.

Пожалуйста, напишите, если кто-то нашел полезную информацию об этом.

0 голосов
/ 02 апреля 2012

Чтобы получить длину строки zval (переменная в C), используйте Z_STRLEN (your_zval) см. zend_operators.h в строке 398 (PHP 5.4):

#define Z_STRLEN(zval)          (zval).value.str.len
...