Тут я узнал что в тайпхинтинге можно указывать обычные классы(не интерфейсы и не абстрактные классы). У меня сразу назрел вопрос - зачем тогда нужны абстрактные классы ? Если можно наследоваться от обычного класса и его же указывать как уточнение для аргумента(в который можно будет передать потомков). Мне как бы привычней работать с абстрактными классами, но описанная выше идея теперь не даёт покоя.
ну сами по себе понятия абстрактный класс и интерфейс уже должны тебе намекнуть о своем назначении. ты описываешь как будет выглядеть модель некоего объекта и определяешь как с ним взаимодействовать. но при это не реализуешь собственно никакой начинки - алгоритма. для этого тебе нужно будет унаследовать и реализовать. в случае с обычным классом - ты сразу описываешь всё необходимое, не оставляя никаких неопределенностей. и потом через потомков добавляешь или меняешь функционал. а еще есть трейты.
ну все эти классы вообще нахрен не нужны, только мешаются но чем больше кода, тем сложнее в нем становится разбираться и ориентироваться, для этого и придумали классы и все что с ними связано, так же как и с MVC, человек видя слово модели или контроллер уже как то понимает что там примерно увидит.
Ну почему же, абстрактные классы вроде как рассчитаны на какую-либо реализацию. Общую для потомков(уже обычных классов).
и да и нет. ты можешь предложить алгоритм а можешь оставить только намек на него. обычный класс этого не позволит сделать.
machetero, в абстрактном классе ты можешь создавать методы свойства как обычно. Но попытка создать его экземпляр приведет к ошибке.
В классическом ООП есть термин "виртуальный класс". Это вот то, о чем ты говоришь. Хотя в ПХП они не представлены в явном виде.