Вернувшись с конференции ReMix, я был под впечатлением презентации в которой показывалась быстрая работа php на IIS при помощи модуля FastCgi и взаимодействие php- страниц с Asp.net приложениями. И не так давно Thomas Petricek, интервью с которым можно послушать здесь начал разработку Phalanger - компилятора под .NET Framework для языка php. Phalanger позволяет разработкику получать доступ к .Net библиотекам и к платформе Silverlight 1.1(что для меня просто праздник :), что позволит писать расширенные php - приложения, разрабатывать web-сервисы, получать доступ к данным с помошью LINQ, разрабатывать RIA (Rich internet application) на платформе Silverlight, а не использовать граммосткий flash, ипользовать контролы Asp.net.Phalanger встраивается в Visual Studio 2008 и пхп - разбаротчик в скором времени может пользоваться всем функционалом Visual Studio, что, на мой взгляд, очень неплохо.
При написании приложения в Visual Studio для отделения разметки от программного кода используется Code Behind:
Листинг Default.aspx.php
<?
import namespace System;
import namespace System:::Data;
import namespace System:::Configuration;
import namespace System:::Web;
import namespace System:::Web:::Security;
import namespace System:::Web:::UI;
import namespace System:::Web:::UI:::WebControls;
import namespace System:::Web:::UI:::WebControls:::WebParts;
import namespace System:::Web:::UI:::HtmlControls;
partial class Download_aspx extends System:::Web:::UI:::Page {
function __construct() {
$this->Load->Add(new EventHandler(array($this, "Page_Load")));
}
function Page_Load($sender, $e) {
$this->MaintainScrollPositionOnPostBack = true;
if ($this->IsPostBack) return;
$page = Convert::ToInt32($this->Request->QueryString->get_Item("Page"));
if ($page >= 0) $this->FormView1->PageIndex = $page;
}
}
?>
Листинг Default.aspx:
<%@ Page Language="PHP" MasterPageFile="~/Default.master" Title="Your Name Here | Picture Details"
CodeFile="Details.aspx.php" Inherits="Details_aspx" %>
<asp:content id="Content1" contentplaceholderid="Main" runat="server">
<div class="shim solid"></div>
<div class="page" id="details">
<asp:formview id="FormView1" runat="server" datasourceid="ObjectDataSource1" cssclass="view"
borderstyle="none" borderwidth="0" CellPadding="0" cellspacing="0" EnableViewState="false" AllowPaging="true">
<itemtemplate>
<div class="buttonbar buttonbar-top">
<a href="Albums.aspx"><asp:image ID="Image1" runat="Server" skinid="gallery" /></a>
<asp:ImageButton ID="ImageButton9" Runat="server" CommandName="Page" CommandArgument="First" skinid="first"/>
<asp:ImageButton ID="ImageButton10" Runat="server" CommandName="Page" CommandArgument="Prev" skinid="prev"/>
<asp:ImageButton ID="ImageButton11" Runat="server" CommandName="Page" CommandArgument="Next" skinid="next"/>
<asp:ImageButton ID="ImageButton12" Runat="server" CommandName="Page" CommandArgument="Last" skinid="last"/>
</div>
<p><%# $this->Server->HtmlEncode($this->Eval("Caption")) %></p>
<table border="0" cellpadding="0" cellspacing="0" class="photo-frame">
<tr>
<td class="topx--"></td>
<td class="top-x-"></td>
<td class="top--x"></td>
</tr>
<tr>
<td class="midx--"></td>
<td><img src="Handler.ashx?PhotoID=<%# $this->Eval("PhotoID") %>&Size=L" class="photo_198" style="border:4px solid white" alt='Photo Number <%# $this->Eval("PhotoID") %>' /></a></td>
<td class="mid--x"></td>
</tr>
<tr>
<td class="botx--"></td>
<td class="bot-x-"></td>
<td class="bot--x"></td>
</tr>
</table>
<p><a href='Download.aspx?AlbumID=<%# $this->Eval("AlbumID") %>&Page=<%# $Container->DataItemIndex %>'>
<asp:image runat="Server" id="DownloadButton" AlternateText="download this photo" skinid="download" /></a></p>
<div class="buttonbar">
<a href="Albums.aspx"><asp:image ID="Image2" runat="Server" skinid="gallery" /></a>
<asp:ImageButton ID="ImageButton1" Runat="server" CommandName="Page" CommandArgument="First" skinid="first"/>
<asp:ImageButton ID="ImageButton2" Runat="server" CommandName="Page" CommandArgument="Prev" skinid="prev"/>
<asp:ImageButton ID="ImageButton3" Runat="server" CommandName="Page" CommandArgument="Next" skinid="next"/>
<asp:ImageButton ID="ImageButton4" Runat="server" CommandName="Page" CommandArgument="Last" skinid="last"/>
</div>
</itemtemplate>
</asp:formview>
</div>
<asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" TypeName="PhotoManager"
SelectMethod="GetPhotos">
<SelectParameters>
<asp:QueryStringParameter Name="AlbumID" Type="Int32" QueryStringField="AlbumID" DefaultValue="0"/>
</SelectParameters>
</asp:ObjectDataSource>
</asp:content>
З.Ы. Поскольку на данный момент php является самым популярным языком программирования для веб-рабработо, Microsoft ведет активную работу по полной поддержки языка php и активно сотрудничает с Zend. посмотрим что из этого получится...