第五节--克隆 -- Classes and Objects in PHP5 [5]

 更新时间:2016年11月25日 16:32  点击:1940
第五节--克隆
PHP5中的对象模型通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone. 像__construct和__destruct一样,前面有两个下划线.
默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法).
克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象). 如果你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this. 如果你用__clone来复制. PHP不会执行任何隐性的复制,
下面显示了一个用系列序数来自动化对象的例子:
绿色c hinaip ower. com7AT0x
<?php
     class ObjectTracker //对象跟踪器
     {
         private static $nextSerial = 0;
         private $id;
         private $name;
         function __construct($name) //构造函数
         {
        $this->name = $name;
        $this->id = ++self::$nextSerial;
         }
         function __clone()  //克隆
         {
        $this->name = "Clone of $that->name";
        $this->id = ++self::$nextSerial;
         }
         function getId() //获取id属性的值
         {
        return($this->id);
         }
一、 在函数中,传递数组时使用 return 比使用 global 要高效,比如:
 
 
 
function userloginfo($usertemp){
$detail=explode("|",$usertemp);
return $detail;
}
$login=userloginfo($userdb);
 
  比
function userloginfo($usertemp){
global $detail;
$detail=explode("|",$usertemp);
}
userloginfo($userdb);
 
  要高效
  二、 (这个代码用于得到程序目录对应的网址,推荐使用)
$urlarray=explode('/',$HTTP_SERVER_VARS['REQUEST_URI']);
$urlcount=count($urlarray);unset($urlarray[$urlcount-1]);
$ofstarurl='http://'.$HTTP_SERVER_VARS['HTTP_HOST'].implode('/',$urlarray);
 
  这段代码比
$pre_urlarray=explode('/',$HTTP_SERVER_VARS['HTTP_REFERER']);
$pre_url=array_pop($pre_urlarray);
 
  要高效
  三、 在循环中判断时,数值判断使用恒等要比等于高效
  $a=2;$b=2;
  比如
if($a==$b)$c=$a;
  比
if($a===$b)$c=$a;
 
  高效
  四、 mysql 查询时尽量使用where in 少用 limit
  limit查多记录的前几条, 速度很快, 但是查询最面几条就会慢
  使用in .在查询连续性记录,非常快, 非连续性记录第一次运行会稍微慢一点,但是之后将比较快!
  五、 NT服务器数据操作稳定性不及unix/linux
  六、 输出前使用尽量使用 ob_start(); 可以加快输出速度,适用NT或nuli/linux,对unlix类服务器 如果使用 ob_start('ob_gzhandler');输出效率将更高
  七、 判断的时候尽量使用if($a==他的值) 否定的时候尽量使用if(empty($a)),因为这样程序运行更快速
 
 
  八、 使用不等时 != 与 <> 效率相当
  九、 个人经验得 使用 $a="11111111111111"; 的效率和 $a='11111111111111'; 相当.并不象书本说的相差很大
  十、 使用规范的SQL语句, 会有利于MySQL的解析
  十一、 使用
if($online){
$online1=$online;
setcookie('online1',$online,$cookietime,$ckpath,$ckdomain,$secure);
}
 
  COOKIE将马上生效
  使用
if($online)
PHP包含支持Expat 解析器的可选XML扩展。PHP中的XML相关函数可以让你创建一个解析器来处理有效的XML文档。如果你所使用的Apache版本为1.3.7后的版本,则不用添加任何函数库。所需要做的只是使用--with-xml配置PHP。
 在PHP手册中有好几个创建基于PHP的XML解析器很好的例子。此外,New Riders的Web Application Development with PHP 4.0对在PHP中使用XML有很好的概括,该书作者之一已在Zend.com 上撰写了大量指南。
 
如同对Java和COM支持一样,PHP对XML的支持还处于发展迅速的幼儿期。如果你已经具备Expat或LibXML相关经验,可以利用你的专门知识略过一些内容。
 
Julie Meloni 是i2i Interactive的技术主管,及Linux和开放源代码社区的大力推动者。她撰写了很多关于PHP及其他技术的书籍,并成为对CNET Builder.com具有长期贡献的专家。

能够检测大部分通过代理服务器访问的ip.
<?php
//beiji.com 2000.6.17
$ip = getenv("REMOTE_ADDR");
$v = getenv("HTTP_VIA");
$f = getenv("HTTP_X_FORWARDED_FOR");
$c = getenv("HTTP_XROXY_CONNECTION");
$o = getenv("HTTP_PRAGMA");
print '<br>REMOTE_ADDR';
print $ip;
if (($v=="")&&($f=="")&&($c=="")&&($o=="")){
print "<br>not through proxy";
}
else {
print "<br>through proxy";
print '<br>http_via: ';print $v;
print '<br>http_x_forwarded_for: ';print $f;
print '<br>http_xroxy_connection: ';print $c;
print '<br>http_pragma: ';print $o;
}
?>
及时交付应用程序是确定解决方案采用何种技术的关键所在,PHP借助于PEAR(PHP Extension and Application Repository:PHP扩展与应用库)会大大促进其开发过程。PEAR是一种代码库,它为标准程序功能提供预先编写的类,从而大大降低了应用程序的开发时间。PEAR在概念上类同于Perl的CPAN,PEAR包含了具有丰富特性的功能函数,包括数据库、邮件和错误处理等。在采用PEAR的情况下,开发人员就可以部署和增强已经编写的基本函数同时把注意力集中到编写程序新功能这一方面上来。
PEAR基础
创建PEAR的目的是为开发人员共享PHP代码和促进代码的重用提供一种标准化的方式。该项目始终处于开发的过程中,用户可以提交自己编写的代码供加入PEAR库使用,后者则同PHP捆绑。所有的PEAR包都在考虑到语法和可读性的情况下严格遵守编码规则,这些代码由用C语言编写的PHP或者PHP扩展所组成。
Stig Bakken于1999年晚些时候开始着手开发PEAR项目。他的目的是创建一个有组织的代码库,由这个代码库起到PHP开发人员团体的资源库作用。该项目在过去的两年里成长的非常快,目前已经包含了相当多的、非常有用的可重用代码。虽然其他的PHP代码库也不少,比如 Zend的Code Gallery和PHP Builder的Source Code Snippet Library等等都非常有名,但是,PEAR提供了一种便利函数之间互操作的标准。此外,提交给PEAR的代码会接受严格的检查,由这类标准和检查措施保证代码的质量和可靠性。
有用的网站
PEAR网站
php.net
Concurrent Versions System
Zend
可用的功能
PEAR分成三类:PEAR核心组件、PEAR包和PECL包。核心组件(Core Component)包括PEAR和PEAR_Error的基类以及数据库、HTTP、日志记录和电子邮件函数等。PEAR包包括提供认证、联网和文件系统特性的函数以及采用XML和HTML模版的工具等。PECL包是对PHP的扩展,它用C语言编写,并不遵守编码规则。目前,所有这一类的代码都是实验性的。要了解有关PEAR功能的更多信息请参考 PEAR在线手册。
假如你有兴趣给PEAR提交代码,你可以加入PEAR开发者邮件列表并且请求大家检查你的代码,从而实现以上目的。不过,你得注意到已经包括在库内的函数并且遵守PEAR的编码规则。
从哪里获取PEAR
PEAR捆绑在PHP发布包内,当你安装PHP的时候也就同时安装了PEAR。假如你打算获得一个稳定的版本,而且你可以在没有最新PEAR版本的情况下也活得下去,那么你可以从php.net的下载网页获得最新的PHP版本。假如你喜爱冒险,希望采用最新版本的PEAR,你可以按照匿名CVS访问的指示用CVS客户程序下载它。
[!--infotagslink--]

相关文章

  • PHP Fatal error: Cannot use object of type stdClass as array in错误

    下面一起来看看在php开发中碰到PHP Fatal error: Cannot use object of type stdClass as array in错误问题的解决办法吧。 普通的数组出现如下错误 代码...2016-11-25
  • VBS中FileSystemObject对象详解(完整版)

    今天在脚本之家看了几篇关于vbs FileSystemObject的一些资料,发现不够详细与完整这里刚好发现了一篇更好的文章特整理一下,需要的朋友可以参考下...2020-06-30
  • js如何打印object对象

    js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
  • java中JSONObject转换为HashMap(方法+main方法调用实例)

    这篇文章主要介绍了java中JSONObject转换为HashMap(方法+main方法调用实例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-14
  • 解决vue props传Array/Object类型值,子组件报错的情况

    这篇文章主要介绍了解决vue props传Array/Object类型值,子组件报错的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-07
  • 前端JavaScript中的class类

    这篇文章主要介绍了前端JavaScript中的class,类是用于创建对象的模板,JavaScript中的Class更多的还是语法糖,本质上绕不开原型链,下面就来看看关于JavaScript class类的详细内容吧...2021-10-22
  • 详解Javascript中的Object对象

    这篇文章主要介绍了详解Javascript中的Object对象,需要的朋友可以参考下...2016-03-01
  • idea 无法创建Scala class 选项的原因分析及解决办法汇总

    这篇文章主要介绍了idea 无法创建Scala class 选项的解决办法汇总,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Angular ng-class详解及实例代码

    这篇文章主要介绍了Angular ng-class的知识,并整理了相关资料,有兴趣的小伙伴可以参考下...2016-10-03
  • JavaScript类型系统之Object详解

    对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象...2016-01-08
  • 浅析Swift中struct与class的区别(汇编角度底层分析)

    这篇文章主要介绍了Swift中struct与class的区别 ,本文从汇编角度分析struct与class的区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-30
  • jquery采用oop模式class类的使用示例

    这篇文章主要介绍了jquery采用oop模式class类的使用方法,结合实例形式分析了jQuery模拟oop模式定义class类与方法的技巧,需要的朋友可以参考下...2016-01-24
  • Swift中static和class关键字的深入讲解

    这篇文章主要给大家介绍了关于Swift中static和class关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-30
  • idea克隆maven项目的方法步骤(图文)

    这篇文章主要介绍了idea克隆maven项目的方法步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-05
  • 深入理解JavaScript中的对象复制(Object Clone)

    下面小编就为大家带来一篇深入理解JavaScript中的对象复制(Object Clone)。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • React从Class方式转Hooks详解

    这篇文章主要介绍了React从Class方式转Hooks详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-30
  • C#中 dynamic、Object和var之间的实际区别是什么?何时使用它们?

    dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能。 什么是动态编程语言有时可以划分为静态类型化语言和动态类型化语言。C#和Java经常被认为是静...2020-05-11
  • AngularJS使用ng-class动态增减class样式的方法示例

    这篇文章主要介绍了AngularJS使用ng-class动态增减class样式的方法,结合具体实例形式分析了ng-class操作页面class样式的相关技巧,需要的朋友可以参考下...2017-05-22
  • c# 所有类型都从Object类型派生

    所有的类型最终从object派生,每一个类型都有一组最基本的方法...2020-06-25
  • JavaScript操作class和style样式代码详解

    这篇文章主要介绍了JavaScript操作class和style样式的相关资料,需要的朋友可以参考下...2016-02-18