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

Форум PHP

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

 

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

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

тема: Fatal error: Cannot call abstract method MyInterface::MyMethod()

Сообщения:  [1-10]   [11-14] 

 
 автор: t4f   (10.03.2007 в 18:14)   письмо автору
 
   для: Valick   (10.03.2007 в 17:26)
 

В интерфейсе не надо указывать никаких модификаторов.
Для начала разберитесь зачем применяются интерфейсы, и подобные вопросы отпадут сразу. Интерфейс - это описание действий (методов) на высоком уровне абстракции. Если вы реализуете интерфейс, то принимаете его реализацию как есть, т.е. нельзя объявлять методы с отличными от паблик модификаторами в классах, реализующих интерфейс.

   
 
 автор: Valick   (10.03.2007 в 17:26)   письмо автору
 
   для: t4f   (10.03.2007 в 13:21)
 

Пользуясь случаем хочу:
1) Извениться за то, что не понял утром вопрос. (проснулся я только к обеду))) )
2) В интерфейсе сначала в место public указывал abstract и получал ошибку, так тоже должно быть или как? Если я хочу, допустим, в одном классе указать функцию MyMethod public, а в другом классе MyMethod private, то как? Или у меня не должно возникать такой ситуации?

   
 
 автор: t4f   (10.03.2007 в 13:21)   письмо автору
 
   для: cheops   (10.03.2007 в 13:17)
 

Офигеть! Чтож будем надеяться на улучшение ситуации в РНР 7 или 8 :)

   
 
 автор: cheops   (10.03.2007 в 13:17)   письмо автору
 
   для: t4f   (10.03.2007 в 13:11)
 

В PHP как-то странно всё реализовано, вы можете обращаться к методам, как будто они все статичные, даже если методы обращаются к ещё не инициализированным членам класса - вызов всё равно прходит, правда заканчивается фатальной ошибокой, однако весь код до обращения к члену класса выполняется.

   
 
 автор: t4f   (10.03.2007 в 13:11)   письмо автору
 
   для: cheops   (10.03.2007 в 13:09)
 

1. В интерфейсе нельзя указывать модификатор доступа - там все методы паблик.
2. Разве метод MyMethod статический, чтобы его можно было так вызывать?

   
 
 автор: cheops   (10.03.2007 в 13:09)   письмо автору
 
   для: Iron   (10.03.2007 в 06:02)
 

А вы не можете вызвать методы интерфейса - это действтительно чистая абстракция... Как не можете заполнить балон идеального газа. Следует вызывать метод класса
<?php  
  
interface MyInterface 
  

    public function 
MyMethod($sometext); 
  } 

  class 
MyClass implements MyInterface 
  

    public function 
MyMethod($sometext){ 
     echo 
$sometext
    } 
  } 

  
MyClass::MyMethod('Method called!');  
?>

   
 
 автор: cheops   (10.03.2007 в 13:05)   письмо автору
 
   для: bronenos   (10.03.2007 в 07:50)
 

Интерфейсы в PHP имеются, разработчики практически полностью передрали объектную модель Java.

   
 
 автор: isset   (10.03.2007 в 13:04)   письмо автору
 
   для: Iron   (10.03.2007 в 09:39)
 

нет.

[поправлено модератором]

   
 
 автор: Iron   (10.03.2007 в 09:39)   письмо автору
 
   для: Valick   (10.03.2007 в 08:32)
 

Уточню вопрос: Возможно ли вызвать метод MyMethod не через класс MyClass, реализующий интерфейс MyInterface , а через сам интерфейс?

   
 
 автор: bronenos   (10.03.2007 в 08:57)   письмо автору
 
   для: Valick   (10.03.2007 в 08:32)
 

Если бы не было слова [i]interface[i], я бы сказал, что все правильно. А с ним не знаю, как работать... (никто не просвятит?)

   

Сообщения:  [1-10]   [11-14] 

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

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