php魔术方法

魔术方法总结

__construct

实例化一个对象的时候触发,参数可以根据需求随意添加,可以用来初始化一些成员属性。

 
<?php
  class Girl
  {
    public $name;
    public $age;
    public $height;
  
    public function __construct($name,$age,$height)
      {
        $this->name = $name;
        $this->age = $age;
        $this->height = $height;
      }
    public function say()
      {
        echo '我叫'.$this->name;
        echo '身高'.$this->height;
      }
  }
$girl = new Girl('刘亦菲','30',170);
$girl -> say();

__destruct

脚本运行结束或者对象被销毁的时候会自动触发。

 
<?php
  class Boy
  {
    ....
      public function __destruct()
      {
        echo '脚本运行结束了';
      }
  }
$boy = new Boy();

__get

获取不可访问或不存在的成员属性的时候触发,参数就是属性名。

__set

设置不存在或者不可访问的成员属性的时候触发,参数是属性名,属性值。

 
<?php
  class WhiteFace
  {
    public $face;
    private $age;
    private $height;
    
    function __get($a)//获取值的时候
      {
        echo '我被调用了';
      }
  
  function __set($name,$value)
    {
      //echo $name;
      //echo $value;
    if($name == 'age'){
      $this->$name = $value;
      return;
    }
    return false;
    }
  }
$mei = new WhiteFace('屋里帅',25,180);
$mei->age;//$a就是调用的这个属性名。
$mei->height = 190;

__unset

触发时机:当用unset()销毁一个不存在或者不可访问的成员属性的时候被触发。

 
<?php
  class Cat
  {
    public $name;
    private $age;
    public $height;
  
  public function __unset($args)
    {
      echo $this->$args.'被销毁了';
    }
  }
$bosi = new Cat('波斯猫',10,20);l
  unset($bosi->age);//输出:10被销毁了。
  

__isset()

用empty()或isset()去判断一个不存在或者不可访问的成员属性的时候会被触发,参数是属性名。

 
<?php
  class Cat
  {
  .......
    public function __isset($arg)
      {
        return isset($this->$arg);
      }
  }
isset($bosi->age);

__invoke

将一个对象当做函数调用时会触发该方法,调用时传递了多少个参数这里就写多少个参数。

 
<?php
  class Dog
  {
    public $name = 'wang';
  
  public function wangwang()
    {
      echo '旺旺';
    }
  public function __invoke($a,$b,$c)
    {
      echo '将对象作为函数使用了';
    }
  }
$tai = new Dog();
$tai(100,200,300);

__toString

当echo一个对象的时候调用,这个函数里面返回什么字符串echo的时候就打印出什么。没有参数,但是有返回值,返回一个字符串,该字符串需要自己定制。

 
<?php
  class Dog
  {
    ......
      public function __toString()
      {
      return '我的姓名是'.$this->name;
    }
  }
$tai = new Dog();
echo $tai;

__debugInfo

当使用var_dump打印对象的时候会被调用。返回一个自定义的数组,数组里面是需要打印的东西,没有参数。

 
<?php
  class Dog
  {
    ......
      public function __debugInfo()
      {
        return ['name','age'];
      }
  }
$tai = new Dog();
var_dump($tai);

__call()

调用不存在或者不可访问的成员方法的时候会被触发

 
<?php
  class Dog
{
    .......
    function __call($name,$args)
    {
      var_dump($name);//函数名
      var_dump($args);
    }
 }
$tai =  new Dog();
$tai->eat(100,100);

__callStatic

调用不存在或者不可访问的成员方法时会被触发。

 
class Singer
  {
    public $name;
    
  private static function __callstatic()
    {
      echo '明星的生活';
    }
  }
$liu = new Singer();
$liu::living();

__autoload

在当前脚本中去加载一个不存在的类的时候会触发这个方法

 
<?php
  function __autoload($name)//$name就是类名
  {
    echo '我被调用了';
  $fileName = $name.'.php';
  include $fileName;
  }
    //include 'Car.php';
  //自动加载
    $bmw = new Car();
    $bmw->run();

__sleep

当序列化一个对象的时候会被触发,没有参数,返回一个数组,里面是你要序列化的属性。

 
<?php
  class Pig
  {
    public $name;
    public $tool;
  
    function __construct($name,$tool)
      {
        $this->name = $name;
        $this->tool = $tool;
      }
  
    function __sleep()
      {
        echo '我要睡觉了';
        return ['name','tool'];//选择你想序列化的属性
      }
  
    function __wakeup()
      {
        echo '我醒了'; 
        $this->kiss();
      
      }
  
    function kiss()
      {
        echo '么么哒';
      }
  }
$bajie = new Pig('猪八戒','钉耙');
//怎么将程序运行中的对象保存起来---》序列化。
$str = serialize($bajie);
//将序列化的字符串写到文件中
file_put_contents('bajie.php',$str);

__wakeup

当反序列化一个对象的时候会被触发。

__clone

当克隆一个对象的时候会被触发。

 
$er = clone $bajie;//克隆的对象跟原来的一模一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值