类、对象、属性、方法

一、类和对象
    1、官方定义
        类:具有相同特征(属性和行为)的事物的抽象
        对象:某个类的具象(具体的个体)
    2、编程语言
        类:是一种自定义的数据类型
        对象:自定义类型的一个变量
    3、实例分析(人类)
        属性:姓名,身高,年龄,体重,...
        行为:吃饭,睡觉,打豆豆,...

二、基本语法
    1、定义类的关键字是class,类的内容(属性和方法)用{}括起来
    2、所有的属性和方法前都必须有修饰:public、private、protect
    3、属性其实就是变量,所谓行为其实就是方法/函数
    4、创建对象使用关键字new
    5、访问成员属性和方法使用'->',
        如:$xiaoming->name;
              $xiaoming->eat();
        注:属性访问时不用加$,方法访问时不用加fonction
    6、成员属性可以有默认值,用法与普通变量一样
    7、成员方法中访问其它方法或属性,使用$this,表示当前对象,谁调用表示谁
        注:this相当于一个变量,并不是关键字

三、创建对象
     $p1 = new Person;      #类中没有构造方法或构造方法没有参数
     $p2 = new Person();    #标准形式,无论有误构造方法
     $p3 = clone $p2;        #克隆一个对象,得到一个新的对象,即使是单利对象
     $p4 = new $p3;          #根据一个对象创建该对象所属的类的对象
     对象的赋值:
     $p5 = $p4;                 #赋值方法不会创建新的对象,而是多了一个引用
           说明:对象的赋值,其实是引用

四、魔术方法
      说明:
          1、当特定的时刻系统会自动调用的方法,他们都是以'__'开头,不能手动调用。
          2、当多个对象被创建时,构造方法是先按正常顺序依次调用,程序结束时,析构函数是按照反顺序依次调用。栈的原理:先进后出
          3、构造函数也可以被继承,当子类没有定义构造函数时
方法名 触发时机 参数 返回值
__construct (构造方法)创建新对象 根据需要设置
__destruct (析构方法)对象销毁时
__toString 对象当作字符串处理时 字符串
__invoke 对象当作函数调用时 根据需要 根据需要
__debugInfo 使用var_dump打印对象时 数组
__clone 使用clone克隆对象时
__sleep 使用serialize函数序列化对象时 数组
__wakeup 使用unserialize函数反序列化生产对象时
__get 访问无法访问的属性时 属性名 根据需要
__set 设置无法访问的属性时 属性名,属性值
__isset 使用isset()或empty()判断无法访问的属性时 属性名 根据需要
__unset 使用unset()销毁无法访问的属性时 属性名
__callStatic(静态方法) 调用无法访问的静态方法时 方法名,参数 根据需要
__call 调用无法访问的普通方法时 方法名,参数 根据需要

五、魔术常量
  __LINE__           变量所在行
 __FILE__           文件名
 __DIR__            文件路径
 __FUNCTION__       返回函数名
 __CLASS__          类名(一般在类中时用)
 __METHOD__         返回类里面方法名(一般在类中时用)
 __NAMESPACE__      名称空间
 __TRAIT__          过去trait名(一般在trait中使用)

六、相关函数
  get_object_vars:     返回可见的对象属性构成的关联数组
 get_class:           返回一个对象所属的类的类名,在类的内部使用时可以不传递对象
 get_class_vars:      返回一个类的属性数组
 get_class_methods:   返回一个类的方法数组
 instanceof:          判断一个对象是否属于某个类,或一个对象的类是否实现了某个接口(并非函数)
    一般用作if条件判断:
     if($obj instanceof 类名)
     if($obj instanceof 接口名)
 is_subclass_of:      判断一个对象所属的类是否是某个类的子类
 get_parent_class:    获取父类的类名
 class_exists:        判断类是否存在

七、命名规范
     1、类名要使用大驼峰命名法,如:UserModel
     2、成员属性和方法名使用小驼峰,如:$userName


练习
1、小明手里有两张牌,左手♥K,右手♠A,问:小明交换两手的排,手里各有什么?
   思路:
        1. 先找对象
        2. 根据对象抽象类
        3. 按照逻辑一步一步处理
2、设计一个分数类
   属性:num1,num2
   方法:add,sub,mul,div









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值