PHP5.3中新增的魔术常量__DIR__

 更新时间:2016年11月25日 16:10  点击:2036
我们知道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'';
?>

 


  草根出身的PHP语言挑战的对象是Java、.Net这样的大腕。
 
  Zeev这位30岁的以色列小伙子看起来一点也不像有权势的人物,可是他共同创始的PHP语言,却成为网络时代异军突起的一个传奇。最新的消息是,Sun公司已决定把免费公开Java源代码提上日程,而微软的脚本语言ASP.net也只得一直实行免费赠送。这个小个子PHP及其同伙Linux、Apache、MySQL掀起的开放源代码浪潮影响了整个Web世界,给程序编写及发布方式带来了革命性的变化。重要的是,PHP两不耽误,一边保持着开源的真谛,另一边则取得了商业上的成功。

  就在最近,北京写字楼PHP商业化公司Zend又获得了2000万美元的投资,投资人包括Intel Capital和SAP Ventures。IBM也将与Zend合作,把PHP引入到IBM的中级服务器平台,以支持访问DB2数据库,这笔交易价值数百万美元。而Zend的下一步很有可能是进行首次公开募股(IPO)。

  在今天,全球已有2000万个网站使用PHP,包括最流行的雅虎、Google、百度、YouTube、Digg,也包括像汉莎航空电子订票系统、德意志银行的网上银行、华尔街在线的金融信息发布系统,甚至军队系统这类五花八门和苛刻的环境。PHP究竟是怎样炼成的?

  源于草根

  作为目前全球最流行的网站应用软件编程语言,PHP的成长历程和Linux有异曲同工之妙。1994年,它由Rasmus Lerdorf最早创建,Lerdorf只是想记录自己的在线简历,后来许多人都向他要程序的拷贝。1995年6月,Lerdorf在加入了一些介绍文档之后,在Usenet新闻组发布出去HKRFP,这就成了最早的PHP 1.0。

  这期间,两位大学生Zeev Suraski和Andi Gutmans需要能做一个基于Web的软件项目,需要能很好地支持Linux,但当时的ASP并不完善,JSP又比较复杂,所以就选择了PHP。其后他们在工作中发现PHP还有些不足,便自愿加入PHP语言开发工作组,并重新编写了底层的解析引擎。1998年6月,有着历史意义的PHP 3.0发布,用户数开始飞涨。1999年,他们两人又创建了Zend公司,开发了Zend Engine,大大提高了PHP的性能。

  雅虎是PHP语言最早的使用者之一,随着雅虎的兴起,大量的站点开始学习雅虎背后的语言—PHP。此时,软件开始从传统模式向基于Web模式转变,几大势力一一长成:Linux操作系统、Apache网络服务器、MySQL服务器,以及以PHP语言为代表的“P”族语言(PHP、Perl、Python),一本德国计算机杂志把它们共同称为LAMP(明灯),也由此与J2EE架构(以Java为编程语言,Sun公司主导)、.Net架构(微软公司主导)形成了三足鼎立之势。在Evans Data公司的一份统计资料中,PHP使用者比Java及.Net的使用者稍有差距,但预计2007年的增长率将达37%,超过Java的16%和. Net的27%,这场草原上燃烧的星火正越来越旺。

  从革命者到务实者

  PHP成功的两大秘诀,第一条就是简单。PHP简单到让喜欢卖弄技巧的程序员感到羞愧,但让那些渴望进入Web开发领域的初学者欣喜若狂。PHP像是一条鲶鱼,与XML、Web Services融合无间。即使历次北京鲜花礼品的版本升级,也无需担心PHP会丧失这种简单的特性。无疑,这个特点给需要快速开发、交互应用的Web2.0潮流极大的带来了方便,有超过半数的Ajax-enabled和Web2.0站点都选择了PHP。

  PHP的第二个秘诀,就是“Community(强大的社区)”。Discuz!软件的开发者,25岁的康盛创想公司CEO戴志康就是这个特性的受益者。他说,不像其他的开发者需要从零开始,大量的PHP程序都有开放源代码可供学习,后人站在前人的肩膀上加以改进,又将这种知识积累的结果回馈给社区。这曾被比喻为“大教堂和集市”,在集市中,知识得到了最大化的利用,效率提高、错误减少、成本降低。而大教堂只能越垒越高,不断延迟发布时间。

  现在,全球已有450万名PHP开发工程师,被称为“PHPer”,他们成为了软件世界中最有影响力的社区之一。有趣的是,展览公司开源的浪潮经过数年的发展,早已经走向庙堂,无论是Intel、IBM、Oracle,甚至是微软,都成为鼓吹甚至主导开源的力量。11月初,微软与Zend公司达成了一项长期合作的伙伴关系,共同推动PHP语言的发展。

  与其说开源运动是个颠覆者,不如说更像是粘合剂。中国开源软件推进联盟主席陆首群说,LAMP也可以派生出WAMP(W代表Windows)。事实上,PHP与.Net是并存的,PHP也可以和Windows捆绑在一起,两者并没有冲突,可以因地致宜地使用开源与闭源混合架构(Mix)。

  目前PHP社群和Zend公司的目标,是将PHP推广到企业级应用。在这一点上,欧洲和北美远远领先于中国。
<


搞不搞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文件给我时,


本文是一个系列的第一篇,目前想到的其他一些主题是:
  
   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无论要做的东西有多小,

[!--infotagslink--]

相关文章

  • win2003 安装软件之PHP5 图文安装教程

    本教程共分八篇:系统安装与设置篇、软件安装与设置篇、文件及文件夹权限篇、系统服务篇、安全策略篇、系统组件篇、注册表篇、软件安全篇。本篇讨论的是第二篇软件安装与设置篇的第七部分:安装软件之PHP 5 安装图解。 ...2016-01-27
  • MySQL中的主键以及设置其自增的用法教程

    1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如: ALTER TABLE tbl_name ADD PRIMARY KEY (in...2015-11-24
  • SQL server 自增ID--序号自动增加的字段操作

    这篇文章主要介绍了SQL server 自增ID--序号自动增加的字段操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-08
  • Mybatis-plus实现主键自增和自动注入时间的示例代码

    这篇文章主要介绍了Mybatis-plus实现主键自增和自动注入时间的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-20
  • 深入谈谈MySQL中的自增主键

    这篇文章主要给大家介绍了关于MySQL中自增主键的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
  • IIS 环境下配置PHP5+MySql+PHPMyAdmin

    虽然主要是做.net开发的,但是,时不时的还要搞一下php,但是,php在windows下的配置,总是走很多弯路,正好前几天又配置了一下,因此总结在这里,做为自己的备忘,也希望给遇到问题的朋友们提供一些帮助。...2016-01-27
  • PHP4和PHP5的配置异同比较

    配置php4或者php5的过程中,php4,5的配置的步骤大致一样的,但是配置内容有一些差别。在LINUX等环境下编译,一般来说,只要编译的选项正确,配置也就正确了;在windows配置则需要注...2016-11-25
  • thinkPHP5 tablib标签库自定义方法详解

    这篇文章主要介绍了thinkPHP5 tablib标签库自定义方法,结合具体实例形式分析了thinkPHP5标签库的定义、用法及相关注意事项,需要的朋友可以参考下...2017-05-21
  • PHP5正式版出炉

    Some of the key features of PHP 5 include: The Zend Engine II with a new object model and dozens of new features. XML support has been completely redone...2016-11-25
  • php7和php5的详细对比

    这篇文章主要介绍了php7和php5详细对比,对此感兴趣的同学,可以自己研究下...2021-04-19
  • PHP5中的三大特色功能

    PHP5 中的三大特色功能。这三大特点为:   * 新的对象模式 (New Object Mode)   * 异常处理 (Exceptions)   * 名称空间 (Namespace)      在开始之前,...2016-11-25
  • 我要新增一行,怎么办?

    在PHP中,要结束一个脚本区域,使用"?>" 或 "?> "( 是要新增一行的)。意思在上述的程序中你需要在每个PHP区域中加入另外的换行标记。 为何PHP会这样子呢?因为当格式化成...2016-11-25
  • IIS7,IIS7.5 升级PHP5.3后站点变慢的解决方法

    大多数PHP页面实际上都是数据库驱动的,要连接数据库才能显示出来,而响应时间过长的原因便在于PHP 5.3连接数据库的方式有所改变,这里简单给大家分享下, 方便需要的朋友...2016-01-27
  • Mysql主键UUID和自增主键的区别及优劣分析

    这篇文章主要介绍了Mysql主键UUID和自增主键的区别及优劣分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • Windws下基于Apache的PHP4和PHP5共存

    在学习PHP过程中可能要同时用到PHP4和PHP5,网上也有不少关于二者共存的安装方法,大多是一个安装在IIS下,一个安装在Apache下。下面介绍一下本人的安装方法,自认为比较优化...2016-11-25
  • SQL Server中identity(自增)的用法详解

    这篇文章主要介绍了SQL Server中identity(自增)的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-08
  • 基于jQuery实现点击最后一行实现行自增效果的表格

    现在任何事务都追求效率和人性化,当然网页效果也是如此,如果一个可以编辑数据的表格,编辑到最后一行的时候,点击可以自动添加一行,这样算是一个比较人性化的效果,可以免去一丝劳顿之苦,下面分享一段这样的代码...2016-01-14
  • django项目中新增app的2种实现方法

    这篇文章主要介绍了django项目中新增app的2种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-10
  • PHP MySql增删改查的简单实例

    下面小编就为大家带来一篇PHP MySql增删改查的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-06-24
  • IIS环境下安装PHP5手记

    1,要下载2个php的安装包:一个是install版本的,另一个是zip版本的 。 2,运行install版本,按照标准模式安装就可以了,安装过程中注意正确选择你的iIS版本。 2000server 选i...2016-11-25