首页 > 代码库 > 【php】面向对象(三)
【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)
【php】面向对象(三)