PHP类的定义

1.如何定义(抽象)一个类

类的基本结构如下:

class Person{
    
}
复制代码

1.面向对象的思想

面向对象(ObjectOriented,OO)

是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

2.面向对象的语法

1.成员属性

  • 即变量
  • 常用修饰符 public(公有) private(私有) protected(受保护) static
  • 4种标量 string int Boolean float
  • 定义成员属性,不可以有表达式!!!
    public $name = '小明';
    protected $age = 18;
    private $money = 100;
复制代码

2.成员方法

  • 即函数
  • 常用修饰符 public(公有) private(私有) protected(受保护) static abstrsct(抽象) final(最终)
    public function show(){
        return $this->name;
    }
复制代码

3.类的实例化

class Person{
    public $name = '小明';
    protected $age = 18;
    private $money = 100;
 
    public function show(){
        return $this->name;
    }
}
$Person = new Person(); //实例化一个类
复制代码

3.魔术方法

魔术方法说明
__construct(,类的构造函数
__destruct()类的析构函数
__call()在对象中调用一个不可访问方法时调用
__callStatic()用静态方式中调用一个不可访问方法时调用
__get()获得一个类的成员变量时调用
__set()设置一个类的成员变量时调用
__isset()当对不可访问属性调用isset()或empty()时调用
__unset()当对不可访问属性调用unset()时被调用。
__sleep()执行serialize()时,先会调用这个函数
__wakeup()执行unserialize()时,先会调用这个函数
__toString()类被当成字符串时的回应方法
__invoke()调用函数的方式调用一个对象时的回应方法
__set_state()调用var_export()导出类时,此静态方法会被调用。
__clone()当对象复制完成时调用
__autoload()尝试加载未定义的类
__debugInfo()打印所需调试信息

使用方法如下:

class Magic{
  public $var = 'test';
  
  //构造函数,在创建对象的时候调用
  public function __construct(){
    echo '__construct called'.PHP_EOL;
  }
  
  //某个对象的引用都被删除、对象被销毁、调用exit()后、脚本关闭时被调用
  public function __destruct(){
    echo '__destruct called'.PHP_EOL;
  }
  
  //当给不可访问或不存在属性赋值时被调用
  public function __set($name, $value){
    echo $name.'-'.$value;
    echo '__set called'.PHP_EOL;
  }
  
  //读取不可访问或不存在属性时被调用
  public function __get($name){
    echo $name;
    echo '__get called'.PHP_EOL;
  }
  
  //调用不可访问或不存在的方法时被调用
  public function __call($name, $arguments){
    echo $name . '-' . implode(',', $arguments);
    echo '__call called'.PHP_EOL;
  }
  
  //调用不可访问或不存在的静态方法时被调用
  public static function __callStatic($name, $arguments){
    echo $name . '-' . implode(',', $arguments);
    echo '__callStatic called'.PHP_EOL;
  }
  
  //对不可访问或不存在的属性调用isset()或empty()时被调用
  public function __isset($name){
    echo $name;
    echo '__isset called'.PHP_EOL;
    return true;
  }
  
  //对不可访问或不存在的属性进行unset时被调用
  public function __unset($name){
    echo $name;
    echo '__unset called'.PHP_EOL;
  }
  
  //serialize时被调用,当你不需要保存大对象的所有数据时很有用
  public function __sleep(){
    echo '__sleep called'.PHP_EOL;
    return array('var1111111111');
  }
  
  //unserialize时被调用,可用于做些对象的初始化操作
  public function __wakeup(){
    echo '__wakeup called'.PHP_EOL;
    $this->var = 'test after wakeup';
  }
  
  //当一个类被转换成字符串时被调用
  public function __toString(){
    return '__toString called'.PHP_EOL;
  }
  
  //进行对象clone时被调用,用来调整对象的克隆行为
  public function __clone(){
    echo '__clone called'.PHP_EOL;
  }
  
  //当以函数方式调用对象时被调用
  public function __invoke(){
    echo '__invoke called'.PHP_EOL;
  }
  
  //当调用var_export()导出类时,此静态方法被调用。用__set_state的返回值做为var_export的返回值。
  public static function __set_state($arr){
    return '__set_state called'.PHP_EOL;
  }
  
  //当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本
  public function __debuginfo($arr){
    echo '__debuginfo called'.PHP_EOL;
    return array('var' => 'test fro __debuginfo');
  }
}
  
$m = new Magic(); 
//__construct()被调用

$m->not_exist_property = test; 
//__set()被调用

echo $m->not_exist_property;
//__get()被调用

$m->abc(1,2,3); 
//__call()被调用

echo isset($m->not_exist_property); 
//__isset()被调用,返回bool值

unset($m->not_exist_property);
//__unset()被调用

echo $tmp = serialize($m); 
//__sleep()被调用

unserialize($tmp);
//__wakeup()被调用

$m1 = clone $m; 
//__clone()被调用,对象默认是引用传递,使用clone关键词则可实现对象复制

$m(); //__invoke()

eval( '$m2 = ' . var_export ( $m , true ) . ';' );
var_dump($m2);
var_dump($m);
//最后__destruct()被调用
复制代码

结果:

__construct called
not_exist_property-test__set called
not_exist_property__get called
abc-1,2,3__call called
not_exist_property__isset called
1not_exist_property__unset called
__sleep called
O:5:"Magic":1:{s:13:"var1111111111";N;}__wakeup called
__destruct called
__clone called
__invoke called
string(20) "__set_state called
"
class Magic#1 (1) {
 public $var =>
 string(4) "test"
}
__destruct called
__destruct called
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值