[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: interface
Страницы: 1, 2, 3
twin
Я не особо силен в ООП, это не секрет. Но любопытством не обделен. Тем более иногда нужно знать тонкости хотя бы теоретически, раз такая коньюнктура.

Всвязи с этим вопрос.

В чем может быть полезность интерфейсов? Основное предназначение (контракт) опускаем сразу, это даже обсуждать не хочется, на сколько бесполезная и даже вредная затея.

А вот как еще можно его использовать?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
TMake
Цитата (twin @ 7.06.2016 - 15:46)
В чем может быть полезность интерфейсов? Основное предназначение (контракт) опускаем сразу, это даже обсуждать не хочется, на сколько бесполезная и даже вредная затея.

Вот и закончилась дискуссия, в мануале вроде все корректно расписано для чего он нужен.
Если в твоем случае они бесполезны, то увы и ах.
twin
Invis1ble
Я серьёзно спрашивал, что тебе все трололо чудится.

Ну к примеру возможно изменить поведение объекта, если он не выполняет требование интерфейса? Я не знаю, а мало ли...

Цитата (TMake @ 7.06.2016 - 12:45)
Вот и закончилась дискуссия, в мануале вроде все корректно расписано для чего он нужен.
Для чего он нужен, я прекрасно знаю. Потому и говорю, от него вреда гораздо больше, чем пользы, если использовать в классическм виде. Мне интересны "незадокументированные" возможности. Есть ли они.

Вот один раскопал - константы. Еще есть, кто знает?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Oyeme
Сообщений: 15168
Группа: Администратор

user posted image
TMake
Цитата (twin @ 7.06.2016 - 17:03)
Вот один раскопал - константы. Еще есть, кто знает?

Может стоит перечитать доку?
user posted imageВидно
twin
Oyeme
Что ты голову повесил? :D
Я же предупредил сразу, мне не интересно свойство интефейса, как контракта. Кому интересно - юзайте, кто ж против.

Свою позицию могу объяснить, что бы не считали меня лохом, а себя гуру.

Вот пример:
interface contract
{
public function get();
}

class Example implements contract
{
public function method()
{
// do something
}
}


new Example;
В таком виде он выкинет фатал:
Цитата
Fatal error: Class Example contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (contract::get)
Ну понятно, не компатибелен с интерфейсом. Вот радость то, теперь можно открыть интерфейс и посмотреть, чего же там должно быть. Да, наверное немного экономится времени на разработку.

А теперь так:
class Example 
{
public function method()
{
// do something
}
}


(new Example)->get();
Тоже фатал:
Цитата
Fatal error: Call to undefined method Example::get()
Разница только в том, что в первом случае не нужно вызывать метод. Но если проект покрыт тестами, он однозначно будет вызван.

А теперь сравните экономию времени при разработке и экономию ресурса при боевой работе. Сколько лишних, абсолютно бесполезных обращений к ФС.

Я понимаю, вам плевать на ресурс. Но мне вот нет. Потому я сразу и попросил не лезть с нравоучениями. Меня совсем другое интересует.

Цитата (TMake @ 7.06.2016 - 13:30)
Может стоит перечитать доку?

Да успокойся ты. Я не то имел ввиду вовсе. То, что он может содержать константы - никакой не секрет. А вот использовать его не совсем профильно, а как конфигурационный файл, может оказаться интересно.

Может еще чего есть?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
T1grOK
Цитата (twin @ 7.06.2016 - 13:46)
Тоже фатал:

Это называется методом "тыка". В сложной взаимосвязи неизбежно будут ошибки (различные состояния).

class Example 
{
public $property;

public function method()
{
if($this->property == 2){
$this->otherMethod();
}
}


public function otherMethod()
{

}
}


(new Example)->get();


Интерфейс подразумевает, что ты сразу знаешь, что нужно реализовать. К тому же класс может реализовывать несколько интерфейсов, но в определенный момент может потребоваться только знать, что имеется реализация конкретного интерфейса .

interface ExampleInterface{
public method();

public otherMethod();
}

interface OtherInterface{

}


class Example implements ExampleInterface, OtherInterface
{
public $property;

public function method()
{
if($this->property == 2){
$this->otherMethod();
}
}


public function otherMethod()
{

}
}


class SomeClass
{
public function __construct(ExampleInterface $example){

}
}


class OtherClass
{
public function __construct(OtherInterface $example){

}
}


$example = new Example();
$someClass = new SomeClass($example);
$otherClass = new OtherClass($example);


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.