• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP关于对象知识总结

php 搞代码 4年前 (2022-01-22) 33次浏览 已收录 0个评论

这篇文章主要介绍了PHP对象相关知识总结的相关资料,需要的朋友可以参考下

对象传递:一种说法是“PHP对象是通过引用传递的”,更准确的说法是别名(标识符)传递,即它们都保存着同一个标识符(ID)的拷贝,这个标识符指向同一个对象的真正内容。

 <?php class A {   public $foo = 1; }   $a = new A; $b = $a;   // $a ,$b都是同一个标识符的拷贝       // ($a) = ($b) = <id> $b->foo = 2; echo $a->foo."\n";//2 $c = new A; $d = &$c;  // $c ,$d是引用       // ($c,$d) = <id>  $d->foo = 2; echo $c->foo."\n";//2  $e =<strong>+本文来源gao@daima#com搞(%代@#码网</strong><pre>搞代gaodaima码

new A; function foo($obj) { // ($obj) = ($e) = <id> $obj->foo = 2; } foo($e); echo $e->foo."\n";//2

•对象复制:对象复制可以通过 clone 关键字来完成,如果原对象定义了 __clone() 方法,则新对象中的 __clone() 方法将在复制完后被调用,__clone() 方法可用于修改复制对象属性的值。当对象被复制后,会对对象的所有属性执行一个浅复制(shallow copy),但所有的引用属性仍然会是一个指向原来的变量的引用。

 <?php class SubObject {   static $instances = 0;   public $instance;    public function __construct()   {     $this->instance = ++self::$instances;   }    public function __clone()   {     $this->instance = ++self::$instances;   } }  class MyCloneable {   public $object1;   public $object2;    function __clone()   {     // 强制复制一份this->object, 否则仍然指向同一个对象     $this->object1 = clone $this->object1;   }      function cloneTest()   {     echo 'cloneTest';   } }  $obj = new MyCloneable();  $obj->object1 = new SubObject(); $obj->object2 = new SubObject();  $obj2 = clone $obj;  print("Original Object:\n"); print_r($obj);  print("Cloned Object:\n"); print_r($obj2); echo $obj2->cloneTest().":\n"; echo (new Reflectionclass($obj2));

上例输出结果:

Original Object:MyCloneable Object(  [object1] => SubObject Object    (      [instance] => 1    )  [object2] => SubObject Object    (      [instance] => 2    ))Cloned Object:MyCloneable Object(  [object1] => SubObject Object    (      [instance] => 3    )  [object2] => SubObject Object    (      [instance] => 2    ))cloneTest:Class [ <user> class MyCloneable ] { @@ /public/t.php 18-33 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [2] {  Property [ <default> public $object1 ]  Property [ <default> public $object2 ] } - Methods [2] {  Method [ <user> public method __clone ] {   @@ /public/t.php 23 - 27  }  Method [ <user> public method cloneTest ] {   @@ /public/t.php 29 - 32  } }}

•对象遍历: foreach只能遍历对象的可见属性,无法遍历其方法,实现起来比较容易;另外,也可通过实现Iterator接口或IteratorAggregate接口的方法遍历对象属性。

•类型约束: PHP作为一种弱类型语言,类型约束可以让编程更加规范,也少出些差错;类型约束不只能用在对象定义中,也能用在函数定义中。类型约束可指定对象、接口、array、callable(闭包callback),类型约束用来保证实际数据类型与原型定义一致,不一致则抛出一个可捕获的致命错误;不过如果定义了默认值为NULL,那么实参可以是NULL;类型约束不能用于标量类型如 int 或 string,Traits 也不允许。

•对象序列化与还原:函数serialize()可将打成包含字节流的字符串便于存储对象,函数unserialize()能够还原字符串为对象。但有一个前提是,无论序列化还是反序列化,对象的类定义已经完成,即需要先导入类(文件)。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP关于对象知识总结

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址