php -- 魔术方法 之 对象克隆 : __clone()

产生对象的方法:

1、从类产生对象。new,通过new去堆区开辟一块内存空间

2、从对象产生对象。clone,通过关键字clone,将一个对象完整的复制一份,新开辟一块内存空间,将复制的结果存放到该内存里面

语法:新对象(变量) = clone 老对象(变量)

对象克隆:__clone()

当一个对象被clone的时候,被克隆的对象会自动调用__clone()方法,克隆方法不走构造方法

<?php

    //对象克隆
    class Person{
        //属性
        public $name;
        private $age;

        //静态属性
        public static $counts = 0;

        //方法
        public function __construct($name,$age){
            $this->name = $name;
            $this->age  = $age;

            //计数
            self::$counts++;
        }

        public function setAge($age){
            $this->age = $age;
        }

        public function getAge(){
            return $this->age;
        }

        //克隆魔术方法
        public function __clone(){
            //计数
            self::$counts++;

            //使用对象
            var_dump($this);
        }
    }
    echo ‘<pre>‘;

    //实例化
    $person = new Person(‘周芷若‘,15);
    var_dump($person);

    //克隆对象
    $person1 = clone $person;
    var_dump($person1);

    //修改对象
    $person1->name = ‘张无忌‘;
    var_dump($person1);

    //输出对象
    echo Person::$counts;                
时间: 2024-11-01 00:51:52

php -- 魔术方法 之 对象克隆 : __clone()的相关文章

php -- 魔术方法 之 对象输出 : __toString()

对象输出:__toString() 当一个对象被当做字符串进行输出时(echo,print),会调用__toString()方法 <?php //输出对象 class Person{ //属性 public $name; private $age; //方法 public function __construct($name,$age){ $this->name = $name; $this->age = $age; } public function setAge($age){ $th

OOP的魔术方法

1.构造函数:__construct(): 构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数. function __construct($name){ $this -> name = $name; } 2.析构函数:__destruct(): ①析构函数在对象被销毁释放之前自动调用: ②析构函数不能带有任何的参数: ③析构函数常用于对象使用完以后,释放资源,关闭资源等. function __destruct(){ echo "over!&quo

PHP 对象 魔术方法

<?php header('content-type:text/html;charset=utf-8'); /*  * __construct()构造方法  * 在对象初始化时自动调用  * __destruct()析构方法  * 在对象释放资源时自动调用  * __get()取值  * 在取私有属性值时自动调用  * __set()设置值  * 在设置私有属性值自动调用  * __isset()判断值  * 在使用isset()判断私有属性是否存在时自动调用  * __unset()释放值  

PHP 魔术方法 __clone __toString(五)

__clone() - 当对象克隆的时候自动加载此方法 __toString() - 当对象需要echo打印输出的时候自动加载此方法 __clone() <?php class example{ public static $pa; public $pb; public function __construct(){ $this->pb = ++self::$pa; } public function __clone(){ $this->pb = 'no zuo no die'; } }

魔术方法__clone(), __toString(), __call(), __autoload(), __sleep()和__wakeup()详解

一.魔术方法__clone() <?php class demo{ public $name; public $age; public function __construct($name,$age){ $this -> name = $name; $this -> age = $age; } public function say(){ echo "say".$this->name; } //在克隆对象时自动调用 //作用:可以对新对象的成员属性进行赋值 pu

PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload

1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $value ) 给一个未定义的属性赋值时调用: 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性). 2.__isset.__unset __isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法: _

PHP中的魔术方法:__construct, __destruct , __call,__get, __set, __isset, __unset , __toString, __set,__clone and __autoload

1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $value ) 给一个未定义的属性赋值时调用: 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性). 2.__isset.__unset __isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法: _

phpz中的魔术方法__call、__set、__get、__sleep、__invoke、__autoload、__construct、__destruct、__clone、__tostring、__callstatic

PHP5.3新增了一个叫做__invoke的魔术方法,这样在创建实例后,可以直接调用对象. class testClass { public function __invoke { print “hello world”; } } $n = new testClass; $n(); 执行结果为: hello world. 官方示例 class CallableClass { public function __invoke($x) { var_dump($x); } } $obj = new C

php类知识---最疯狂的魔术方法serialize,_sleep,__wakeup,unserialize,__autoload,__clone

serialize-----把实例化的对象写入文件 <?php class mycoach { public function __construct($name,$age,$expertin=[]){ $this->name = $name; $this->age = $age; $this->expertin=[]; $this->expertin=$expertin; } public function __sleep() { return ['name','age',