Гость_Ярослав
24.11.2013 - 12:02
Если убрать уточнение типа параметра в методе add(Time $t), то будет ли работать программа? Для чего существует такая возможность? Перечислите, уточнение для каких типов переменных можно устанавливать в списке аргументов функций или методов.
Работать будет.
Существует для проверки типа при вызове функции.
Если в функцию сунули не то, то будет сообщение об ошибке.
Можно писать array или любое имя класса.
Гость_Ярослав
24.11.2013 - 14:29
а вот в этом случае?
?php
class Time {
private $s;
private $m;
private $h;
public function __construct($h = 0, $m = 0, $s = 0) {
$this->h = $h;
$this->m = $m;
$this->s = $s;
}
public function show() {
echo $this->h . ':' . $this->m . ':' . $this->s . "\n";
}
public function add(Time $t) {
$sec = $this->sec + $t->sec;
if ($sec > 60)
{
$addmin = $sec / 60;
$sec = $sec % 60;
}
$min = $this->min + $t->min + $addmin;
if ($min > 60)
{
$addhour = $min / 60;
$min = $min % 60;
}
$hour = $this->hour + $t->hour + $addhour;
$this->sec = $sec;
$this->min = $min;
$this->hour = $hour;
}
}
// test
$t1 = new Time(12, 32, 3);
$t2 = new Time(23, 35, 58);
$t1->show();
$t2->show();
$t1->add($t2);
$t1->show();
да в любом случае.
это защита от того что ты не будешь вызывать add с чем-то левым, например $t1->add(12); выдаст сообщение об ошибке что в add ожидался аргумент Time а не int, больше это ни на что не влияет.
Соответственно если ты уберешь проверку Time, то 12 спокойно пройдет в метод, и в строке $sec = $this->sec + $t->sec; будет ошибка что $t это не объект и из него невозможно получить ->sec. А если у тебя везде правильное значение в add передается, то работа скрипта никак не изменится.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.