Неверно соблюдается условие в методе -- strlen не работает

Иллюстрация примера из С.Хольцнер "PHP в примерах", стр. 218 - 219
Подскажите, в чём ошибка: в методе set_name() указано условие strlen(\$text) меньше 9, но по факту не пропускаются \$text и с меньшей длиной.

<?php
/* Упражнения в ООП. Классы. Объекты. Свойства. Методы. */
class Animal
{
    var $name;
    function set_name($text)
    {
        if (strlen($text) < 9) {
            $this -> name = $text;
        }
    }
    function get_name()
    {
        return $this -> name;
    }
}
$lion = new Animal;
$lion -> set_name("Геннадий");
echo "Имя льва: ", $lion -> get_name(), "<br>";
echo "Имя льва напрямую из свойства: ", $lion -> name, "<br>";

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

Для начала делаем отладку:

<?php

/* Упражнения в ООП. Классы. Объекты. Свойства. Методы. */
class Animal
{
    var $name;
    function set_name($text)
    {
        echo('dl=' . strlen($text) . ' '); // отладка
        if (strlen($text) < 9) {
            $this->name = $text;
        }
    }
    function get_name()
    {
        return $this->name;
    }
}
$lion = new Animal;
$lion -> set_name("Генадий");
echo "Имя льва: ", $lion -> get_name(), "<br>";

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

Это связано с тем. что в реальности идёт подсчёт байт, а русские буквы занимают 2 байта каждая (а не 1) -- а потому используем mb_strlen().

_____________
матфак вгу и остальная классика =)