【php】面向对象(三)

知识点关键词:FSCICATS
一、 f => final:
  a) 是一个修饰符,用来修饰类和成员方法
  b) 使用final修饰符修饰的类不能被继承,使用final修饰符修饰的成员方法,不能被重写;
  c) 好比是专利、知识产权
二、 S => static:
  a) 是一个修饰符,用来修饰成员属性和成员方法
  b) 修饰成员属性:
    i. 使用的方法:static修饰符可以配合PPP修饰符进行修饰成员属性修饰
      1. Public static $name;
    ii. 作用:其实就是将使用静态修饰符修饰的成员属性变为共有存在的属性
    iii. 访问形式:
      1. 在类的内部:self::属性名;
      2. 在类的外部:类名::属性名;
  c) 修饰成员方法:
    i. 使用的方法:static修饰符可以配合PPP修饰符进行成员方法修饰
      1. Public static function sing();
    ii. 注意事项:被static修饰符所修饰的成员方法,只能操作静态成员属性,和静态成员方法,也就是说在静态成员方法中不能有$this
    iii. 访问形式:
      1. 在类的内部:self::方法名();
      2. 在类的外部:类名::方法名();
三、 单例模式:
  a) 目标:想在脚本当中只实例化一次该对象\
  b) 步骤:
    i. 将构造方法私有化
    ii. 定义判断是否为第一次实例化的一个静态成员属性,用于存放实例化的对象的
    iii. 定义静态成员方法,将实例化结果返回到调用出

 1 //单例模式
 2 class Obj{
 3     //定义静态成员属性
 4     public static $o = null;
 5
 6     //构造方法私有化
 7     private function __construct(){
 8
 9     }
10
11     //在类的内部去实例化本对象
12     public static function getObj(){
13         if(self::$o==null){
14             self::$o = new Obj();
15         }
16         return self::$o;
17     }
18
19 }
20
21 $a = Obj::getObj();
22 $b = Obj::getObj();
23 $c = Obj::getObj();
24 ar_dump($a);        //D:\wamp\www\lamp183\lesson30_oop3\5.php:25:
25 object(Obj)[1]
26 var_dump($b);        //D:\wamp\www\lamp183\lesson30_oop3\5.php:25:
27 object(Obj)[1]
28 var_dump($c);        //D:\wamp\www\lamp183\lesson30_oop3\5.php:25:
29 object(Obj)[1]

四、 C => const
  a) 这是一个关键字
  b) 作用:用来定义一个常量
  c) 格式:const 常量名 = 常量值;
  d) 注意:
    i. Define可以在流程控制当中定义
    ii. Const不可以在流程控制当中定义
    iii. 常量可能的值:四种标量类型的值+null空型
  e) 类常量的访问方式:
    i. 在类的内部:self::常量名
    ii. 在类的外部:类名::常量名
五、 I => instanceof
  a) 是一个运算符
  b) 作用:用来判断一个对象是否属于该类或父类
  c) 格式:对象 instanceof 类名; 如果为真说明该对象属于该类,否则不属于
  d) 滴血认亲

 1 class GrandPa{
 2
 3 }
 4
 5 class Father extends GrandPa{
 6
 7 }
 8
 9 class Son extends Father{
10
11 }
12
13 class Gebi{
14
16 }
17
18 //实例化一个儿子类
19 $me = new Son();
20
21 //查看对象是否是由Son类实例化的
22 var_dump($me instanceof Son);        //D:\wamp\www\lamp183\lesson30_oop3\7.php:24:boolean true
23 var_dump($me instanceof Father);    //D:\wamp\www\lamp183\lesson30_oop3\7.php:25:boolean true
24 var_dump($me instanceof GrandPa);    //D:\wamp\www\lamp183\lesson30_oop3\7.php:26:boolean true
25 var_dump($me instanceof Gebi);        //D:\wamp\www\lamp183\lesson30_oop3\7.php:27:boolean false

六、 C => clone
  a) 是一个关键字,可以将一个对象克隆出另一份
  b) 格式:$a = clone $b;
  c) 魔术方法:__clone
    i. 自动执行场景:当我们对一个对象进行克隆的时候,会自动调用该方法
  d) 作用:为了初始化当前新创建出来的对象的信息

 1 class Twins{
 2
 3     //成员属性
 4     public $name;
 5     public $age;
 6
 7     //构造方法
 8     public function __construct($name,$age){
 9         $this->name = $name;
10         $this->age = $age;
11     }
12
13     //成员方法
14     public function dance(){
15         echo ‘我正在跳舞中,么么哒……‘;
16     }
17
18     //当我们对一个对象进行克隆的时候,会自动调用的一个方法
19     public function __clone(){
20         $this->name = ‘Mandy‘;
21         $this->age = 15;
22     }
23
24 }
25
26 $sandy = new Twins(‘sandy‘,15);
27 $mandy = clone $sandy;    //执行了一个克隆
28
29 var_dump($sandy);
30 //结果
31 object(Twins)[1]
32   public ‘name‘ => string ‘sandy‘ (length=5)
33   public ‘age‘ => int 15
34
35 var_dump($mandy);
36 //结果
37 object(Twins)[2]
38   public ‘name‘ => string ‘Mandy‘ (length=5)
39   public ‘age‘ => int 15

七、 A => __autoload
  a) 这是一个魔术函数
  b) 触发场景:当我们实例化一个不存在的类的时候,或者继承一个不存在的类的时候,会自动调用
  c) Spl_autoload_register:可以对__autoload函数进行重命名,重命名之后,则必须使用新名进行操作

 1 // 魔术函数__autoload,在实例化或继承一个不存在的类时,自动调用
 2 function __autoload($name){
 3     if(file_exists(‘./Libs/‘.$name.‘.class.php‘)){
 4         include ‘./Libs/‘.$name.‘.class.php‘;
 5     }elseif(file_exists(‘./Class/‘.$name.‘.class.php‘)){
 6         include ‘./Class/‘.$name.‘.class.php‘;
 7     }
 8 }
 9
10 // 将类文件引入
11 include ‘./Libs/upload.class.php‘;
12 include ‘./Libs/model.class.php‘;
13
14 // 实例化不存在的类时
15 $a = new User();
16 var_dump($a);
17 //结果
18 object(User)[1]

八、 T => __toString
a) 是一个魔术方法
b) 触发场景:当我们对一个对象进行字符串操作的时候会自动进行调用
c) 作用:代替对象进行字符串输出
d) 注意:必须返回一个字符串类型的值

 1 //定义一个
 2 class SuperMan{
 3
 4     //成员属性
 5     public $name;
 6     public $age;
 7     public $tall;
 8
 9     //成员方法
10     public function __construct($name,$age,$tall){
11         $this->name = $name;
12         $this->age = $age;
13         $this->tall = $tall;
14     }
15
16     public function fly(){
17         echo ‘我正在飞……带你装X带你飞,带你飞进垃圾堆……‘;
18     }
19
20     //当我们使用echo对对象进行输出时,会自动调用
21     public function __tostring(){
22         return ‘我是超人,我怕谁!!‘;
23     }
24
25 }
26
27 $kent = new SuperMan(‘肯特‘,45,‘185cm‘);
28
29 echo $kent;        //我是超人,我怕谁!!

九、 S => serialize(串行化、序列化)
  a) 是一个函数
  b) 它能够将一个数组或一个对象变成字符串
  c) 将数组转换成字符串
    i. a:4:{i:0;s:5:"apple";i:1;s:6:"banana";i:2;s:6:"orange";i:3;s:5:"xigua";}
      1. a:变量的数据类型 a => array
      2. 4:数组中的单元格数 有4个单元、有4个元素
      3. I:数组中第一个元素的下标类型 I => int
      4. 0 :下标的值
      5. S : 数组中第一个元素的值的类型 s => string
      6. 5 :数组中第一个元素的值的长度 单位:字节
      7. Apple:值的内容
  d) 将对象转换成字符串:
    i. O:8:"SuperMan":3:{s:4:"name";s:6:"海波";s:3:"age";i:18;s:4:"tall";s:5:"180cm";}
      1. O :变量的数据类型 o=>object
      2. 8:类名的成都(字节)
      3. SuperMan:类名
      4. 3:类当中有3个属性
      5. S:第一个属性的类型 s => string
      6. 4:属性名的长度(字节)
      7. Name:属性名
      8. S:属性对应的值的类型 s => string
      9. 6:属性值的长度(字节)
      10. 海波:属性值的内容
  e) 魔术方法:__sleep
    i. 自动执行场景:当我们对一个对象进行串行化的时候,会自动调用
    ii. 作用:可以方便我们对串行化数据的一个筛选
    iii. 注意:该方法返回的必须是一个数组
十、 U => unserialize(反串行化、反序列化)
  a) 这是一个函数
  b) 作用:可以将串行化的数据反串行化成数组或对象
  c) 魔术方法:__wakeup
    i. 自动执行场景:当我们对一个对象进行反串行化的时候,会自动调用
    ii. 作用:可以方便我们修改对象的成员属性的内容

 1 //定义了一个类
 2 class SuperMan{
 3
 4     //成员属性
 5     public $name;
 6     public $age;
 7     public $tall;
 8
 9     //成员方法
10     public function __construct($name,$age,$tall){
11         $this->name = $name;
12         $this->age = $age;
13         $this->tall = $tall;
14     }
15
16     //__sleep魔术方法
17     public function __sleep(){
18         return array(‘name‘,‘tall‘);
19     }
20
21     //__wakeup魔术方法
22     public function __wakeup(){
23         $this->name = ‘仉浩焱‘;
24         $this->age = 50;
25         $this->tall = ‘140cm‘;
26     }
27 }
28
29 //实例化对象
30 $haibo = new SuperMan(‘许超‘,18,‘160cm‘);
31
32 //将对象串行化
33 $contents = serialize($haibo);
34 var_dump($contents);
35 //结果
36 string ‘O:8:"SuperMan":2:{s:4:"name";s:6:"许超";s:4:"tall";s:5:"160cm";}‘
37
38 //反串行化:
39 $jiji = unserialize($contents);
40 var_dump($jiji);
41 //结果
42 object(SuperMan)[2]
43   public ‘name‘ => string ‘仉浩焱‘ (length=9)
44   public ‘age‘ => int 50
45   public ‘tall‘ => string ‘140cm‘ (length=5)
时间: 2025-01-13 06:59:11

【php】面向对象(三)的相关文章

面向对象三要素

面向对象三要素 Posted on 2009-12-11 09:06 我不是高手 阅读(3595) 评论(1) 编辑 收藏 面向对象三要素是:封装 继承 多态 封装 封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏. 继承 面向对象编程 (OOP) 语言的一个主要功能就是“继承”.继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承创建的新类称为“子类”或“派生类”. 被继承的类称为“基类”.“父类”或“超类”. 继承的过程,

面向对象三要素:封装,继承,多态

面向对象三要素是:封装 继承 多态 封装 封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏. 继承 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承创建的新类称为"子类"或"派生类". 被继承的类称为"基类"."父类"或"超类". 继承的过程,就是从一般到特

PHP面向对象(三)

一.继承概念 继承性也是面向对象程序设计中的重要特性之一.它是指建立一个新的派生类,从一个先前定义的类中继承数据和函数,而且可以重新定义新的数据类型和函数,从而建立累的层次或等级关系. 格式: [修饰符] class 子类名 extends 父类名 { ... } 假如B类继承A类,那么 从内存上来讲:B继承了A中所有的属性和方法:但是父类中的private部分不能直接访问 从使用上来讲:B继承了A中所有非私有的属性和方法 其中A叫父类(基类). B叫子类(派生类) PHP只支持单继承,不允许多

JavaScript 面向对象(三) —— 高级篇

JavaScript 面向对象(一) —— 基础篇 JavaScript 面向对象(二) —— 案例篇 一.json方式的面向对象 首先要知道,js中出现的东西都能够放到json中.关于json数据格式这里推荐一篇博客:JSON 数据格式 先看下json创建的简单对象:相比基础篇中的构造函数.原型等的创建方式,json方式简单方便:但是缺点很明显,如果想创建多个对象,那么会产生大量重复代码,不可取. JSON方式适用于只创建一个对象的情况,代码简介又优雅. 1 <!DOCTYPE html>

面向对象 三个基本特征 五项基本原则

三个基本元素: 1. 封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象. 2. 继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继 承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变

Python面向对象(三)

一.绑定方法与非绑定方法 一.绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上一个装饰器@classmethod 二.非绑定方法:既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,普通函数没有自动传值的效果 案例如下: class Foo: def f1(self): print(self) @classmethod def f2(cl

面向对象 三 (三大特性)

封装,继承,多态 一:  了解什么是封装: 就象一个盒子,你不需要知道里面有什么东西,只知道它有那些用处就行,能够为你提供相对应的方法. 封装的意义: 封装的意义在于保护或者防止代码(数据)被我们无意中破坏. 保护成员属性,不让类以外的程序直接访问和修改: 隐藏方法细节 关于对象封装的原则: 内聚:内聚是指一个模块内部各个部分之间的关联程度 耦合:耦合指各个模块之前的关联程度 封装原则:隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别 在面向对象方法中,用类来实现上面的要求.用类实

Javascript面向对象三:非构造函数的继承

一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做"医生". var Doctor ={ career:'医生' } 请问怎样才能让"医生"去继承"中国人",也就是说,我怎样才能生成一个"中国医生"的对象? 这里要注意,这两个对象都是普通对象,不是构造函数,无法使用构造函数方法实现&q

Python 面向对象 三

isinstance :检查是否object是类cls的对象,后面可以跟创建自己的类,也可以是基类. 可用于判断excel里面的数值是否是int类型 例如:isinstance(对象,类) issubclass:检查某个类是否是某个类的子类. 例如:issubclass(类,类) 例: class A: pass class B(A): pass b = B() print (isinstance(b,A)) -->True,判断b是由A创建的, print (issubclass(B,A))

重修课程day22(面向对象三之继承和派生)

面向对象的三大特性:封装,继承和多态 一 继承 1 什么是继承:1.1 什么是什么的关系.一个类是另一个类的子类. 1.2 继承是一种创新类的方式.新建的类可以继承一个或多个父类.父类又称为基类或超类,新建的类又称为派生类或子类 继承一个父类叫做单继承:继承多个父类叫做多继承. 2 继承的好处:减少代码的冗余,增强了代码的重用性. 二 继承的用法 super:调用父类的功能和方法 格式一:在子类的内部调用父类的属性和方法 class 父类名: def  属性(self): 功能 class 子类