博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP类的定义
阅读量:6855 次
发布时间:2019-06-26

本文共 4052 字,大约阅读时间需要 13 分钟。

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 callednot_exist_property-test__set callednot_exist_property__get calledabc-1,2,3__call callednot_exist_property__isset called1not_exist_property__unset called__sleep calledO:5:"Magic":1:{s:13:"var1111111111";N;}__wakeup called__destruct called__clone called__invoke calledstring(20) "__set_state called"class Magic#1 (1) { public $var => string(4) "test"}__destruct called__destruct called复制代码

转载地址:http://lmiyl.baihongyu.com/

你可能感兴趣的文章
GIT在windows下搭建
查看>>
shell编程系列26--大型脚本工具开发实战
查看>>
如何改变PMO在组织中的尴尬处境的?
查看>>
sys.argv[]
查看>>
What's the best Linux server for you? == 最佳Linux服务器发行版
查看>>
docker swarm英文文档学习-1-概述
查看>>
Bootstrap网格
查看>>
IM(XMPP)介绍
查看>>
HDU3188 Just A Triangle【水题】
查看>>
HDU3782 xxx定律【数学计算+水题】
查看>>
趣味程序之趣味系列
查看>>
8.使用下拉列表框进行多选
查看>>
@responseBody注解的使用
查看>>
用maven在eclipse中创建Web项目
查看>>
移动端web开发JS使用Date()的值为invalid Date或者为NaN
查看>>
聊一聊python的单例模式
查看>>
redis应用场景:实现简单计数器-防止刷单
查看>>
python——元组和字典学习笔记
查看>>
面试遇到的问题(被虐了就更新)
查看>>
Windows Phone 8.1 数据处理
查看>>