zoukankan      html  css  js  c++  java
  • [学习] php对象

    php对象

    php里需要通过类来创建对象,每一个对象都有对应的类。

    php 对象clone

    对象clone的语法:

    $copy_of_object = clone $object;
    

    当对象被复制后,PHP 5 会对对象的所有属性执行一个浅复制(shallow copy)。所有的引用属性 仍然会是一个指向原来的变量的引用。

    例子:

    // php 版本5.6.9
    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;
        }
    }
    
    
    $obj = new MyCloneable();
    
    $obj->object1 = new SubObject(); // 类SubObject的构造函数调用,$instances为1,$instance为1
    $obj->object2 = new SubObject(); // 类SubObject的构造函数调用,$instances为2,$instance为2
    
    $obj2 = clone $obj; // MyCloneable类的__clone执行,__clone()内部又clone了SubObject的实例$object1,所以SubObject的__clone()执行,此时SubObject类的$instances为3,$obj2->object1的$instance为3。
    
    
    print("Original Object:
    ");
    print_r($obj);
    
    print("Cloned Object:
    ");
    print_r($obj2);
    

    上面例子中$obj2->object2为引用属性,和$obj->object2指向同一个对象。

    $obj2->object2->instance = 100;
    print_r($obj); // $obj->object2->instance的值也变成了100
    

    数组不是引用赋值,这点与js不同:

    // php 版本5.6.9
    // php 官方手册评论区的例子
    class MyClass {
    
        private $myArray = array();
        function pushSomethingToArray($var) {
            array_push($this->myArray, $var);
        }
        function getArray() {
            return $this->myArray;
        }
    
    }
    
    //push some values to the myArray of Mainclass
    $myObj = new MyClass();
    $myObj->pushSomethingToArray('blue');
    $myObj->pushSomethingToArray('orange');
    $myObjClone = clone $myObj;
    $myObj->pushSomethingToArray('pink');
    
    //testing
    print_r($myObj->getArray());     //Array([0] => blue,[1] => orange,[2] => pink)
    print_r($myObjClone->getArray());//Array([0] => blue,[1] => orange)
    //so array  cloned
    

    上面例子中clone对象的同时,值为数组的属性也clone了。

    php 对象比较

    当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。

    而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。

  • 相关阅读:
    ORA00911: 无效字符
    在创建外键约束时追加on delete cascade或on delete set null
    仿58同城下拉菜单
    经典SQL语句大全
    Substitution 使用方法 页面缓存时的局部刷新
    解决IE8开发人员工具无法使用的问题
    ASP.NET 页面缓存 @ OutputCache
    关于clientWidth、offsetWidth、clientHeight、offsetHeight的测试比较
    调用ThunderAgent 迅雷局域网版的开发
    仿58同城 tips 鼠标悬停提示 类似title、alt
  • 原文地址:https://www.cnblogs.com/fogwind/p/15204442.html
Copyright © 2011-2022 走看看