| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > PHP, первые шаги... |
| Автор: Vit 16.9.2005, 16:06 |
| Начал немного разбираться, пока пытаюсь понять логику построения языка. 1. Поддерживает ли PHP множественное наследование, если да то как? 2. Как объявить абстрактный метод? 3. Как перекрыть метод в родительском классе? 4. Как обратится к методу класса-предка? 5. Как определить события? 6. Как объявить свойство,работа с которым происходит через приватные методы? 7. Есть ли возможность работать с ссылками? 8. Процедура должна быть объявлена обязательно до места её использования или в любом месте? Если обязательно "до", то как сделать forward declaration. 9. Реализованные ли механизмы RTTI? Другими словами можно ли достучаться до дескрипторов типов, например есть класс A, я могу узнать есть ли у него метод B или нет? 10. Есть ли в PHP возможность удалённых вызовов? Прошу особо не пинать ногами, только сел за PHP - опыта никакого, пытаюсь просто понять как эта штука работает и как её применять... |
| Автор: Sardar 16.9.2005, 17:11 | ||||||||||||||||||
Нeт, но поддерживает интерфейсы как Java. Xотя не нужно подходить с жёсткими мерками к скриптовым языкам, то что делаеться громоздко в C#/Java, в PHP5 делаеться гораздо проще. Пишем магический метод __call - который будет перехватывать все вызовы не существующих методов, таким образом можно собрать любой динамический интерфейс. Переменные естественно могут в любой момент создасться новые.
Всё как в Java, пишем abstract function bla($arg, &$arg2, SomeClass $arg3, ...); Для переопределения также не требуються никакие ключевые слова, как и в Java.
Только обьект потомок может обратиться к parent::method, для внешнего мира никак.
А зачем они в PHP? В C# события - это лишь немного скрытой работы компилятора, создаються списки слушателей и т.д. В PHP также как и в Java, всё в ручную.
Есть магические __get и __set, через которые организуем работу с несуществующими полями, существующие публичные будут доступны на прямую. Также можно реализовать интерфейс ArrayAccess и получить возможность работать с обьектом как с массивом, передавая как числовые так и строковые ключи. Очень удобно.
Да, но ограниченно. Передавать по ссылке нельзя ибо не логично, интерпретатор будет выкидывать предупреждение(которое можно отключить). В методе можно обьявить параметр как ссылку, тогда получать будет ссылку, а не значение. Обьекты всегда передаються как ссылки, массивы не обьекты, передаються как копии.
PHP это интерпретируемый язык, ошибка будет в момент обращения к функции/методу. Если такой метод своевременно появиться, то всё будет работать. НО! это грязная практика, приводящая ИМXО к труднонаходимым ошибкам. Деклараций наперёд прототипов функций/методов нет.
Да. PHP это скриптовый язык, очень похож на Java, хотя даёт гораздо больше свободы из-за своей скриптовой сущсности.
Есть XML RPC/SOAP библиотеки. Идут как PECL расширения. Всё сказанное относиться к PHP5. При изучении главное помнить, что это скриптовый язык, т.е. можно создать функцию в любой момент(лямбда функция), сделать почти любые "магические" фичи(смотрим методы __* и нативные интерфейсы Zend 2), вообще свобода ограничиваеться лишь воображением, а не языком |
| Автор: Vit 16.9.2005, 20:22 | ||||||
Т.е. передать массив как ссылку я не могу?
Ну а как реализуется что-то типа такого:
|
| Автор: Mayk 16.9.2005, 20:28 | ||||
Точно так, как ты написал.
|
| Автор: Sardar 16.9.2005, 22:44 | ||||
Повторяю - единственное ограничение это твоё воображение и желание пробовать
Дефолтные значения для ссылок - фича PHP5. |