仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2099|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之PHP的宝库目次--PEAR

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:28:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
左手拿着MOTOLOLA右手拿着NOKIA,要多潇洒,有多潇洒,哈哈,终于学会了,但是可能这个时候,又会有人不经意的拍拍肩膀对你说:哥们,别高兴的太早,你还是菜鸟,离学会还差着一大截呢!   你能够已是个PHP的内行了,写了良多十分棒的代码。然而,假如你如今要把它们到场到你如今的项目中去,是不是有些费劲?你的伴侣想利用你的代码作为他的项目中的一个模块,然而你发明你们利用了一模一样的编码作风,让他顺应,乃至不如重写一个!
请跟我来,利用PEAR尺度编写你的PHP法式吧,你的法式将会具有更大的活气,你的法式和代码将会很便利地和其他高手的代码交融在一同,PEAR就象CPAN关于PERL一样,会让PHP发生更高的能量。

甚么是PEAR
PEAR是PHP扩大与使用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩大及使用的一个代码仓库,复杂地说,PEAR就是PHP的CPAN。

为何要利用PEAR?
PHP是一个十分优异的剧本言语,简约、高效,跟着4.0的宣布,愈来愈多的人利用它来停止静态网站的开辟,可以说,PHP已成为最优异的INTERNET开辟言语之一,特别关于那些需求可以疾速、高效地开辟中小范围的贸易使用的网站开辟人员,PHP是其首选的言语。然而跟着PHP的使用的不休增多,关于这些使用缺少一致的尺度和无效的办理,因而,PHP社区很难象PERL社区的人们那样便利的同享彼此的代码和使用,由于PHP缺少象CPAN那样的一致的代码库来分类办理使用的代码模块(熟习PERL的人都晓得,CPAN是一个伟大的PERL的扩大模块仓库,编写的使用模块可以放在CPAN上面的恰当的分类目次上面,其他的人可以很便利地复用,固然,你编写使用模块时分也需求恪守个中的原则。)

为此,PEAR就应运而生了,而且从4.04入手下手,跟着PHP中心一同被分发。

PEAR能给我带来甚么优点?
1.如前所述,PEAR依照必定的分类来办理PEAR使用代码库,你的PEAR代码可以组织到个中恰当的目次中,其他的人可以便利地检索并分享到你的功效。

2.PEAR不单单是一个代码仓库,它同时也是一个尺度,利用这个尺度来书写你的PHP代码,将会加强你的法式的可读性,复用性,削减失足的概率。

3.PEAR经由过程供应2个类为你搭建了一个框架,完成了诸如析构函数,毛病捕捉功效,你经由过程承继就能够利用这些功效。

PEAR的编码划定规矩
PEAR的编码划定规矩包含缩进划定规矩,掌握布局,函数挪用,函数界说,正文,包括代码,PHP标志,文件头的正文块,CVS标志,URL样例,常量的定名这11方面。上面扼要地引见一下:

缩进划定规矩:
PEAR中需求利用4个空格来缩排代码,而且不利用TAB。假如你利用VIM,将以下设置放入你的~/.vimrc中:
set expandtab
set shiftwidth=4
set tabstop=4


假如,你利用Emacs/XEmacs,需求把indent-tabs-mode 设置成nil。

不外你象我一样喜好用(X)Emacs编纂PHP文件,我激烈保举你装置PHP-MODE,如许当你编写PEAR代码的时分,它会主动调剂你的缩排作风,固然PHP-MODE还有很多很优异的特征,你可以从资本列表中的中央下载最新版的PHP-MODE。

掌握布局:
这里所说的掌握布局包含: if for while switch 等。关于掌握布局,在关头字(如if for ..)前面要空一个格,然后再跟掌握的圆括号,如许,不至于和函数挪用搅浑,另外,你应当尽可能完全的利用花括号{},即便从语法下去说是可选的。如许可以避免你今后需添加新的代码行时发生逻辑上的困惑或毛病。这里是一个样例:
if ((前提1) && (前提2)) {
语句1;
}esleif ((前提3) || (前提4)) {
语句2;
}else {
语句3;
}




函数挪用:
关于函数挪用,函数名和左括号( 之间不该该有空格,关于函数参数,在分隔的逗号和下一个参数之间要有不异的空格分别,最初一个参数和右括号之间不克不及有空格。上面是一个尺度的函数挪用;
$result = foo($param1, $param2, $param3);
不标准的写法:
$result=foo ($param1,$param2,$param3);
$result=foo( $param1,$param2, $param3 );




另外,假如要将函数的前往了局赋值,那末在等号和所赋值的变量之间要有空格,同时,假如是一系列相干的赋值语句,你添加恰当的空格,使它们对齐,就象如许:
$result1 = $foo($param1, $param2, $param3);
$var2 = $foo($param3);
$var3 = $foo($param4, $param5);




函数界说:
函数界说遵守"one true brace"风俗:
function connect(&$dsn, $persistent = false)
{
if (is_array($dsn)) {
$dsninfo = &&dsn;
} else {
$dsninfo = DB::parseDSN($dsn);
}

if (!$dsninfo || !$dsninfo['phptype']) {
return $this->raiseError();
}
return true;
}


如上所示,可选参数要在参数表的末尾,而且老是尽可能前往成心义的函数值。

关于正文:
关于类的在线文档,应当可以被PHPDoc转换,就象JavaDoc那样。PHPDoc也是一个PEAR的使用法式,更具体的引见你可以去 http://www.phpdoc.de/ 检查。除类的在线文档,建议你应当利用非文档性质的正文来诠释你的代码,当你看到一段代码时想:哦,我想不需求在文档里去细心描写它吧。那末你最好给这段代码作一个复杂的正文,如许避免你会健忘它们是若何任务的。关于正文的模式,C的 /* */和C++的//都不错,不外,不要利用Perl或shell的#正文体例。

包括代码:
不管甚么时分,当你需求无前提包括进一个class文件,你必需利用requre_once;当你需求前提包括进一个class文件,你必需利用include_once;如许可以包管你要包括的文件只会包括一次,而且这2个语句共用统一个文件列表,所以你不必忧虑两者会搅浑,一旦require_once 包括了一个文件,include_once不会再反复包括不异的文件,反之亦然。

PHP代码标志:
任什么时候候都要利用<?php ?>界说你的php代码,而不要复杂地利用<? ?>,如许可以包管PEAR的兼容性,也利于跨平台的移植。

文件头的正文声明:
一切需求包括在PEAR中心宣布的PHP代码文件,在文件入手下手的时分,你必需到场以下的正文声明:
/* vim: set expandtab tabstop=4 shiftwidth=4: */

// +----------------------------------------------------------------------+

// | PHP version 4.0 |

// +----------------------------------------------------------------------+

// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |

// +----------------------------------------------------------------------+

// | This source file is subject to version 2.0 of the PHP license, |

// | that is bundled with this package in the file LICENSE, and is |

// | available at through the world-wide-web at |

// | http://www.php.net/license/2_02.txt. |

// | If you did not receive a copy of the PHP license and are unable to |

// | obtain it through the world-wide-web, please send a note to |

// | license@php.net so we can mail you a copy immediately. |

// +----------------------------------------------------------------------+

// | Authors: Original Author |

// | Your Name |

// +----------------------------------------------------------------------+

//

// $Id$


关于不在PEAR中心代码库中的文件,建议你也在文件的入手下手处有如许一个相似的正文块,标明版权,协定,作者等等。同时也在第一行到场VIM的MODELINE,如许在VIM中可以坚持PEAR的代码作风。

CVS标志:
如下面所展现那样,在每一个文件中到场CVS的ID标志,假如你编纂或修正的文件中没有这个标志,那末请到场,或是交换原文件中相相似的体现模式(如"Last modified"等等)

URL样本:
你可以参照RFC 2606,利用"www.example.com"作为一切的URL样本。

常量定名:
常量应当尽可能利用大写,为了便于了解,利用下划线朋分每一个单词。同时,你应当常量地点的包名或是类名作为前缀。好比,关于Bug类中常量应当以Bug_入手下手。以上是PEAR的编码划定规矩,具体的编码划定规矩可以参考PEAR中的CODING_STANDDARD文件的申明。为了更好地舆解这些编码划定规矩,你也能够参考一下现有PEAR中心模块的代码。

入手下手利用PEAR

PEAR
利用PEAR很复杂,你只需如许界说你本人的PEAR法式:
require_once "PEAR.php";
class your_class_name extends PEAR{
你的类界说...
}




固然,你需求恪守后面说的PEAR的编码划定规矩,以后你就能够在你的类外部完成你要做的工作了。上面,咱们睁开会商一下,实践上PEAR为咱们供应了2个预界说类:
PEAR:这是PEAR的基类,一切的PEAR扩大都要从它承继派生出来。
PEAR_Error:PEAR的毛病处置的基类,你可以选择派生出本人的毛病处置的类。

普通来讲,你不该该直接创立PEAR的实例,而是要本人派生出一个新的类,然后再创立这个新类的实例。作为基类,PEAR给咱们供应了一些有效的功效,最次要的就是析构函数和毛病处置

析构函数
PHP撑持机关函数,然而其实不撑持析构函数,不外,PHP供应register_shutdown_function()这个函数,从而可以在剧本终止前回调注册的函数,因而PEAR使用这个特征,供应了析构函数的仿真。假设你有一个PEAR的子类,叫做mypear,那末在mypear类中,你可以界说一个函数,函数名是下划线加上你的类名,_mypear(),这个函数就是这个类的析构函数。不外这个析构函数和C++中的析构函数不太一样,它不会在对象被删除的时分履行,而是在剧本停止的时分,究竟这只是一个仿真。因为是利用了register_shutdown_function(),所以在你的析构函数里,打印的信息将不会前往阅读器中。另外,在你的机关函数中,需求挪用一下它的父类的机关函数,由于PHP不会主动挪用父类的机关函数,而析构函数需求在PEAR的机关函数中注册,咱们可以看看PEAR的源代码:
<code>
function PEAR() {
if (method_exists($this, "_".get_class($this))) {
global $_PEAR_destructor_object_list;
$_PEAR_destructor_object_list[] = &&this;
}
if ($this->_debug) {
printf("PEAR constructor called, class=%s\n",
get_class($this));
}
.....
function _PEAR_call_destructors() {
global $_PEAR_destructor_object_list;
if (is_array($_PEAR_destructor_object_list) && sizeof($_PEAR_destructor_object_list)) {
reset($_PEAR_destructor_object_list);
while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
$destructor = "_".get_class($objref);
if (method_exists($objref, $destructor)) {
$objref->$destructor();
}
}
//清空已注册的对象列表,

//避免反复挪用

$_PEAR_destructor_object_list = array();

}

}

....
register_shutdown_function("_PEAR_call_destructors");
</code>




下面这段代码展现了PEAR是若何完成析构函数的,在构件函数中,将反省以后类中是不是有析构函数,假如有,那末将把以后类的援用放入一个全局列表中,在_PEAR_call_destructors中,则反省这个全局列表中的每一个元素是不是存在响应的析构函数,假如有,则挪用它,最初将全局列表清空。

在PEAR.php的最初一行代码,则挪用register_shutdown_function("_PEAR_call_destructors"),注册_PEAR_call_destructors,如许,当剧本履行终了的时分,PHP会回调这个函数。利用析构函数,你可以在处置完用户的恳求,加入之前做一些需要的"善后"任务,典范的例子是,你可以封闭翻开的文件,断开数据库的毗连,将某些数据存入磁盘等等。

毛病处置
PEAR中可让你有良多的体例来处置毛病,你不单单是复杂地前往一个毛病代码,或毛病的信息,而是可以前往一个PEAR_Error对象,或是由PEAR_Error派生出来的新的毛病对象。

PEAR中的毛病对象的并没无限定详细的输入模式,它可以仅仅是捕捉毛病,不给用户前往太多的信息,也能够是去回调一个特别毛病处置函数,同时,即便输入毛病信息,它也强制你必需如果HTML模式,你可以输入XML,CSV模式,或是其他你本人界说的模式,你只需求从PEAR_Error派生一个新的类,然后在恰当的时分创立并"抛出"这个新类的对象就能够了。

复杂的毛病处置:
在PEAR中,最复杂的毛病处置是"抛出"这个毛病,你只需复杂地创立并前往一个PEAR_Error的对象就能够了。上面是一个复杂的例子:
<code>
function myconnect($host = "localhost", $port = 1080)
{
$fp = fsockopen($host, $port, $errno, $errstr);
if (!is_resource($fp)) {
return new PEAR_Error($errstr, $errno);
}
return $fp;
}

$sock = myconnect();
if (PEAR::isError($sock)) {
print "connect error: ".$sock->getMessage()."<BR>\n"
}
</code>


如下面代码所展现的,在履行一段能够发生毛病的代码后,你需求利用PEAR的isError来检测是不是存在毛病,而且可使用PEAR_Error的getMessage来获得比来一次的毛病信息。注重:必定要在关头的中央利用利用PEAR::isError

利用raiseError

PHP4.0.5今后,PEAR多了2个函数:
setErrorHandling($mode, $options = null)
raiseError($message = null, $code = null, $mode = null,$options = null, $userinfo = null)


前者可以设置PEAR缺省的毛病处置形式,后者是一个包装函数,前往一个PEAR_Error的对象,和直接创立并前往PEAR_Error的对象略有分歧的是,假如省略$mode,$options等参数,它会利用缺省值来创立这个PEAR_Error的对象,这些缺省值你可使用setErrorHandling()来定制。

PEAR_Error
PEAR_Error是PEAR的毛病对象的一个基类,和PEAR分歧,普通来讲,你可以直接创立PEAR_Error的实例,创立体例:
$error = new PEAR_Error($message, $code, $mode, $options, $userinfo);

$message是你的毛病信息,$code是该毛病的毛病号,后3个参数是严密接洽的:
$mode:是这个毛病的处置形式,可以以下常量:
PEAR_ERROR_RETURN:仅仅前往该毛病对象(缺省体例)
PEAR_ERROR_PRINT:在构建函数中打印这个毛病信息,然而以后法式会持续运转。
PEAR_ERROR_TRIGGER:利用PHP的trigger_error() 触发一个毛病,假如你已设置了毛病处置函数,或你把PHP的毛病处置级别设置为E_USER_ERROR,那末以后法式将会被终止。
PEAR_ERROR_DIE:打印毛病并加入,法式终止。
PEAR_ERROR_CALLBACK:利用一个回调函数或办法来处置以后毛病,法式终止。
$options:这个参数只要在$mode是PEAR_ERROR_TRIGGER和PEAR_ERROR_CALLBACK的时分才起感化,假如是PEAR_ERROR_TRIGGER,$options必需是E_USER_NOTICE, E_USER_WARNING 或 E_USER_ERROR这3个常量的一个,同PHP中trigger_error的值分歧。假如$mode是PEAR_ERROR_CALLBACK,$options可所以一个字符串,内容是要回调的函数名,也能够是一个2元素的数组,分离是一个对象变量,和一个字符串(标明要挪用的办法)。
$userinfo:寄存附加的用户信息,你可以把相干的调试信息放在这里。

PEAR_Error中有一些经常使用的办法,这些办法在PHP文挡没有描写,这里逐一列出:

int getMode:前往以后的毛病处置形式,整型。
string getMessage:前往以后完全的毛病信息,字符串。
mixed getCallback:前往以后的回调信息,多是所回调的函数名,或是(对象,办法)的数组。
int getCode:前往整型的毛病代码。
string getType:前往毛病的类型,也就是以后的类名,字符串。
string getUserInfo:前往附加的用户信息,字符串。
string getDebugInfo:内容同上。
string toString:前往以后对象的具体字符串描写,内容包含毛病处置的形式,级别,毛病信息,毛病代码,相干回调函数等等。

总结
至此,关于PEAR的引见就停止了。归纳综合地说,假如你要做一个PEAR的扩大使用,需求这么做:

require_once "PEAR.php"
利用class your_pear_extend extends PEAR{}界说你的新类。
在你的类的机关函数中,挪用父类PEAR的机关函数:
function your_pear_extend{

$this->PEAR();

...
}



假如需求,界说你的析构函数 _your_pear_extend
假如需求,从PEAR_Error派生出你本人的毛病处置类
设置你的毛病处置形式,并在恰当的时分触发毛病。
在履行能够发生毛病的代码后,用PEAR::isError($obj)捕捉响应的毛病。
完成你本人的功效。
在最新的PHP4.05的PEAR中心宣布里,已有很多优异的使用模块了,好比:PHPDoc,Cache,HTML...固然,相对CPAN来讲,PEAR只是方才起步,需求PHP社区的人们的通力合作,来完美它,加强它,PHP才会愈来愈壮大。  模仿的不光是模仿,模仿的同时在加改进,就成了自己的作品了。
若相依 该用户已被删除
沙发
发表于 2015-2-4 13:11:35 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
活着的死人 该用户已被删除
板凳
发表于 2015-2-9 23:09:06 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
若天明 该用户已被删除
地板
发表于 2015-2-28 04:30:27 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
海妖 该用户已被删除
5#
发表于 2015-3-4 05:05:47 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
不帅 该用户已被删除
6#
发表于 2015-3-8 18:35:52 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
柔情似水 该用户已被删除
7#
发表于 2015-3-11 13:47:17 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
蒙在股里 该用户已被删除
8#
发表于 2015-3-15 20:41:38 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
因胸联盟 该用户已被删除
9#
发表于 2015-3-17 06:38:45 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
谁可相欹 该用户已被删除
10#
发表于 2015-3-20 17:02:46 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
爱飞 该用户已被删除
11#
发表于 2015-3-24 03:42:11 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
愤怒的大鸟 该用户已被删除
12#
发表于 2015-3-24 21:36:52 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
兰色精灵 该用户已被删除
13#
发表于 2015-4-1 18:18:03 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
山那边是海 该用户已被删除
14#
发表于 2015-4-9 03:51:27 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
第二个灵魂 该用户已被删除
15#
发表于 2015-4-12 16:02:16 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
老尸 该用户已被删除
16#
发表于 2015-4-17 01:41:23 | 只看该作者
当然这种网站的会员费就几十块钱。
小魔女 该用户已被删除
17#
发表于 2015-5-6 12:17:43 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
再见西城 该用户已被删除
18#
发表于 2015-7-9 08:12:22 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
admin 该用户已被删除
19#
发表于 2015-7-9 21:38:58 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
深爱那片海 该用户已被删除
20#
发表于 2015-7-10 05:58:13 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-28 13:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表