PHPer初涉asp.net的心得体验及两者对比[1]

 更新时间:2016年11月25日 16:10  点击:1637



搞不搞PHP不是我说了算,是公司说了算

玩不玩.NET也不是我说了算,同样是公司说了算

先前没碰PHP之前,我是用ASP的,后来03年时ASP.net很流行哈,就开始留意这方面的东西,还从http://www.mycodes.net下载了一本什么黄金版来看了看,特此声明,仅仅只是看看,为啥,哈哈哈,机子太慢,跑不动VS啊,而且当时边上的人又没有一个会.net的,所以也只是停留在理论阶段,仅仅知道了有HTML控件,有Server控件,有DataGirl什么的

但后来换工作后,跑去搞PHP了,当时也是公司要求,没办法,哈哈哈,关于PHP的,我写过了篇了,这里就不罗嗦了哈~网址在这里http://www.111cn.net/31721/viewspace_12952.html~

当我换了第四家公司时,他们是搞.net的,但是刚好有一个项目客户指名道姓要用PHP(客户怎么会有这种要求,怪了,更怪的是他要求项目用PHP,但环境却是WINDOS,估计客户那边有人在后面不懂装懂瞎指挥吧),所以我就进来了

没有一点悬念,第一个程序就是helloword,呵呵

我发现PHP和ASP.net有很多相似之处。真的,非常相似

MVC分离

PHP用smarty,而asp.net用同名再加一个.cs文件来代替,好比default.aspx就必定会有一个default.asp.cs文件一样

只不过,PHP是这样(指出这个程序文件的模板是哪个)
$tpl->display("default.htm");

而asp.net是这样(在我眼里他是反过来了,居然由模板来声明程序文件是哪个)

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

那么到底真的是这样吗?我不知道,我在asp.net也是刚入门,留在以后见分晓哈~

类库调用(用PHP的说法)

php用的是include先包含文件进来,然后再new实例化

而asp.net呢,他是直接用
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

的方式,其实我觉得也一样,至于不用指明调用哪个文件,那是因为那些命名空间里面的功能全都是由MS自已开发的,不似PHP这样由大众来提供类库或是框架什么的

打个比喻,asp.net里面的类库(水平差,估且这么叫吧,我也不知道叫啥,)其实都是MS自已做的,所以就像一母同胎的兄弟,相互之间不用废话就能共同协同使用

而php里面的类库,由社区不同的大从人群去完成,就好像一堆陌生人一样的,include就好比先打个招呼告诉人家说,我在这里,然后再实例化再使用

至于.net中为什么已经声明用system为什么还要再声明用了sys.web

按照我的经验,system里面是没有具体实现某种功能的代吗的,具体实现某种功能的代码是由他的子类web及子子类ui之类完成了,他的存在仿佛是为了理顺某种关系

唉,要上班了,今天先写这么多,过两天有啥心得体会了再写吧

———————无敌分割线————————————————————————————————

对了,还有点小困惑想咨询一下大家

html文件为纯粹由HTML标签组成的,但是MS的aspx文件中,他把所有的html标签转换成了MS自已的HTML控件或是Server控件,aspx.cs为后台代码

如此一来当美工把HTML文件给我时, 我们知道PHP中提供了一个魔术常量(magic constant)__FILE__,用来指向当前执行的PHP脚本。但PHP没有直接提供该脚本所在目录的常量。也就是说如果我们要得到当前PHP脚本所在的目录,需要使用dirname()这个函数:

<?php

$dir = dirname(__FILE__);

?>

在PHP5.3中,增加了一个新的常量__DIR__,指向当前执行的PHP脚本所在的目录。

例如当前执行的PHP文件为 /www/website/index.php

则__FILE__等于''/www/website/index.php''

而__DIR__等于''/www/website''

现在我们要包含当前文件目录或子目录下的文件,可以直接使用:

<?php

require_once __DIR__ . ''/path/to/test.inc.php'';
?>




本文是一个系列的第一篇,目前想到的其他一些主题是:
  
   SQL注入问题
   事件模型
   AOP模型
   UI Framework的实现
   Template机制
  
  
   PHP沉思录
   工作模型
   PHP的工作模型非常特殊。从某种程度上说,PHP和ASP、ASP.NET、JSP/Servlet等流行的Web技术,有着本质上的区别。

   以Java为例,Java在Web应用领域,有两种技术:Java Servlet和JSP(Java Server Page)。Java Servlet是一种特殊类型的Java程序,它通过实现相关接口,处理Web服务器发送过来的请求,完成相应的工作。JSP在形式上是一种类似于PHP 的脚本,但是事实上,它最后也被编译成Servlet。

也就是说,在Java解决方案中,JSP和Servlet是作为独立的Java应用程序执行的,它们在初始化之后就驻留内存,通过特定的接口和 Web服务器通信,完成相应工作。除非被显式地重启,否则它们不会终止。因此,可以在JSP和Servlet中使用各种缓存技术,例如数据库连接池。

   ASP.NET的机制与此类似。至于ASP,虽然也是一种解释型语言,但是仍然提供了Application对象来存放应用程序级的全局变量,它依托于ASP解释器在IIS中驻留的进程,在整个应用程序的生命期有效。

   PHP却完全不是这样。作为一种纯解释型语言,PHP脚本在每次被解释时进行初始化,在解释完毕后终止运行。这种运行是互相独立的,每一次请求都会创建一个单独的进程或线程,来解释相应的页面文件。页面创建的变量和其他对象,都只在当前的页面内部可见,无法跨越页面访问旧电脑回收。

在终止运行后,页面中申请的、没有被代码显式释放的外部资源,包括内存、数据库连接、文件句柄、Socket连接等,都会被强行释放。
   也就是说,PHP无法在语言级别直接访问跨越页面的变量,也无法创建驻留内存的对象。见下例:
  
   <?php
   class StaticVarTester {
   public static $StaticVar = 0;
   }
  
   function TestStaticVar() {
   StaticVarTester :: $StaticVar += 1;
   echo "StaticVarTester :: StaticVar = " . StaticVarTester :: $StaticVar;
   }
  
   TestStaticVar();
   echo "<br/>";
   TestStaticVar();
   ?>
  
  在这个例子中,定义了一个名为StaticVarTester的类,它仅有一个公共的静态成员$StaticVar,并被初始化为0。然后,在 TestStaticVar()函数中,对StaticVarTester :: $StaticVar进行累加操作,并将它打印输出。
  熟悉Java或C++的开发者对这个例子应该并不陌生。$StaticVar作为StaticVarTester类的一个静态成员,只在类被装载时进行初始化,无论StaticVarTester类被实例化多少次,$StaticVar都只存在一个实例,而且不会被多次初始化。因此,当第一次调用 TestStaticVar()函数时,$StaticVar进行了累加操作,值为1,并被保存。第二次调用TestStaticVar()函数,$ StaticVar的值为2。
   打印出来的结果和我们预料的一样:
  
   StaticVarTester :: StaticVar = 1
   StaticVarTester :: StaticVar = 2
  
   但是,当浏览器刷新页面,再次执行这段代码时,不同的情况出现了。在Java或C++里面,$StaticVar的值会被保存并一直累加下去,我们将会看到如下的结果:
  
   StaticVarTester :: StaticVar = 3
   StaticVarTester :: StaticVar = 4
   …
  
   但是在PHP中,由于上文叙及的机制,当前页面每次都解释时,都会执行一次程序初始化和终止的过程。也就是说,每次访问时,StaticVarTester都会被重新装载,而下列这行语句
  
   public static $StaticVar = 0;
  
  也会被重复执行。当页面执行完成后,所有的内存空间都会被回收,$StaticVar这个变量(连同整个StaticVarTester类)也就不复存在。

 

 

Reinhold Weber 提出PHP程序员的40点陋习.(本E问只写了一部分内容,译者找到原版翻译,以下是完全版)



       1不写注释



       2不使用可以提高生产效率的IDE工具



       3不使用版本控制



       4不按照编程规范写代码



       5不使用统一的方法



       6编码前不去思考和计划



       7在执行sql前不执行编码和安全检测



       8不使用测试驱动开发



       9编码时不打开自动报错(error_reporting)



       10不使用一种好的调试工具



       11不重构你的代码(refactor)



       12不采用MVC这样的分层结构



       13不知道以下等等概念:KISS,DRY,MVC,OOP,REST



       14在函数或者类里直接用print或者echo输出东西而不是返回(return)



       15不使用也不去了解单元测试



       16返回HTMl而不是data,strings,objects等类型



       17糟糕的代码和配置参数(hard code messages and configuration parameters)



       18不优化sql查询



       19不使用__autoload



       20不支持自动错误操作(应该是智能纠错)



       21使用$_GET替代$_POST去进行危险的参数传递(记得这40条都是错误的东西)



       22不知道怎样使用正则表达式



       23从未听说过sql注入和跨站脚本(安全方面,应该了解下这两个东西的英文:sql injection,cross-site scripting)



       24不支持简单配置,传递参数给类的构造函数,set/get方法,定义常量



       25不能理解OOP的优缺点



       26无论要做的东西有多小,




BURLINGAME, Calif 消息: PHP脚本语言的简单性会令其在网络应用上比Java更易推广和普及,互联网溜览器的先驱Marc Andreessen在 Zend/PHP星期三的演讲中如此预言。

Andreessen (安德森)说:自从1995年,Sun Microsystems 开创并发布Java以来,Java获得了极大的成功,这主要是因为Java把它的语言优势更多的落实在程序员的应用方面,而不是放在机器上,这使得软件开发的难度明显降低。但是,Andreessen也提到,与从前相比,Java现在已经增加了很多并不令人喜欢的特性。

Java 在过去数年来一直比C和C++更易使用,直到最近变得复杂了。Andreessen提到,现在有人认为它甚至比C++还难学。(Java)简易性的年代已经过去了:“PHP现在正处在比Java更有利的环境态势中获得发展。”

这些看法或许不会被Java 的拥护者所认同 -- 他们中的大多数来自于由数百万 程序员和数百家公司组成的,掌控软件前途的Java 社团。

但即使在IBM,那些曾着力把Java 带进服务器以及以Java 为核心的WebSphere 服务器软件的高层人员,现在也看到了PHP的优势超越了Java 。

“简易性是它最大的特点。”  IBM正处发展中的IT集团的副总裁Rod Smith提到,PHP在一个报告会上引起了IBM的关注。 ”他们并不着力于增加语言特征去和其它的语言竞争,“ 而代之以 ”简单的方式,而不是很不幸的,我们在Java身上曾做过的方式。“

PHP是一个开源软件,它包括一个引擎用于简化调用PHP脚本的程序,和一个大的预建脚本库。(PHP)众多的发展都由Zend公司掌控,后者还出售PHP产品包,编程工具和服务。

狂热的程序员在电脑界并不新鲜,他们坚持要建立自己的产品作为基准平台。事实上,Microsoft有很多广受欢迎的,开发者易用的编程工具,它们的成功主要归功于Windows平台。

PHP已被广泛使用,目前已有大约2千2百万网页使用PHP,数量还在稳步增长。大约450个程序员有权威去审核软件的改进。主要使用PHP的企业包括Yahoo, Lufthansa 和 Deutsche Telekom''s T-Online.

PHP比Java的应用范围窄多了,(Java)不仅可用于Web服务器,而且还可以用于PC,手机,带芯片的支付卡等很多设施。Java其中的一些技术,如JSP,倒是像PHP一样处理同样的事情。

”Java 和 PHP是在同一竞争水平,(Java)现在领先 “ Eclipse 的总经理MikeMilinkovich在一个报告会上说。Eclipse是一个开源编程工具,长期支持Java,现在同时支持PHP。” 我期盼PHP在市场上能紧追猛赶(Java)。“

Java 和PHP之间也在相互靠拢。Oracle,作为一家同时售卖Java服务器软件和其自身数据库软件可同样用于Java或PHP的公司,也是那些在服务于 Java之余还致力于协助PHP的企业中的一员。Oracle产品战略副总裁KenJacobs在一个会议上讲,Java的223特性要求 “ 将帮助在Java社区和PHP社区之间搭建桥梁。”

即便是Andreessen,他刚协助发起一个叫Ning 的应用,用于在线交换图片,信息和其他内容,也知道Java的地位。

"我的新公司正设法把Java 和PHP整合起来。这需要巨大的投入。" 他谈到他们的技术决策。“我们系统的核心是Java做的。就像一个操作系统,像一个系统编程项目。在它上面有一个应用层 -- 实际上你看到的一切都是用PHP做的。”

PHP,就像Linux和Apache的开源项目一样,现在已经受到了电脑产业巨头的亲睐。 IBM和Oracle 正致力于让PHP应用从它们的数据库提取信息,他们的背书是非常重要的,zend CEO Doron Gerstel说。

"IBM和Oracle 支持它的事实--给了IT用户一个(巨大的)信心保证。巨头都支持它,那它一定是好东西 " Gerstel在一个报告会上说。

PHP在预期11月初推出(译者注:此文写于05年)的新版5.1里,将包括一个更快的引擎来处理PHP脚本,PHP的创造者和Zend 的共同奠基人Zeev Suraski说。还将包括一个底层的“数据抽象层”以便利于PHP和不同的数据库连接,一个高水平层用于与XML数据交换,后者产生和服务于Web 服务件(Web services)。

版本6,预期在2006年推出,将支持Unicode字符解码,(Unicode)支持广泛的字母,使系统的多国应用能更简易地实现
[!--infotagslink--]

相关文章

  • ASP.NET购物车实现过程详解

    这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • .NET Core下使用Kafka的方法步骤

    这篇文章主要介绍了.NET Core下使用Kafka的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • 在ASP.NET 2.0中操作数据之七十二:调试存储过程

    在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
  • Win10 IIS 安装.net 4.5的方法

    这篇文章主要介绍了Win10 IIS 安装及.net 4.5及Win10安装IIS并配置ASP.NET 4.0的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • 详解.NET Core 3.0 里新的JSON API

    这篇文章主要介绍了详解.NET Core 3.0 里新的JSON API,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • .net数据库操作框架SqlSugar的简单入门

    这篇文章主要介绍了.net数据库操作框架SqlSugar的简单入门,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下...2021-09-22
  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • 记一次EFCore类型转换错误及解决方案

    这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • .NET C#利用ZXing生成、识别二维码/条形码

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。这篇文章主要给大家介绍了.NET C#利用ZXing生成、识别二维码/条形码的方法,文中给出了详细的示例代码,有需要的朋友们可以参考借鉴。...2020-06-25
  • 详解ASP.NET Core 中基于工厂的中间件激活的实现方法

    这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15