Неверно соблюдается условие в методе -- strlen не работает
Primary tabs
Иллюстрация примера из С.Хольцнер "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>";- Log in to post comments
- 3957 reads
vedro-compota
Tue, 04/25/2017 - 12:11
Permalink
Для начала делаем отладку:
Для начала делаем отладку:
<?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().
_____________
матфак вгу и остальная классика =)