深爱那片海 发表于 2015-2-4 00:28:02

PHP教程之PHP 与 ASP.NET正面比武(一)

HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。asp.net   现在当提到 Web 开辟时,您有很多选择。这些办法中很多都触及到预处置 ― 即,使用特定的标志将代码嵌入到 HTML 页面中,这些标志告知预处置器,它们包括代码,而且应对它们作出处置。与 CGI 十分类似,这些代码在办事器上运转,并前往一些内容,这些内容体现为发还给阅读器的了局 HTML 页面的局部外不雅。开放源代码剧本言语 PHP 和 Microsoft 的 ASP.NET 框架中的言语都属于这类类型;JavaServer Pages (JSP) 和 Perl/Mason 也以这类体例运转。

在本文中,我将重点讲述 PHP ― Oracle 已选择兼并到其产物中的手艺 ― 和 ASP.NET。我将概述二者的各类优势和弱点,并侧重会商那些将匡助您决意开辟项目应选择哪一种手艺的要素。有良多要素需求思索,分歧的项目能够诉诸于分歧的手艺。总之,您将看到在价钱、速度和效力、平安性、跨平台撑持等方面的逐项对照,和开放源代码处理计划的优势。

甚么是 ASP.NET?

ASP 最新的版本 ASP.NET 其实不完整与 ASP 初期的版本后向兼容,由于该软件停止了完整重写。初期的 ASP 手艺实践上与 PHP 的配合的地方比与 ASP.NET 的配合的地方多很多,ASP.NET 是用于构建 Web 使用法式的一个完全的框架。这个模子的次要特征之一是选择编程言语的天真性。ASP.NET 可使用剧本言语(如 VBScript、JScript、Perlscript 和 Python)和编译言语(如 VB、C#、C、Cobol、Smalltalk 和 Lisp)。新框架利用通用言语运转情况 (CLR);先将您言语的源代码编译成 Microsoft 两头言语代码,然后 CLR 履行这些代码。

这个框架还供应真实的面向对象编程 (OOP),并撑持真实的承继、多态和封装。.NET 类库依据特定的义务(例如,利用 XML 或图象处置)组织成可承继的类。

除编程言语和办法以外,数据库会见也是要侧重关怀的一个要素。当您用 ASP.NET 编程时,可以用 ODBC 来集成数据库;ODBC 供应了一组分歧的挪用函数来会见您的方针数据库。

优势和弱点

ASP.NET 的优势很分明在于它简约的设计和实行。这是面向对象的编程人员的妄想:言语天真,并撑持庞杂的面向对象特征。在这类意义下,它真正可以与编程人员现有的妙技停止互操作。

ASP.NET 的另外一个优势是其开辟情况。例如,开辟人员可使用 WebMatrix(一个社区撑持的东西)、Visual Studio .NET 或各类 Borland 东西(如 Delphi 和 C++ Builder)。例如,Visual Studio 答应设置断点、跟踪代码段和检查挪用仓库。总而言之,它是一个庞杂的调试情况。很多其他第三方的 ASP.NET IDE 处理计划也将必定呈现。

但您失掉了健旺性,就将以丧失效力为价值。ASP.NET 在内存利用和履行工夫方面消耗十分大,这大局部归因于较长的代码途径。对基于 Web 的使用法式,这些局限多是一个严重的成绩,由于在 Web 上,您的使用法式能够扩大为每秒不计其数的用户。内存利用率还能够成为 Web 办事器上的一个成绩。

甚么是 PHP?

PHP 是基于预处置 HTML 页面模子的一种剧本言语。当 Web 办事器中的 PHP 预处置器发明像上面如许的 PHP 言语标志时,将挪用 PHP 引擎来履行该代码:

<?php
some code here
?>



任何利用过号令式编程言语的编程人员城市对 PHP 十分熟习;您会发明它与 Perl、C 和 Java 在语法上的类似处。严厉来说,Java 是一种号令式编程言语,但它也使用了面向对象的布局和概念。PHP 在合适的时分自创了这类布局,但它不是一种地道的 OOP 言语。

在下面对 ASP.NET 的会商中,我提到了 ODBC 驱动法式,和在思索数据库笼统的情形下若何构建使用法式。在 PHP 中,您也能够利用 ODBC 与数据库对话,因而您已有了一系列撑持的数据库可供选择。也有 MySQL、Oracle 和 Postgres 的原生驱动法式。另外,假如要利用 Oracle,则有一个特别的 OCI8 库将供应对 Oracle 更多会见功效,从而答应您利用诸如 LOB、BLOB、CLOB 和 BFILE 之类的特征。

这时候您能够会问“为何与数据库相干的材料库被称为 PHP 的特征?”数据库笼统或自力性是您在想法构建利用多种数据库或需求在数据库间移植(例如,从开辟到投产时的移植)的使用法式时所要思索的一个要素。而这些的确是应当关怀和思索的。

但正如 Tom Kyte 在他的旧书 ― Effective Oracle by Design (Oracle 出书社) ― 中指出的那样,数据库相干性将成为您真实的方针,由于这将使您在该手艺中的投资最大化。假如您对 Oracle 停止普通的会见 ― 不管经由过程 ODBC 或 Perl 的 DBI 库,那末您将没法利用其他数据库所不具有的特征。另外,优化查询在各个数据库中各不不异。

Zend Technologies 是一家贸易软件公司,它对 PHP 作出了严重奉献。它创立了一个称为 Zend Studio 的贸易开辟情况,这个情况包括了一个庞杂的调试器、一个监测器和其他特征。该公司还构建了收费的 Zend Optimizer,它与 Zend Encoder 联合利用来编译 PHP 代码,以提拔功能。还有其他贸易产物,如 Zend Performance Suite,它可以缓存预编译的 PHP 页面,从而进一步明显提拔整体功能。

优势和弱点

到测试版 4 为止,PHP 5 依然有一些弱点,包含短少异常和基于事务的毛病处置例程 ― 它们可以中止正常的法式流,并将代码跳转到一个特别的毛病处置局部。Java 也供应了用于毛病处置的异常,而 C++ 经由过程 try、catch 和 throw 语法供应异常处置。固然,您依然可以在 PHP 中办理毛病,但其布局不是尺度化的,因此使得编程人员必需利用本人的东西来决意履行毛病处置的体例,这将招致更低的分歧性并常常招致推倒重来。

另外一个弱点是 PHP 的函数名是不辨别巨细写的。固然这不是一个严重的弱点,但有些法式员能够会感觉这一特征很厌恶。

不外,我切实其实对 PHP 的对象模子心存疑虑。PHP 不是专门设计为一种面向对象的言语。这些特征中的一局部是后来添加的 ― 虽然注重了坚持与 PHP 3 的后向兼容性,因而两种模子的特征都留有一些。实践上,在 PHP 5 中这些弱点中的很多都失掉懂得决。请留意存眷。

PHP 在一些范畴中短少甚么,它就会在善于的范畴中敏捷地填补甚么。价钱公道,因而您不需求忧虑允许成绩。它也是开放源代码的,因而全部社区将亲切存眷开辟进程:发明毛病并将其修复。假如有一个特征您不喜好,那末您可以修正代码。另外,PHP 可与 Apache 天然联合:它可以作为一个模块编译,或直接编译成 Apache 二进制文件。

但在 Apache 上运转意味着,使用 PHP,您可以使用您已在恣意办事器投资,这是由于 Apache 可以运转在 Windows、Linux、Solaris 和各类其他 Unix 平台上。另外,利用具有 Apache 的跟踪纪录的 web 办事器意味着平安功能够坚持在最高的优先级上。最初,PHP 具有更小的代码途径,这意味着更少的剖析和履行 PHP 页面办事器端代码,这将带来更高效的内存和利用率和更快的运转。

在 PHP 5 中新增了哪些特征?

PHP 5 的第 4 个测试版在 2003 年 12 月底推出,更改日记清晰地显示已发明很多毛病并已将其消弭。固然它仍在停止测试,但它的一切新特征和前进都的确值得存眷。

PHP 5 的次要新成绩在于它的异常处置和一个新对象,这个新对象引入的特征付与了 PHP 真实的 OOP。异常处置无疑是 PHP 4 中最明显的缺憾之一,而 PHP 5 对异常处置的引入无疑是一个成熟的标记。异常处置意味着您在您的软件中具有了依据言语界说的和尺度化的毛病处置办法。只需利用 try、catch 和 throw 办法,您的 PHP 代码就变得加倍健旺和简约。

<?php

class blue {

function openFile ($inFile) {
if (file_exists ($inFile)) {
# code to open the file here
} else {
throw new Exception
("Cannot open file:$inFile");
}
}
}

$blueObj = new blue ();

try {
$blueObj->openFile ('/home/shull/file.txt');

} catch (Exception $myException) {
echo $myException->getMessage ();

# rest of exception handling code here
}

# rest of blue methods here

?>



新的对象模子为用 PHP 编写的法式带来很多积极的影响。在 PHP 4 中,当把将一个对象传递给函数或办法时,是经由过程值来传递的 ― 除非您另行显式告诉 PHP。这个进程意味着必需复制对象的一个正本(内存中的一切数据布局)。这个步调利用内存,使得会见变慢和堵塞。而在 PHP 5 中,凡是经由过程援用传递对象。

PHP 5 中新的面向对象的特征(包含机关器和析构器)值得存眷。与 C++ 和 Java 不异,它们供应了一种尺度办法,即经由过程一个机关器办法来创立对象、分派内存和履行任何须要的设置,并经由过程一个析构器办法来履行清算。

PHP 5 还引入了对类中办法和变量的更精密掌握。在 PHP 4,一切都是私有的:您可以从类外或在承继类中会见您类中的变量。在 PHP 5 中,您依然可使变量或办法为私有,但您也能够使它们为公有,以使得只能在类自己中利用它们。还可以将它们回护起来,也就是说,可以在类内或在子类中检查办法和变量。

另外,PHP 5 引进了类型提醒或更好的类型反省。当您将一个对象传递给一个例程时,PHP 可以反省它是不是是准确的类型,并在反省掉败时发生类型不婚配毛病。

因为还有其他特征(如静态办法和变量和笼统类),因而请务必检查文档,以获得具体信息。

(未完待续)
在相册系统的开发上,因为采用的是团队分工合作方式,更让我明白了在一个团队之中,团队成员之间的交流沟通的重要性,如果没有很好的沟通交流,成员之间的任务没有分配好。

飘灵儿 发表于 2015-2-4 13:10:14

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

若天明 发表于 2015-2-7 23:44:05

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

山那边是海 发表于 2015-2-10 04:01:54

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

变相怪杰 发表于 2015-2-15 20:36:12

兴趣是最好的老师,百度是最好的词典。

再见西城 发表于 2015-2-26 20:51:41

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

飘飘悠悠 发表于 2015-2-28 18:48:53

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

兰色精灵 发表于 2015-3-1 12:31:30

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

不帅 发表于 2015-3-3 03:15:40

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

活着的死人 发表于 2015-3-9 07:57:43

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

简单生活 发表于 2015-3-16 21:04:33

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

爱飞 发表于 2015-3-23 00:59:05

本文当是我的笔记啦,遇到的问题随时填充

谁可相欹 发表于 2015-3-24 19:27:34

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

愤怒的大鸟 发表于 2015-4-4 17:52:20

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

分手快乐 发表于 2015-4-6 13:49:51

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

冷月葬花魂 发表于 2015-4-16 04:35:11

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

乐观 发表于 2015-4-17 14:07:22

Ps:以上纯属原创,如有雷同,纯属巧合

再现理想 发表于 2015-4-21 23:44:36

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

金色的骷髅 发表于 2015-4-25 11:03:03

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

莫相离 发表于 2015-4-27 22:22:41

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
页: [1] 2
查看完整版本: PHP教程之PHP 与 ASP.NET正面比武(一)