|
|
|
| Уважаемые профессионалы РНР! Помогите пожалуйста решить задачу, которую мне дали как тестовое задание по РНР. Есть код.
abstract class Animal {
protected static $legsNumber = -1;
public function getLegsNumber() {
..........
Здесь 1000 строк кода
..........
return self::$legsNumber;
}
...................................
}
class Dog extends Animal {
protected static $legsNumber = 4;
...................................
}
class Cat extends Animal {...
и еще 100 классов-потомков Animal
$someAnimal = new Dog();
echo $someAnimal->getLegsNumber();
|
Он выводит -1 а должен 4. Что нужно изменить? Версия РНР < 5.3 (поэтому static вместо self не прокатит). | |
|
|
|
|
|
|
|
для: Spartak
(24.04.2010 в 09:09)
| | Не стоит два раза объявлять переменную, лучше воспользоваться конструктором
<?php
abstract class Animal {
protected static $legsNumber = -1;
public function getLegsNumber() {
return self::$legsNumber;
}
}
class Dog extends Animal {
function __construct()
{
self::$legsNumber = 4;
}
}
class Cat extends Animal {
}
$someAnimal = new Dog();
echo $someAnimal->getLegsNumber();
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(24.04.2010 в 13:15)
| | Все правильно - выводит 4, но у всех остальных животных будет одинаковое legsNumber...Но все равно задание у меня приняли, учитывая данное замечание. За что я вам очень благодарен! Спасибо! | |
|
|
|
|
|
|
|
для: Spartak
(24.04.2010 в 17:35)
| | потому, что у Абстрактного Животного нет закрепленного свойства "число ног".
А значит выбор типа этого свойства нарушает естественную модель. | |
|
|
|
|
|
|
|
для: Spartak
(24.04.2010 в 17:35)
| | Все верно, статическая переменная - это общая переменная, если вы создадите хоть один объект класса Dog() переменная $legsNumber получит значение 4, в каком бы объекте вы к ней ни обращались - она одна на всех. Если после создания объекта класса Dog() вы измените её значение - метод getLegsNumber() для объекта класса Dog() вернет новое значение, а не 4.
<?php
abstract class Animal {
protected static $legsNumber = -1;
public function getLegsNumber() {
return self::$legsNumber;
}
}
class Dog extends Animal {
function __construct()
{
self::$legsNumber = 4;
}
}
class Cat extends Animal {
}
$someAnimal = new Dog();
echo $someAnimal->getLegsNumber(); // 4
$otherAnimal = new Cat();
echo $otherAnimal->getLegsNumber(); // 4
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(25.04.2010 в 11:26)
| | А надо было чтобы у какого то животного было свое кол-во ног. Но и это прокатило..Спасибо еще раз! | |
|
|
|