![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() PHP код:
Похоже не знаю самого элементарного, объясните по русски что делает это строка кода. p.s. XMLHTTP содержит в себе код, полученный при get запросе к rss-ленте. |
#2
|
|||
|
|||
![]() Операция as позволяет трактовать родительский класс (интерфейс) как один из его потомков. В данном случае XMLHTTP.responseXML приводится к базовому интерфейсу (IUnknown для иерархии интерфейсов играет ту же роль, что и TObject для иерархии классов). Затем операция as IXMLDOMDocument заставляет компилятор трактовать интерфейс типа IUnknown как один из его потомков - IXMLDOMDocument, именно этот тип имеент интерфейс xmldomdocument.
|
#3
|
|||
|
|||
![]() Пожалуйста, объясните еще более русским языком.
|
#4
|
|||
|
|||
![]() Тов. Раскольников. Учите матчасть. Для интерфейсов операция as есть ни что иное как вызов QueryInterface.
Теперь по сути. В данном куске кода производится получение интерфейса IXMLDOMDocument (ссылки на объект с определенным интерфейсом, то бишь набором методов). Возможно, в интерфейсе по умолчанию объекта XMLHTTP.responseXML недоступны методы, позволяющие получить другой интерфейс. Но т.к. любой интерфейс по сути наследник IUnknown (тут не совсем так, но для понимания это не принципиально), то для корректного вызова производится принудительное преобразование интерфейса к IUnknown. |
#5
|
||||
|
||||
![]() следующие 2 строки кода эквивалентны:
Код:
XMLDOMDocument:=XMLHttpRequest.responseXML as IXMLDOMDocument; XMLHttpRequest.responseXML.QueryInterface(IXMLDOMDocument, XMLDOMDocument); и Код:
XMLHttpRequest:=CreateComObject(CLASS_XMLHTTPRequest) as IXMLHttpRequest; CreateComObject(CLASS_XMLHTTPRequest).QueryInterface(IXMLHttpRequest, XMLHttpRequest); код можно чуть упростить: Код:
var XMLHttpRequest: IXMLHttpRequest; XMLDOMDocument: IXMLDOMDocument; begin XMLHttpRequest:=CreateComObject(CLASS_XMLHTTPRequest) as IXMLHttpRequest; XMLHttpRequest.open('GET', 'http://www.delphisources.ru/forum/external_mod.php?type=RSS2', False, '', ''); XMLHttpRequest.send(''); if XMLHttpRequest.status=200 then begin XMLDOMDocument:=XMLHttpRequest.responseXML as IXMLDOMDocument; // XMLHttpRequest.responseXML.QueryInterface(IXMLDOMDocument, XMLDOMDocument); end; end; Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 10.05.2011 в 09:12. |