php5个常用魔术方法

<?php


class Person
{
    public $name;
    public $age;

    /**
     * moshu constructor.
     * @param $name
     * @param $age
     * 执行时机:在使用 new关键字使用类实例化一个对象时自动执行
     * 功能作用:通常用于对对象的属性进行初始化
     */
    public function __construct($name,$age)
    {
        $this->name = $name;
        $this->age = $age;
        print '对象已经创建';
    }

    /**
     * 执行时机:在对象被销毁(unset或PHP执行结束)时自动执行
     * 功能作用:通常用于释放对象占用的第三方资源(如:数据库)
     */
    public function __destruct(){
        print '对象已经销毁';
    }

    /**
     * @return mixed
     * 执行时机:在对象被当成字符串使用时自动执行
     * 功能作用:兼容对象的字符串调用形式,根据用户需求显示出对象的字符串形态
     */
    public function __toString()
    {
       return $this->name;
    }

    /**
     * 执行时机:在对象被当成函数使用时自动执行
     * 功能作用:兼容对象的函数调用形式,允许用户像使用函数一样使用对象
     */
    public function __invoke()
    {
        echo '姓名:'.$this->name.'年龄:'.$this->age;
    }

    public function __clone()
    {
        echo '谁在克隆我?';
    }
}

$m1 = new Person('单凌峰','25');
//echo $m1->name; //对象已经创建 单凌峰 对象已经销毁

//unset($m1);  //对象已经创建 对象已经销毁

//echo $m1.'在吃饭';  //对象已经创建 单凌峰在吃饭 对象已经销毁

//$m1(); //对象已经创建  姓名:单凌峰年龄:25 对象已经销毁

$m2 = clone $m1; //对象已经创建  谁在克隆我? 对象已经销毁  对象已经销毁

还有一些不经常使用的魔术方法,例如:

1、__get、__set

这两个方法是为在类和他们的父类中没有声明的属性而设计的

    __get( $property )       当调用一个未定义的属性时访问此方法
    __set( $property, $value )    给一个未定义的属性赋值时调用

这里的没有声明包括访问控制为proteced,private的属性(即没有权限访问的属性)

2、__isset、__unset

    __isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法
    __unset( $property ) 当在一个未定义的属性上调用unset()函数时调用此方法

与__get方法和__set方法相同,这里的没有声明包括访问控制为proteced,private的属性(即没有权限访问的属性)
3、__call

__call( $method, $arg_array ) 当调用一个未定义(包括没有权限访问)的方法是调用此方法

4、__autoload

__autoload 函数,使用尚未被定义的类时自动调用。通过此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

注意: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值