Это не будет популярным ответом, но все же ...
abstract
, interface
, private
и другие ключевые слова, заимствованные из Java, являются элементами Культовое программирование груза и не служит никакой реальной цели в PHP, за исключением того, что автор выглядит более «серьезным» и «профессиональным».
Объяснение: эти ключевые слова являются контрактами времени компиляции, которые не влияют накак ваша программа работает и предназначена только для помощи компилятору ... при условии, что она у вас есть.В скомпилированном языке, таком как Java или C #, вы физически не можете развернуть программу, которая нарушает контракт, например, не реализует метод abstract
.Вы просто не получаете это скомпилировано.Это хорошо, потому что вы можете исправить некоторые ошибки очень быстро, без тестирования и отладки.
PHP, напротив, не имеет компилятора и выполняет все проверки контрактов во время выполнения.Это плохо, потому что вам нужно тестировать и отлаживать, чтобы найти нарушения контракта вручную.Рассмотрим следующее:
class Abs {
abstract function implementMe();
}
if ($_GET['x'] == 'foo')
include "GoodClass.php";
if ($_GET['x'] == 'bar')
include "BadClass.php";
, где «BadClass» расширяет «Abs», но не реализует метод «ImpleMe».Этот сценарий может быть развернут и будет работать нормально, пока кто-нибудь не вызовет его с «? X = bar», а затем - bang!- ваша программа внезапно падает.Что еще хуже, это будет «фатальная» ошибка, так что вы даже не сможете справиться с этим разумным образом.
То есть abstract
и друзья не только бесполезны, но также довольно вредно в PHP.Они не только не помогают вам в поиске ошибок, но и являются потенциальным источником еще большего количества глюков.Держись подальше.