您的位置:首页 > 其它

类、对象、属性、方法

2017-08-25 14:04 162 查看
一、类和对象
    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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: