PHP был первым языком, с которого я начинал изучать программирование.
Спустя некоторое время я перешел на Java SE. Для создания сайтов я ее не использовал, использовал в Desktop-программировании.
Вернувшись на PHP, я понял, насколько же он несовершенен по сравнению с Java.
Я пробовал изучать строго объектно-ориентированные фреймворки, но работа с ними меня особо не впечатлила.
Я сформулировал небольшой список того, чего меня не устраивает в PHP:
- Отсутствие автозагрузки классов. В Java компилятор изначально "знает" о всех классах, а конструкция import используется лишь для разрешения доступа к пространству имен. В PHP же по умолчанию такого не предусмотрено вообще, а уровень удобства автозагрузчиков фреймворков оставляет желать лучшего.
- Отсутствие типизации переменных. В результате я никак не могу проверить, что именно мне передали в функцию. Способы, конечно, есть, но они неудобные. Более того, если в качестве типов аргументов функции я хоть могу указать класс, то с полями классов вообще беда, там никакой типизации нет.
- Отсутствие инициализации полей "на лету". То есть я могу сразу же полю присвоить строку или число, например, а вот вызывать конструктор и создать объект - уже нет.
Примечание:
Предположим, типы перемененных я еще смогу заменить обертками классов, однако тогда возникает следующая проблема - я не могу перегрузить конструктор, и тогда вместо
String s = "string" должен буду писать String s = new String("string").
Вдобавок и операции между этими классами перегрузить тоже невозможно. И как это поможет типизовать поля - тоже непонятно, максимум аргументы в функциях.
Далее, если в Java все классы наследуются от Object автоматически, здесь это надо будет прописывать вручную. Опять-таки, я стремлюсь сделать язык более удобным, а в результате получается куча дополнительных условий к программисту.
Примечание:
Вопрос в том, как подойти к реализации всего этого.
Я хочу сделать все, не изменяя исходники PHP, в виде фреймворка.
В "Примечании №1" я более подробно расписал проблемы, с которыми столкнулся.
Опыта работы в PHP у меня не так много, чтобы понять, как их решить.
Примечание:
> php.net/__autoload
__autoload() всего лишь автоматически вызывается интерпретатором, если класс не найден. На нее вешают загрузчик классов, но это никак не сам загрузчик.
>программист сам должен знать тип переменных
Есть принцип инкапсуляции, согласно которому программист не должен ничего знать о реализации функции и класса, с которыми он работает, он должен знать только ее интерфейс.
Я не знаю, как вам, а вот мне лично очень неудобно, когда в описании функции не указан явно тип входных данных.
> существует группа функций is_*:
Как раз пример неэффективного использования возможностей программиста: этим должен заниматься интерпретатор, а не программист.
И давайте не будем превращать это в холивар Java vs PHP. Меня интересует реализация, а не вопрос о том, стоит ли это реализовывать.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.