Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: OOP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: OOP
shubaivan
Отправлено: 23 Октября, 2014 - 20:57:56
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




есть абстрактный класс
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /**
  4.  * Created by PhpStorm.
  5.  * User: ivan
  6.  * Date: 22.10.14
  7.  * Time: 11:55
  8.  */
  9. /*Абстрактный класс Abstractbicycle в котором есть переменные: фирма, вес, количество скоростей. Велосипед может катиться и остановиться */
  10. /* В абстрактном классе Abstractbicycle есть абстрактный метод show()*/
  11.  
  12.  
  13.  
  14. abstract class AbstractBicycle
  15. {
  16.     public $brand;
  17.     public $weight;
  18.     public $speedNumber;
  19.  
  20.     abstract public function show();
  21.  
  22.     /*================Set Values==================*/
  23.  
  24.     public function setBrand($brand)
  25.     {
  26.         $this->brand = $brand;
  27.     }
  28.  
  29.     public function setWeight($weight)
  30.     {
  31.         $this->weight = $weight;
  32.     }
  33.  
  34.     public function setSpeedNumber($speedNumber)
  35.     {
  36.         $this->$speedNumber = $speedNumber;
  37.     }
  38.  
  39.     /*================Get Values===================*/
  40.  
  41.     public function getBrand()
  42.     {
  43.         return $this->brand;
  44.     }
  45.  
  46.     public function getWeight()
  47.     {
  48.         return $this->weight;
  49.     }
  50.  
  51.     public function getSpeedNumber()
  52.     {
  53.         return $this->speedNumber;
  54.     }
  55.  
  56.     public function roll()
  57.     {
  58.         return 'rolling';
  59.     }
  60.  
  61.     public function brake()
  62.     {
  63.         return 'brake';
  64.     }
  65.  
  66. }
  67.  
  68.  

есть наследник
PHP:
скопировать код в буфер обмена
  1.  
  2. class LeaderFox extends AbstractBicycle
  3. {
  4.     public function __constructor($brand, $weight, $speedNumber)
  5.     {
  6.         $this->getBrand($brand);
  7.         $this->getWeight($weight);
  8.         $this->getSpeedNumber($speedNumber);
  9.     }
  10.     public function show()
  11.     {
  12.         return sprintf('This %s is %.3f %d',"{$this->getBrand()}", "{$this->getWeight()}", "{$this->getSpeedNumber()}");
  13.     }
  14. }
  15.  

и есть исполняемый файл
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. require_once 'AbstractBicycle.php';
  4. require_once 'LeaderFox.php';
  5.  
  6. $LeaderFox = new LeaderFox('LeaderFox','9.5','14');
  7. echo $LeaderFox->show().'<br>';
  8.  

но почему то при создание объекта класса и последующему вызову функции show() выводит такой результат:
This is 0.000 0<br>
а должен
This LeaderFox is 9.5000 14
Почему не передаються параметры?

(Отредактировано автором: 23 Октября, 2014 - 21:01:57)

 
 Top
RickMan
Отправлено: 23 Октября, 2014 - 21:14:19
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Может это:
PHP:
скопировать код в буфер обмена
  1. public function __constructor($brand, $weight, $speedNumber)
  2.     {
  3.         $this->getBrand($brand);
  4.         $this->getWeight($weight);
  5.         $this->getSpeedNumber($speedNumber);
  6.     }

стоит заменить на:
PHP:
скопировать код в буфер обмена
  1. public function __constructor($brand, $weight, $speedNumber)
  2.     {
  3.         $this->setBrand($brand);
  4.         $this->setWeight($weight);
  5.         $this->setSpeedNumber($speedNumber);
  6.     }
 
 Top
OrmaJever Модератор
Отправлено: 23 Октября, 2014 - 21:21:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




shubaivan пишет:
PHP:
скопировать код в буфер обмена
  1. return sprintf('This %s is %.3f %d',"{$this->getBrand()}", "{$this->getWeight()}", "{$this->getSpeedNumber()}");

2, 3 и 4 параметры шикарны Хм


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
shubaivan
Отправлено: 23 Октября, 2014 - 21:34:32
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




В конструкторе LeaderFox поменял на set методы, и через Debug запустил, все равно приходит null вместо параметров
(Добавление)
OrmaJever пишет:
shubaivan пишет:
PHP:
скопировать код в буфер обмена
  1. return sprintf('This %s is %.3f %d',"{$this->getBrand()}", "{$this->getWeight()}", "{$this->getSpeedNumber()}");

2, 3 и 4 параметры шикарны Хм


%s - string
%.3f c - тип double три знака после запятой
%d - целое число
Что я не правильно делаю ?
(Добавление)
нашел: __constructor ===> __construct
у меня мало опыта, буду внимательней. И тут еще $ убрал
PHP:
скопировать код в буфер обмена
  1.  
  2. public function setSpeedNumber($speedNumber)
  3.     {
  4.         $this->speedNumber = $speedNumber;
  5.     }
  6.  

Осталься вопрос по применению sprintf как правильно ?
 
 Top
OrmaJever Модератор
Отправлено: 23 Октября, 2014 - 22:03:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




shubaivan пишет:
Что я не правильно делаю ?

вы реально не понимаете в чём проблема? Однако
Иногда люди очень удивляют, не зная банальных основ им уже нужно в классах разбираться. Зачем вы взяли вызовы методов в кавычки? Где вы это вычитали? Почему так?
Должно быть так
PHP:
скопировать код в буфер обмена
  1. return sprintf('This %s is %.3f %d',$this->getBrand(), $this->getWeight(), $this->getSpeedNumber());


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
shubaivan
Отправлено: 23 Октября, 2014 - 22:31:44
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




OrmaJever пишет:
shubaivan пишет:
Что я не правильно делаю ?

вы реально не понимаете в чём проблема? Однако
Иногда люди очень удивляют, не зная банальных основ им уже нужно в классах разбираться. Зачем вы взяли вызовы методов в кавычки? Где вы это вычитали? Почему так?
Должно быть так
PHP:
скопировать код в буфер обмена
  1. return sprintf('This %s is %.3f %d',$this->getBrand(), $this->getWeight(), $this->getSpeedNumber());

спасибо.
(Добавление)
Как правильно использовать волшебные методы __get и __set в этом примере?

(Отредактировано автором: 23 Октября, 2014 - 22:44:12)

 
 Top
OrmaJever Модератор
Отправлено: 23 Октября, 2014 - 22:50:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




shubaivan пишет:
Как правильно использовать волшебные методы __get и __set в этом примере?

они не для данного примера. У них немного другое применение.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
shubaivan
Отправлено: 23 Октября, 2014 - 23:01:11
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




OrmaJever пишет:
shubaivan пишет:
Как правильно использовать волшебные методы __get и __set в этом примере?

они не для данного примера. У них немного другое применение.

ок. Другой вопрос, если создать еще один класс наследник, для такого же вывода данных, в нем надо будет применять тоже __construct чтоб их собрать, его как то можно поместить в класс родителя, раз он применяется в обеих классах наследниках ?
(Добавление)
нашел
function __construct() {
parent::__construct();

(Отредактировано автором: 23 Октября, 2014 - 23:01:41)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB