Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Позднее статическое связывание

Сообщения:  [1-6] 

 
 автор: Spartak   (26.04.2010 в 09:30)   письмо автору
 
   для: cheops   (25.04.2010 в 11:26)
 

А надо было чтобы у какого то животного было свое кол-во ног. Но и это прокатило..Спасибо еще раз!

  Ответить  
 
 автор: cheops   (25.04.2010 в 11:26)   письмо автору
 
   для: 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
?>

  Ответить  
 
 автор: Trianon   (24.04.2010 в 17:51)   письмо автору
 
   для: Spartak   (24.04.2010 в 17:35)
 

потому, что у Абстрактного Животного нет закрепленного свойства "число ног".
А значит выбор типа этого свойства нарушает естественную модель.

  Ответить  
 
 автор: Spartak   (24.04.2010 в 17:35)   письмо автору
 
   для: cheops   (24.04.2010 в 13:15)
 

Все правильно - выводит 4, но у всех остальных животных будет одинаковое legsNumber...Но все равно задание у меня приняли, учитывая данное замечание. За что я вам очень благодарен! Спасибо!

  Ответить  
 
 автор: cheops   (24.04.2010 в 13:15)   письмо автору
 
   для: 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();
?>

  Ответить  
 
 автор: Spartak   (24.04.2010 в 09:09)   письмо автору
 
 

Уважаемые профессионалы РНР! Помогите пожалуйста решить задачу, которую мне дали как тестовое задание по РНР. Есть код.


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 не прокатит).

  Ответить  

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования