这是一个经常被提出的问题,并且它很容易把人们带入争论Linux还是Windows的歧途。这样的争论事实上反映出了对于相互竞争的Web开发技术要进行并行分析是多么困难的一件事情,而这一难度同时因为开发人员对任何可比较操作系统的不同意见而大大增加。

    所以与其继续参与到这样的争论中,我们还不如来看看每一项技术对于特定Web开发以及运行环境所表现出的优势。尽管ASP和PHP的相似程度大于其中任意一种与ASP.NET的相似程度,我们还是要讨论ASP.NET。原因是开发人员常常将其与ASP相混淆,并且在微软的努力下ASP.NET的确会在将来完全取代ASP。

基本理论——特点概述
PHP——超文本预处理器(Hypertext Pre-processor)
PHP是开放源代码服务器端的脚本语言,在语法上同C语言非常类似。尽管最初是被设计用于基于Linux的Apache Web 服务器系统,现在的PHP已经被移植到了任何操作系统并兼容任何标准Web服务器软件。由此也可以得出PHP的三大主要优势。首先它是跨平台的技术,因此PHP应用程序可以被方便的移植——当然这还要取决于诸如厂商特定数据库等需要集成的额外组件。这样的可移植性还带来了另一方面的优势,即绝大部分的Web主机提供商都会支持PHP,因此根据需要更改主机将会非常方便。

第二点,由于PHP同C编程语言有很多相似之处,对于熟悉相关语法的开发人员来说,PHP则非常容易上手——这种语法同样在Java、JavaScript以及Perl中得到应用。第三,由于是开放源代码产品,PHP将继续快速发展,更为重要的是相关漏洞补丁将免费的定期植入到核心库中。

此外,在一些特定的编程需求下,PHP对于开发人员显示出了更为诱人的吸引力。首先,PHP有内建库支持对于图片及PDF文档的直接创建和相关操作。这意味着当一个应用程序调用包含有anti-aliased类型文本的动态创建菜单图像,或者是需要导出Acrobat格式页面时,PHP都将是解决此类问题的理想技术。尽管这些功能在理论上也可以通过其他与PHP相竞争的技术获得,但往往其他技术需要安装第三方自定义组件才能实现。

另一点使得PHP成为编写服务器脚本最佳选择的是在处理连接mySOL或者Postgres数据库一类的问题时PHP的良好表现。尽管对于mySOL或者Postgres数据库的访问可以通过ASP技术借助ODBC连接来实现,但这常常需要系统管理员进行额外的配置。幸运的是,这点限制在ASP.NET中得到了改正,当需要建立类似于使用MS SQL Server的直接数据库连接时可以通过mySQL提供数据。

ASP——动态服务页面(Active Server Pages)
微软将ASP引入Windows NT Server 4并将其作为IIS Web服务器下的动态Web应用程序的默认使用平台。由于它使用VBScript(Visual Basic语言的一个分支),ASP立即被熟悉Microsoft IDE——Visual Studio编程的开发人员所追捧。随着脚本语言的不断发展,研究人员对ASP并没有引入太多功能使之加入到技术竞争的行列。因此,在PHP中可以看到的诸如图像操作等功能没有集成到ASP中。但开发人员仍然可以通过DLL文件的形式编写(或者安装)第三方COM对象来完成类似的工作。在服务器自身允许的情况下,通过这种方式可以编写代码来完成任何动作。当然,造成的缺陷是这将导致为了配置这些服务开发人员不得不与桌面系统进行交互——对于Web开发人员来说这项功能并不是必须的。

ASP的优势是在企业环境中微软服务器几乎无处不在。此外,MS SQL Server同样具有广泛的市场,并且能很好的支持ASP(这并不会让人感到惊奇)。尽管事实上通过ODBC可以兼容任何数据来源,但SQL Server以及文件DSN访问(file DSN access)可以在代码一级得到实现。

ASP.NET
是选择ASP还是PHP的争论正在随着.NET的崛起而越来越显得多余。的确,过去长达数年的争论将随着是选择Java还是.NET技术(或是两者)答案的揭晓而终结。ASP以及ASP.NET的唯一联系是二者都使用VBScript。而单独就.NET而言,它可以使用VBScript以及其他大约20种语言。

对于ASP以及PHP来说,将ASP.NET看作是另外一种语言的原因是它运行在完全不同的构架之上。前者是翻译脚本语言,而.NET则是经过编译的framework。这就意味着首先Web页面的运行速度将会有极大提高。同时,源代码更加安全且更为健壮。此外,ASP.NET给Web编程带来了新的理念——即“code-behind页面”的思想。按照code-behind思想,每一个HTML页面都是由自身经过编译的程序化指令进行驱动。因此,HTML——或称之为表现层——很大程度上脱离了应用程序的商业逻辑。尽管这样的分离也可以通过PHP和ASP来实现,但这并非同ASP.NET一样属于自身技术的主要部分。

ASP.NET的另一好处是它完整的集成了对XML以及Web服务的各种支持。对.NET而言可以使用非常广泛的安全以及密码系统库,这对于金融机构和企业数据应用程序尤为有用。就缺陷而言,即使是具备丰富经验的开发人员也会发现使用.NET可能把自己搞糊涂。不考虑开发者对于所使用的编程语言的熟悉程度,对于Web开发人员来说,在程序范例方面难度的大幅提升可能会成为他们融入ASP.NET的主要障碍。对ASP.NET应用程序来说主机同样是个问题,ASP.NET并未同ASP或者PHP一样获得了主机提供商的广泛支持,无法在同一级别上展开竞争。

实践——语言比较
变量声明

 
在VBScript中(ASP和ASP.NET都使用VBScript),在使用变量之前并不一定要对其进行声明,尽管技术文档通常建议这么做。使用Option Explicit声明,开发人员可以通过程序强制进行变量声明。在PHP中,变量可以被声明,尽管没有办法强制开发人员做到这点。的确,在使用之前变量都自动进行声明。PHP变量的优点在于变量可以被设置成为其他变量的引用(references),而在VBScript中变量只能通过值来定义。


<%

' VBScript Example

Option Explicit

myVar = 1

myOtherVar = myVar

myVar = 2

 

' myResult will be 3

myResult = myVar myOtherVar

%>

 

<?

// PHP Example

$myVar = 1;

'Use the ampersand to make a reference

$myOtherVar = &$myVar;

$myVar = 2;

// $myResult will be 4

$myResult = $myVar $myOtherVar;

?>


变量收集
在PHP以及ASP中使用表单以及query string变量的方法非常相似。有很多办法可以访问表单以及query string变量的集合,例如通过name或者将其作为数组。在ASP.NET中情况则有很多不同,尤其是对于表单域。不同于盲目的寻找提交过的表单变量,code-behind可以对HTML页面中的每一个表单域了如指掌,并可以按照任何已知事件的执行为条件触发对这些表单域的值进行检查。其中一个事件是“postback”,当表单被用户提交时此事件被触发。其他的事件可以是客户端的程序,并且可以通过JavaScript来触发。在ASP.NET中,二者没有性质上的区别。

 
<%

' ASP Example

myFormVal = request.form("myInputField")

myQSval = request.querystring("myQSitem")

myVal = request.item("myFormOrQSitem")

%>

 

<?

// PHP 4.1 Example

$myFormVal = $_POST['myInputField'];

$myQSval = $_REQUEST['myQSitem'];

 

// PHP 3 Example

$myFormVal = $HTTP_POST_VARS['myInputField'];

 

// If register_globals = on

$myVal = $myFormOrQSitem;

?>

 

<!-- ASP.NET example -->

<html>

<script language="VB" runat=server>

Sub SubmitBtn_Click(Sender As Object, E As EventArgs)

Message.Text = "Hello " & Name.Text

End Sub

</script>

<body>

<form action="action.aspx" method="post" runat="server">

Name: <asp:textbox id="Name" runat="server"/>

<asp:button text="OK" OnClick="SubmitBtn_Click"

runat="server"/>

<asp:label id="Message" runat="server"/>

</form>

</body>

</html>


字符串连接(String Concatenation)
 PHP似乎对此问题给予了足够的重视,它允许将变量插入到字符串中而无需考虑通常的串连(Concatenation)问题。ASP.NET则把整个过程弄得比较麻烦,需要借助其StringBuilder类,但由此ASP.NET的运行速度也会快很多。

 
<?

// PHP Example

$link = mysql_connect("host", "user", "password")or die("mysql_error());

mysql_select_db("database") or die("Could not select database");

$query = "SELECT * FROM Table";

$result = mysql_query($query) or die(mysql_error());

 

while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

foreach ($line as $col_value) {

//do something

}

}

?>

连接数据库
对于数据库的连接问题,每种技术都表现出了各自突出的规范性。首先,每种情况都要建立到数据库的连接。对于PHP,在建立之后选择数据库(对于ASP以及ASP.NET则将在连接阶段完成)。随后将建立一个询问,并将其传送给数据库,由此可能产生也可能不会产生一条返回记录。

 
由于在本质上ASP.NET更为以对象为导向,并且支持复杂的错误处理(error handling),因此无论是相对于PHP还是ASP,在完成简单任务方面ASP.NET可能会需要编写更多的代码。但在优势方面,ASP.NET完成显示数据功能所需要的代码则大大少于PHP以及ASP——尤其如果使用内建的datagrid控制来自动创建HTML输出。

<%

'ASP Example

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.Open "Driver={SQL Server};Server=MyServerName;" & _

"Database=myDatabaseName;Uid=;Pwd="

 

const strSQL = "SELECT * FROM Table" Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.OpenstrSQL, objConn

Do While Not objRS.EOF

'do something

objRS.MoveNext

Loop

%>

 

' ASP.NET Example

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.SqlClient" %>

 

<html>

<script language="VB" runat="server">

Sub Page_Load(Sender As Object, E As EventArgs)

Dim MyConn As SqlConnection = New SqlConnection("server=(local). . . ")

Dim MyComm As SqlCommand = New SqlCommand("select * from Table", MyConn)

MyConn.Open()

Dim dr As SqlDataReader = MyComm.ExecuteReader()

MyDataGrid.DataSource = dr

MyDataGrid.DataBind()

MyConn.Close()

End Sub

</script>

<body>

<ASP:DataGrid id="MyDataGrid" runat="server"

Width="600"

BackColor="#FFFFFF"

BorderColor="#000000"

ShowFooter="false"

CellPadding=2

CellSpacing="0"

Font-Name="Verdana"

Font-Size="8pt"

HeaderStyle-BackColor="#EEEEEE"

EnableViewState="false"

/>

</body>

</html>

结论

选择ASP、PHP还是ASP.NET将最终取决于应用程序的需要,以及运行程序的系统环境。开发人员对于相似编程语言或范例的熟悉程度同样可以作为选择的因素。记住没有完美的方法和个人实际情况可以表明哪种技术是最佳选择。比如,使用ASP.NET为一个Windows服务器创建一个单页面的表单邮件应用程序似乎有些大材小用,但对于ASP来说这是极佳的应用环境。如果一个站点需要同Linux Apache服务器上的mySQL数据库连接,那么使用ASP或者ASP.NET则会显得力不从心。如果能够提前详细考虑用户的个人要求,那么开发人员在这些相互竞争的技术中进行选择的过程则已成功了一半。

动态网站web开发 PHP、ASP还是ASP.NET的更多相关文章

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  3. Html5实现首页动态视频背景的示例代码

    这篇文章主要介绍了Html5实现首页动态视频背景的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. ios – 在Swift中动态创建uiviewcontroller

    我想动态创建UIViewController而不创建类或使用Mainstoryboard.我希望它以编程方式发生.这可能吗?

  5. 使用iOS故事板动态调整UILabel的高度

    我有一个标签,它是使用iOSStoryboard布局创建的.但是,标签的内容是动态的,可以在运行时更改.如何确保根据标签中的内容调整标签的高度.我试过了:将行数设置为0设置编辑器–>适合内容的大小.但它们不起作用.标签中的文本仅以单行打印,因此某些文本不会出现在屏幕上.任何帮助将受到高度赞赏.解决方法试试这种方式你的标签应该是0的行数给标签赋予高度约束并选择高度约束然后设置大于等于,它将根据内容自动调整高度

  6. ios – 如何以编程方式动态地对UIButton的背景图像进行着色?

    我正在开发一个应用程序–或者更确切地说是一些可重用的“框架”,我很乐意在它工作时分享它.在此应用程序中,用户应该能够从颜色主题列表中进行选择.因此,应用程序必须能够以某种相当动态的方式对其UI元素进行着色.对于按钮,所有着色都不起作用.必须在此处提供正确着色的背景图像.但是为每个人准备一套背景图像只是第二好的.它不够动态和灵活.最后,解决方案可能归结为为所选和正常状态提供一个单色(灰色)梯度图像,

  7. ios – Firebase动态链接中的customURLScheme是什么?

    在documentation中它说要将以下行添加到我的AppDelegate.swift:根据我的理解,这应该是您在info.plist中添加的相同链接.但是,我很困惑为什么在quickstart-iosrepo他们决定将其等同于“dlscheme”.任何人都可以帮我理解这个方案究竟是什么?

  8. ios – 在动态构建的分段控件的导航栏中自动调整大小

    控制器将UISegmentedControl添加到导航栏.分段控件添加到控制器的viewDidLoad方法的导航栏中,但实际的段是在调用viewDidLoad后动态创建的.显示视图时,我无法自动调整分段大小.他们都被挤压,likeinthispost,虽然这里的决议不适用.如果在将分段控件添加到导航栏的右侧项目之前添加了段,则会自动调整它们的大小并在显示视图时看起来很好.这是我的代码的精简版本,如下所示.我错过了什么?

  9. Autolayout iOS 6动态表格单元格高度

    我有UITableviewCell子类.在这个单元格中,我有2个标签和一个显示评级星的视图.我想要lbl评论的动态高度来适应所有的文本.它应该扩大&根据评论的长度收缩高度.我已经实现了这一点,但没有AutoLayout如下现在我使用AutoLayout功能.如何使用Autolayout实现这一点?

  10. 动态模拟iOS动态类型系统文字大小(UIContentSizeCategory)

    解决方法多么尴尬!

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部