PHP5编辑php
PHP5在长时间的开发及多个预发布版本后,2004年7月13日,PHP5.0发布。该版本以Zend引擎Ⅱ为引擎,而且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本强化更多的功能。首先,彻底实现面向对象,提供名为PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理用界面。同时还强化了XMLWeb服务支持,并且标准支持SOAP扩展模块。数据库方面,PHP新版本提供旨在访问MySQL的新界面——MySQL。除此前的界面外,还可使用面向对象界面和预处理语句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上还捆绑有小容量RDBMS-SQLite.html
新对象模式前端
*构造函数和析构函数 * 对象的引用 * 对象的克隆 * 对象中的私有、公共及受保护模式 * 接口 (Interfaces)linux
* 抽象类 * __call * __set 和 __get * 静态成员nginx
构造函数和析构函数程序员
在 PHP4 中,当函数与对象同名时,这个函数将成为该对象的构造函数,而且在 PHP4 中没有析构函数的概念。web
在 PHP5 中,构造函数被统一命名为 __construct,而且引入了析构函数的概念,被统一命名为 __destruct。thinkphp
对象的引用数据库
在PHP4中,传递变量给一个函数或方法,实际是把这个变量作了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号“&;” 来声明是要作一个引用,而不是一个 Copy。在 PHP5中,对象老是以引用的形式存在的,对象中的赋值操做一样也都是一个引用操做。apache
对象的克隆
当一个对象始终以引用的形式来被调用时,若是我想获得该对象的一个副本,该怎么办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。
抽象类
抽象类不能被实例化。
抽象类与其它类同样,容许定义变量及方法。
抽象类一样能够定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。
__call
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。若是你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
__set 和 __get
这是一个很棒的方法,__set 和 __get 方法能够用来捕获一个对象中不存在的变量和方法。
类型指示
在 PHP5 中,你能够在对象的方法中指明其参数必须为另外一个对象的实例。
静态成员
静态成员和静态方法在面象对象编程的术语中被称做 “类方法(class methods)” 和 “类变量(class variables)”。
“类方法” 在一个对象没有实例化前容许被调用。一样,“类变量” 在一个对象没有实例化前能够被独立操做控制(不须要用一个对象的方法来控制)。
异常处理
异常处理是公认的处理程序错误的理想方法,在 Java及 C 中都有这个概念,咱们欣喜的看到,在 PHP5 已经加入了这方面的应用。你能够尝试使用 “try” 和 “catch” 来控制程序的错误。当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你须要指明要把错误交给某个对象处理,这样作可使代码结构看起来更清晰,由于咱们能够把全部的错误信息交给一个对象来处理。
自定义错误处理
你能够很方便的用自定义的处理错误的代码来控制你的程序中的意外。你仅仅须要从异常类中派生出一个本身的错误控制类,在你本身的错误控制类中,你须要有一个构造函数和一个 getMessage 方法。
命名空间
名称空间对类的分组或函数分组颇有用。它能够把一些相关的类或函数给组合到一块儿,方便之后调用。
例:名称空间
1 <?php 2 namespacemy\name;//参考"定义命名空间"小节 3 classMyClass{} 4 function myfunction(){} 5 constMYCONST=1; 6 $a=newMyClass; 7 $c=new\my\name\MyClass;//参考"全局空间"小节 8 $a=strlen('hi');//参考"使用命名空间:后备全局函数/常量"小节 9 $d=namespace\MYCONST;//参考"namespace操做符和__NAMESPACE__常量”小节 10 $d=__NAMESPACE__.'\MYCONST'; 11 echo constant($d);//参考"命名空间和动态语言特征"小节 12 ?>
注意你须要在何种状况下使用名称空间,在实际运用中,你可能会须要声明两个或多个名称同样的对象来作不一样的事情,那么你就能够把他们分别放到不一样的名称空间中去(但接口是要相同的)。
加密
从PHP5.3开始支持ZendGuard加密方式,必须安装Zend Guard Loader,老的zend optimizer将不被支持。
Linux安装Zend Guard Loader支持的过程:
操做系统为CentOS5.5,PHP版本为5.3.8(CentOS5.5中的PHP默认版本较低,若是要升级到PHP最新版,可使用remi的report源进行升级)。
Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。因此安装的话,就须要安装在iis或者和nginx搭配。
一、下载最新的Linux操做系统系下的Zend Guard Loader。
二、上传至Linux服务器并解压缩,注意阅读生成目录下的README文件。全文以下(添加必要的注释)。在/etc/php.d/目录下建立文件zend.ini,内容以下:
1 zend_extension=/usr/lib64/php/modules/ZendGuardLoader.so
注意路径必定要写上,刚开始没写路径,总是加载不上ZendGuardLoader .so,也能够直接将上面的配置写入/etc/php.ini文件中,效果同样。
三、重启httpd服务:service httpd restart。
4.输出<?php phpinfo(); ?>
相关语法及概念
php 支持八种原始类型。
四种标量类型:boolean(布尔型) integer(整型) float(浮点型,也做“double”) string(字符串)
两种复合类型:array(数组)object(对象)
最后是两种特殊类型:resource(资源)NULL
为了确保代码的易读性,本手册还介绍了一些伪类型:mixed、number、callback
语法(例子中均忽略了PHP代码边界符 <?php ?>):
注释的语法有三种:
1 //comment这个是单行注释 2 /*comment
这个是多行注释
*/3 #comment这个是脚本类型注释,不多用
基本的结构控制语句:
1 //分支结构(选择结构) 2 3 if(condition){ 4 5 //Statement 6 7 } 8 9 if(condition){ 10 11 //Statement 12 13 }else{ 14 15 //Statement 16 17 } 18 19 if(condition){ 20 21 //Statement 22 23 }elseif(condition){ 24 25 //Statement 26 27 } 28 //多分支结构 29 switch($变量){ 30 case'值': 31 //Statement 32 break; 33 case'值2': 34 //Statement 35 break; 36 default: 37 //Statement 38 } 39 40 //循环结构 41 42 while(condition){ 43 //Statement 44 } 45 46 47 do{ 48 //Statement 49 }while(condition); 50 51 52 for(初始化;判断;变化){ 53 //Statement 54 } 55 56 57 //数组遍历专用循环语句 58 59 foreach($Arrayas$value){ 60 echo$value; 61 } 62 63 foreach($Arrayas$key=>$value){ 64 echo$key; 65 echo$value; 66 }
一个PHP实例:
1 <html> 2 <head> 3 <title>Firstprogram</title> 4 </head> 5 <body> 6 //php中string类型的拼接符和其它大多数采用"+"号运算符不同,而是采用"."号运算 7 //在通常语言中用于对象属性和方法调用的"."运算符,则和C语言的结构体同样用"=>" 8 <?php 9 echo"helloworld"."!"; 10 ?> 11 </body> 12 </html>
php对面向对象的支持
面向对象编程的概念:
不一样的做者之间说法可能不同,可是一个OOP语言必须有如下几方面:
1.抽象数据类型和信息封装
2.继承
3.多态
在PHP中是经过类来完成封装的:
1 //在OOP类中,一般采用大双驼峰命名法,每一个单词的首字母都大写 2 classSomething{ 3 //做用域修饰符:public公共的;private私有的;protected受保护的; 4 //属性的名称通常用全小写 5 private$x=null;//在编程建议中,内部使用的属性应该给私有修饰符,而后经过方法取值赋值 6 7 //方法的名称通常用小驼峰命名法,第一个单词全小写,剩下的单词首字母大写 8 //由于PHP不会自动为变量使用$this因此必须主动加上$this伪变量来指向操做的对象 9 publicfunctionsetX($v){ 10 $this->x=$v; 11 } 12 publicfunctiongetX(){ 13 return$this->x; 14 } 15 }
固然你能够按本身的喜爱进行定义,但最好保持一种标准,这样会更有效。数据成员在类中使用"var"声明来定义,在给数据成员赋值以前,它们是没有类型的。一个数据成员能够是一个整数,一个数组,一个相关数组(associative array)或者是一个对象。方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this->name,不然对一个方法来讲,它只能是局部变量。
使用new操做符来建立一个对象:
$obj=newSomething;
而后你可使用成员函数经过:
$obj->setX(5); $see=$obj->getX(); echo$see;
在这个例子中,setX成员函数将5赋值给对象的成员变量x(不是类的),而后getX返回它的值5。能够象:$obj->x=6那样经过类引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议经过方法来存取成员变量。若是你把成员变量当作是不可处理的,而且只经过对象句柄来使用方法,你将是一个好的OOP程序员。不幸的是,PHP不支持声明私有成员变量,因此不良代码在PHP中也是容许的。继承在PHP中很容易实现,只要使用extends关键字。
1 classAnotherextendsSomething{ 2 private$y; 3 4 publicfunctionsetY($v){ 5 $this->y=$v; 6 } 7 functiongetY(){ 8 return$this->y; 9 } 10 }
"Another"类的对象拥有了父类(Something)的所有的数据成员及方法,并且还加上了本身的数据成员和方法。
你可使用
1 $obj2=newAnother; 2 $obj2->setY(5); 3 echo$obj2->getY();
PHP只支持单继承,因此你不能从两个或两个以上类派生出新的类来。你能够在派生类中重定义一个方法,若是咱们在"Another"类中重定义了getX方法(方法重写),咱们就不能使 用"Something"中的getX方法了。若是你在派生类中声明了一个与基派同名的数据成员,那么当你处理它时, 它将“隐藏”基类的数据成员。
你能够在你的类中定义构造函数。构造函数是一个与类名同名的方法,当你建立一个类的对象时会被调用,例如:
1 classSomething{ 2 private$x=null; 3 4 //新版本的构造函数放弃使用类名,而统一使用__construct() 5 publicfunction__construct($x){ 6 $this->x=$x; 7 } 8 publicfunctionsetX($v){ 9 $this->x=$v; 10 } 11 publicfunctiongetX(){ 12 return$this->x; 13 } 14 15 //析构函数 16 publicfunction__destruct(){ 17 18 } 19 }
因此你能够建立一个对象,经过:
$obj=newSomething(6);
构造函数会自动地把6赋值给数据变量x。构造函数和方法都是普通的PHP函数(”__“两个下划线,魔术方法),因此你可使用缺省参数。
publicfunction__construct($x="3",$y="5"){ }
接着:
$obj=newSomething();//x=3andy=5 $obj=newSomething(8);//x=8andy=5 $obj=newSomething(8,9);//x=8andy=9
缺省参数使用C++的方式,因此你不能忽略Y的值,而给X一个缺省参数,参数是从左到右赋值的,若是传入的参数少于要求的参数时,其做的将使用缺省参数。
当一个派生类的对象被建立时,只有它的构造函数被调用,父类的构造函数没被调用,若是你想调用基类的构造函数,你必需要在派生类的构造函数中用parent::__construct()调用。能够这样作是在派生类中全部父类的方法都是可用的。
1 class Another extends Something{ 2 public function__construct(){ 3 parent::__construct(5,6);//显示调用基类构造函数 4 } 5 }
OOP的一个很好的机制是使用抽象类。抽象类是不能实例化,只能提供给派生类一个接口。设计者一般使用抽象类来强迫程序员从基类派生,这样能够确保新的类包含一些期待的功能。在PHP中没有标准的方法,可是:若是你须要这个特性,能够经过定义基类,并在它的构造函数后加上"die" 的调用,这样就能够保证基类是不可实例化的,在每个方法(接口)后面加上"die" 语句,因此,若是一个程序员在派生类中没有覆盖方法,将引起一个错误。并且由于PHP 是无类型的,你可能须要确认一个对象是来自于你的基类的派生类,那么在基类中增长一个方法来实义类的身份(返回某种标识id),而且在你接收到一个对象参数时校验这个值。固然,若是一个很差的邪恶程序员在派生类中覆盖了这个方法,这种方法就不起做用了,不过通常问题多在懒惰的程序员身上,而不是邪恶的程序员。
固然,可以让基类对程序员没法看到是很好的,只要将接口打印出来作他们的工做就能够了。PHP 5 引入了析构函数的概念,这相似于其它面向对象的语言,如 C++。析构函数会在到某个对象的全部引用都被删除或者当对象被显式销毁时执行。[3]
重载(与覆盖不一样)在PHP中不支持,由于PHP是弱类型语言。在OOP中,你能够重载一个方法来实现两个或重多的方法具备相同的名字,可是有不一样数量或类型的参数(这要看语言)。PHP 是一种松散类型的语言,因此经过类型重载不起做用,然而经过参数的个数不一样来重载也不起做用。
有时在OOP中重载构造函数很是好,这样你能够经过不一样的方法建立对象(变量函数)。在PHP中实现它的技巧是:
1 class Myclass{ 2 public function Myclass(){ 3 $name="Myclass".func_num_args();//这个函数返回的是传过来参数的个数 4 $this->$name();//这里使用的是一个变量函数,以这个变量的值做为函数的名称调用 5 } 6 public function Myclass1($x){ 7 //code 8 } 9 public function Myclass2($x,$y){ 10 //code 11 } 12 }
经过在类中的额外的处理,使用这个类对用户是透明的:
1 $obj1=newMyclass('1');//将调用Myclass1 2 $obj2=newMyclass('1','2');//将调用Myclass2
有时这个很是好用。
多态
多态是对象的一种能力,它能够在运行时刻根据传递的对象参数,决定调用哪个对象的方法。例如,若是你有一个figure的类,它定义了一个draw的方法。而且派生了circle和rectangle 类,在派生类中你覆盖了draw方法,你可能还有一个函数,它但愿使用一个参数x,而且能够调用$x->draw()。若是你有多态性,调用哪一个draw方法就依赖于你传递给这个函数的对象类型。
多态性在象PHP这样的解释语言(想象一下一个C++编译器生成这样的代码,你应该调用哪个方法?你也不知道你拥有的对象是什么类型的,好,这不是重点)是很是容易和天然的。因此PHP固然支持多态性。
1 classCalc{ 2 functionniceDrawing($x){//假设这是Board类的一个方法 3 $x->draw(); 4 } 5 } 6 7 classCircle{ 8 publicfunctiondraw(){ 9 echo"画了一个圆"; 10 } 11 } 12 13 classRectangle{ 14 publicfunctiondraw(){ 15 echo"画了一个矩形"; 16 } 17 } 18 $board=newCalc; 19 $obj=newCircle(3,187); 20 $obj2=newRectangle(4,5); 21 $board->niceDrawing($obj);//将调用Circle的draw方法 22 $board->niceDrawing($obj2);//将调用Rectangle的draw方法
用PHP进行面向对象编程
一些"纯化论者(purists)"可能会说PHP不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可使用OOP,也可使用传统的过程化编程。然而,对于大型项目,你可能想/须要在PHP 中使用纯的OOP去声明类,并且在你的项目只用对象和类。
随着项目愈来愈大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和重用。这些就是软件工程的基础。在基于web的项目中应用这些概念就成为未来网站成功的关键。
高级OOP技术
在看过基本的OOP概念后,我就能够向你展现更高级的技术:
序列化(Serializing)
PHP不支持永久对象,在OOP中永久对象是能够在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,并且能够在之后装入对象。这就是所谓的序列化机制。PHP 拥有序列化方法,它能够经过对象进行调用,序列化方法能够返回对象的字符串表示。然而,序列化只保存了对象的成员数据而不包括方法。
在PHP4中,若是你将对象序列化到字符串$s中,而后释放对象,接着反序列化对象到$obj,你能够继续使用对象的方法!我不建议这样去作,由于(a)文档中没有保证这种行为在之后的版本中仍然可使用。(b) 这个可能致使一种误解,在你把一个序列化后的版本保存到磁盘并退出脚本时。当之后运行这个脚本时,你不能期待着在反序列化一个对象时,对象的方法也会在那里,由于字符串表示根本就不包括方法。
总而言之,PHP 进行序列化对于保存对象的成员变量很是有用。(你也能够将相关数组和数组序列化到一个文件中)。
例子 :
1 $obj=newClassfoo(); 2 $str=serialize($obj);//保存$str到磁盘上 3 $obj2=unserialize($str);//几个月之后//从磁盘中装入str
你恢复了成员数据,可是不包括方法(根据文档所说)。这致使了只能经过相似于使用$obj2->x来存取成员变量(你没有别的方法!)的惟一办法,因此不要在家里试它。
有一些办法能够解决这个问题,我把它留着,由于对这篇简洁的文章来讲,他们太很差。我会很高兴地欢迎在PHP的后续版本中有全序列化的特性。
使用类进行数据存储PHP和OOP一件很是好的事情就是,你能够很容易地定义一个类来操做某件事情,而且不管什么时候你想用的时候均可以调用相应的类。假设你有一个HTML表单,用户能够经过选择产品ID号来选择一个产品。在数据库中有产品的信息,你想把产品显示出来,显示它的价格等等。你拥有不一样类型的产品,而且同一个动做可能对不一样的产品具备不一样的意思。例如,显示一个声音可能意味着播放它,可是对于其它种类的产品可能意味着显示一个存在数据库中的图片。你可使用OOP或PHP来减小编码并提升质量:
定义一个产品的类,定义它应该有的方法(例如:显示),而后定义对每一种类型的产品的类,从产品类派后出来(SoundItem类,ViewableItem类,等等),覆盖在产品类中的方法,使它们按你的想法动做。
根据数据库中每一种产品的类型(type)字段给类命名,一个典型的产品表可能有(id,type,price,description,等等字段)...而后在处理脚本中,你能够从数据库中取出type值,而后实例化一个名为type的对象:
1 $obj=new$type(); 2 $obj->action();
这是PHP的一个很是好的特性,你能够不用考虑对象的类型,调用$obj的显示方法或其它的方法。使用这个技术,你不须要修改脚本去增长一个新类型的对象,只是增长一个处理它的类。
这个功能很强大,只要定义方法,而不去考虑全部对象的类型,在不一样的类中按不一样的方法实现它们,而后在主脚本中对任意对象使用它们,没有if...else,也不须要两个程序员,只有高兴。
你赞成编程是容易的,维护是便宜的,可重用是真的吗?
若是你管理一组程序员,分配工做就是很简单的了,每一个人可能负责一个类型的对象和处理它的类。
能够经过这个技术实现国际化,根据用户所选的语言字段应用相应的类就能够了,等等。
拷贝和克隆
当你建立一个$obj的对象时,你能够经过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一个引用),因此它具备$obj在当时的状态。有时候,你不想这样,你只是想生成一个象obj类同样的一个新的对象,能够经过使用new语句来调用类的构造函数。在PHP中也能够经过序列化,和一个基类来实现,但全部的其它类都要从基类派生出来。
进入危险区域
当你序列化一个对象,你会获得某种格式的字符串,若是你感兴趣,你能够调究它,其中,字符串中有类的名字(太好了!),你能够把它取出来,象:
1 $herring=serialize($obj); 2 $vec=explode(':',$herring);//以:为标识符把字符串拆分红一个数组 3 $nam=str_replace("\",'',$vec[2]);
因此假设你建立了一个"Universe"的类,而且强制全部的类都必须从universe扩展,你能够在universe 中定义一个clone的方法,以下:
1 classUniverse{ 2 3 //在新的PHP版本中克隆(__clone())是一个魔术方法,不要和这个方法搞混了 4 5 functionclone(){ 6 7 $herring=serialize($this); 8 9 $vec=explode(':',$herring); 10 11 $nam=str_replace("\"",'',$vec[2]); 12 13 $ret=new$nam; 14 return$ret; 15 16 } 17 18 }//而后 19 20 $obj=newSomething();//从Universe扩展 21 22 $other=$obj->clone();
你所获得的是一个新的Something类的对象,它同使用new方法,调用构造函数建立出的对象同样。我不知道这个对你是否有用,可是Universe类能够知道派生类的名字是一个好的经验。想象是惟一的限制。
模板引擎
框架介绍thinkphp
ThinkPHP是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。而且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保能够稳定用于商业以及门户级的开发。
PHP认证级别
PHP课程由初级(IFE)、中级(IPE)和高级(IAE)三个部分。
PHP安全
PHP其实不过是Web服务器的一个模块功能,因此首先要保证Web服务器的安全。固然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。常见的web安全漏洞有:注入攻击,跨站攻击,服务器自身漏洞等,对应的详细解释,详见:扩展阅读中的《WEB安全性-2010_OWASP_TOP10》,这里有很详尽的解释。
PHP的优势学习过程和方法
PHP的语法相似于C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来讲,PHP太简单了。相反的,若是你对PHP了解较多,那么你对于其余几种语言的学习都很简单了。你只须要很短的时间内将PHP的核心语言特色所有掌握,你可能已经很是了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制做好看的WEB站点。因为PHP代码可以无障碍的添加进你的站点,在你设计和维护站点的同时,你能够很轻松的加入PHP使得你的站点更加具备动态特性。
数据库链接
PHP能够编译成具备与许多数据库相链接的函数。PHP与MySQL是绝佳的组合,若是再加上Apache服务器,就是至关完美的了。你还能够本身编写外围的函数取间接存取数据库。经过这样的途径当你更换使用的数据库时,能够轻松的更改编码以适应这样的变化。PHPLIB就是最经常使用的能够提供通常事务须要的一系列基库。
可扩展性
就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来讲为PHP扩展附加功能可能会比较难,可是对于一个PHP程序员来讲并不困难。
PHP可伸缩性
传统上网页的交互做用是经过CGI来实现的。CGI程序的伸缩性不很理想,由于它为每个正在运行的CGI程序开一个独立进程。解决方法就是将常常用来编写CGI程序的语
记事本保存php文件注意事项
言的解释器编译进你的web服务器(好比mod_perl,JSP)。PHP就能够以这种方式安装,虽然不多有人愿意这样以CGI方式安装它。内嵌的PHP能够具备更高的可伸缩性。
PHP免费安装
PHP源代码包安装版:这个版本适合已经有本身独立的网站域名、网站空间的专业网站建设用户。使用方法依然其为简单,只需三步:
第1、到官方网站:下载 PHP源代码包安装版最新版本,解压下载文件,将其中的所有内容上传到你的支持PHP的网站空间
第2、改更文件属性,请将根目录下以PHP为后缀名的文件和”/include/domain.php”和 “/attachments” 和 “/data”文件夹以及文件夹下全部的文件属性改为“可读”、“可写”、“可执行”,一般是“755”。
第3、打开你的网站根目录,系统会自动运行setup安装程序,按提示点下一步操做便可。
友情提示:当你下载咱们的软件并看到这份说明时,则说明你必定是对企业网站建设有必定的需求或者你是一个网站建设技术学习者。
文件格式
1.对于只含有 php 代码的文件,咱们将在文件结尾处忽略掉 "?>"。这是为了防止多余的空格或者其它字符影响到代码。
例如:
$foo = 'foo';
2.缩进应该可以反映出代码的逻辑结果,尽可能使用四个空格,禁止使用制表符TAB,由于这样可以保证有跨客户端编程器软件的灵活性。
例如:
1 if(1==$x){ 2 $indented_code=1; 3 if(1==$new_line){ 4 $more_indented_code=1; 5 } 6 }
3.变量赋值建议保持相等间距和排列。
例如:
1 $variable='demo'; 2 $var='demo2';
4.每行代码长度应控制在80个字符之内,最长不超过120个字符。由于 linux 读入文件通常以80列为单位,就是说若是一行代码超过80个字符,那么系统将为此付出额外操做指令。这个虽然看起来是小问题,可是对于追求完美的程序员来讲也是值得注意并遵照的规范。
5.每行结尾不容许有多余的空格。
Php文件记事本编辑乱码问题
通常状况下,记事本编辑器在对文件进行完编辑并保存之时,其默认编码为ANSI,中文。然则更多的时候,php在语言环境设置时语言多数为utf-8,直接保存并用于apache等http-server解析后就会出现乱码。
为此,应该注意在用记事本编辑完后可将文件用“另存为”的方式对文件进行保存,并将“文件类型”选择“全部文件”,编码与文件指定语言编码一致便可。[4]
算数运算符
PHP 的运算符包括算术运算符、赋值运算符、比较运算符和逻辑运算符。[5]
算数运算符:
加,减,乘,除,取模(取余)
+、-、*、/、%
赋值运算符:(如下解释在许多书中有所不一样)
赋值,加赋值,减赋值、乘赋值、除赋值,连字赋值
=、+=、-=、*=、/=、.=
位运算符:
位与、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比较运算符:
等于、全等于、不等于、不全等于、大于、小于、大于等于、小于等于
==、===、!=(<>)、!==、>、<、>=、<=
逻辑运算符:
逻辑与、逻辑或、逻辑非、逻辑亦或
&&、||、!、xor
字符串运算符:
. 链接两个字符串