首页 / PHP / PHP面向对象(三)
PHP面向对象(三)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP面向对象(三),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6017字,纯文字阅读大概需要9分钟。
内容图文
![PHP面向对象(三)](/upload/InfoBanner/zyjiaocheng/1179/7532277feaf3453f906365b61e094407.jpg)
一、继承概念
继承性也是面向对象程序设计中的重要特性之一。它是指建立一个新的派生类,从一个先前定义的类中继承数据和函数,而且可以重新定义新的数据类型和函数,从而建立累的层次或等级关系。
格式:
[修饰符] class 子类名 extends 父类名
{
...
}
假如B类继承A类,那么
从内存上来讲:B继承了A中所有的属性和方法;但是父类中的private部分不能直接访问
从使用上来讲:B继承了A中所有非私有的属性和方法
其中A叫父类(基类)。 B叫子类(派生类)
PHP只支持单继承,不允许多重继承。一个子类只能有一个父类,不允许一个类直接继承多个类,但一个类可以被多个类继承。可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又继承了类B,那么类C也间接继承了类A。
1 class A 2 { 3 } 4 class B extends A 5{ 6} 7class C extends B 8{ 9 }
注意:
子类继承父类的所有内容,但父类中的private部分不能直接访问
子类中新增加的属性和方法是对父类的扩展
子类中定义的与父类同名的属性是对父类属性的覆盖,同名的方法也是对父类方法的覆盖
public(公有) protected(受保护) private(私有)
===========================================================
在本类中 Y Y Y
在子类中 Y Y N
在类外边 Y N N
1 <?php 2 3class A 4 { 5public$x=10; 6protected$y=200; 7private$z=3000; 8 9publicfunction fun1() 10 { 11echo "class A fun1....<br>"; 12 } 1314protectedfunction fun2() 15 { 16echo "class A fun2....<br>"; 17 } 1819privatefunction fun3() 20 { 21echo "class A fun3....<br>"; 22 } 2324 } 25//类B继承类A26class B extends A 27 { 2829 } 30$b=new B(); 31var_dump($b); 32/*33 object(B)[1] //B继承了A的所有属性 34 public ‘x‘ => int 10 //公有的还是共有的 35 protected ‘y‘ => int 200 //受保护的还是受保护的 36 private ‘z‘ (A) => int 3000 //私有的可以看到任然属于类A 37*/38echo$b->x; //输出公有属性 10 39 //echo $b->y; //尝试输出受保护的失败 Fatal error: Cannot access protected property B::$y 40 //echo $b->z; //尝试输出私有属性失败 Notice: Undefined property: B::$z 41 ?>
二、继承中的使用(易维护,易扩展)
在子类里面允许重写(覆盖)父类的方法 在子类中,使用parent访问父类中的被覆盖的属性和方法 parent::__construce(); parent::fun();
1 <?php 2//类的继承使用(parent的使用) 3 4class Person 5{ 6private$name; 7private$age; 8 9publicfunction __construct($name,$age) 10 { 11$this->name = $name; 12$this->age = $age; 13 } 1415publicfunction getInfo() 16 { 17return " 姓名:".$this->name." 年龄:".$this->age; 18 } 19} 2021class Stu extends Person 22{ 23private$classid; 2425publicfunction __construct($name,$age,$classid) 26 { 27 parent::__construct($name,$age); 28$this->classid = $classid; 29 } 3031publicfunction getInfo() //重写(覆盖)父类方法,达到不修改只添加,易维护32 { 33return parent::getInfo()." 班级:".$this->classid; 34 } 35publicfunction say() //添加父类没有的方法,达到扩展功能,易扩展36 { 37echo "hello world!<br>"; 38 } 39} 404142$s = new Stu("wangwu",26,"lamp149"); 43echo$s->getInfo()."<br>"; 44$s->say(); 4546$p = new Person("zhangsan",22); 47echo$p->getInfo()."<br/>"; 48 ?>
三、final关键字
在PHP5中新增加了final关键字,它只能用来修饰类和方法,不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性。
final的特性:
使用final关键字标识的类不能被继承;
使用final关键字标识的方法不能被子类覆盖(重写),是最终版本;
目的:一是为了安全,二是没有必要
1 <?php 2//类中final关键字的使用: 3//final关键字可修饰类和方法,被修饰的类不可有子类,修饰的方法不可被子类覆盖。 4 5//final修饰的类不可有子类。 6finalclass A 7{ 8//使用final关键字修饰的方法不可以被子类覆盖 9publicfinalfunction fun1() 10 { 11echo "aaaaaaaaaaaaa<br/>"; 12 } 1314publicfinalfunctionmax($a,$b) //这种方法是没有必要重写的15 { 16return$a>$b?$a:$b; 17 } 18} 1920/*21class B extends A //类A带有final修饰,不能被继承 22{ 2324 public function fun1() //如果类A没有被final修饰但是由于fun1有关键字final修饰不能被重写(覆盖) 25 { 26 echo "bbbbbbbbbbbb<br/>"; 27 } 28} 29*/30 ?>
四、static关键字
表示静态的意思: 用于修饰类的属性和方法
static关键字修饰方法称为静态方法,可以不用new(实例化)就可以直接使用方法:如 类名::方法名
注意:静态方法在实例化后的对象也可以访问 //$对象名->静态方法名
static关键字修饰属性称为静态属性,可以不用new(实例化)就可以直接访问属性:如 类名::属性名
注意:静态属性在实例化后的对象不可以访问; //$对象名->静态属性名
注意: 静态属性是共享的。也就是new很多对象也是共用一个属性
在静态方法中不可以使用非静态的内容。就是不让使用$this
在类的方法中可以使用其他静态属性和静态方法,不过要使用self关键字:
如 【self::静态属性名】或【self::静态方法名】
(>PHP5.3)在一个类的方法中若没有出现$this的调用,默认此方法为静态方法。
类中的静态属性和静态方法不用实例化(new)就可以直接使用类名访问。
格式: 类::$静态属性 类::静态方法
在类的方法中,不能用this来引用静态变量或静态方法,而需要用self来引用。
格式: self::$静态属性 self::静态方法
1 <?php 2//static静态关键字使用 3 4class A 5{ 6//使用static关键字修饰的属性称静态属性,特点是不用实例化就可直接通过类名::调用 7publicstatic$name="lisi"; 8 9//使用static关键字修饰的方法称静态方法,特点是不用实例化就可直接通过类名::调用10publicstaticfunctionmax($a,$b) 11 { 1213return$a>$b?$a:$b; 14 } 1516publicstaticfunction add($x,$y) 17 { 18return$x+$y; 19 } 2021publicfunction demo() 22 { 23//在类中调用其他静态属性和方法使用关键字self24echo self::$name; 25echo self::add(30,40); 2627 } 2829} 3031echo A::max(10,20); //2032echo A::add(10,20); //3033echo A::$name; //获取静态属性3435 A::$name = "wangwu"; 3637echo "<hr/>"; 38$a = new A(); 39$a->demo(); 40 ?>
单例(单态)模式
单例模式(Singleton)用于为一个类生成一个唯一的对象。最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
要点:1.构造方法私有化
2.定义私有静态的对象属性
3.提供公有静态的实例化当前类对象的方法,内部判断
1 <?php 2//PHP手册单例模式例子 3class Example 4{ 5// 2.保存类实例在此属性中 6privatestatic$instance; 7 8// 1.构造方法声明为private,防止直接创建对象 9privatefunction __construct() 10 { 11echo ‘I am constructed‘; 12 } 1314// 3.singleton 方法15publicstaticfunction singleton() 16 { 17if (!isset(self::$instance)) { 18$c = __CLASS__; 19 self::$instance = new$c; 20 } 2122return self::$instance; 23 } 2425// Example类中的普通方法26publicfunction bark() 27 { 28echo ‘Woof!‘; 29 } 3031//4.阻止用户复制对象实例32publicfunction __clone() 33 { 34trigger_error(‘Clone is not allowed.‘, E_USER_ERROR); 35 } 3637} 3839 ?>
五、const关键字
在类中修饰成员属性,将其定义成常量(不可修改的),一般要求常量名都是大写的,没有“$”符 没有其他修饰符(public)
定义格式: const 成员常量名="值";
使用:
在类的方法中: echo self::成员常量名;
在类的外部: echo 类名::成员常量名;
1 <?php 2//类中常量定义 3define("PI",3.14); 4const WTO = "世贸组织"; 5 6 7class Game 8{ 9const UP=37; 10const RIGHT=38; 11const DOWN=39; 12const LEFT=40; 1314publicfunction move($m) 15 { 16switch($m){ 17case 37: echo "向上移动...<br/>"; break; 18case 38: echo "向右移动...<br/>"; break; 19case 39: echo "向下移动...<br/>"; break; 20case 40: echo "向左移动...<br/>"; break; 21 } 2223 } 24} 2526$g = new Game(); 27$g->move(38); 28$g->move(37); 29$g->move(Game::LEFT); //使用类中常量提高代码的可读性。30$g->move(Game::DOWN); 31 ?>
六、instanceof
用于确定一个 PHP 变量是否属于某一类 class 的实例(亲自鉴定)
1 <?php 2//instanceof类型运算符 3 4class A{} 5 6class B extends A{} 7 8class C{} 910$a = new A(); 11$b = new B(); 12$c = new C(); 1314var_dump($a instanceof A); //bool(true)15var_dump($b instanceof A); //bool(true)16var_dump($b instanceof B); //bool(true)17var_dump($c instanceof C); //bool(true)18echo "<hr/>"; 19var_dump($c instanceof A); //bool(false)20var_dump($c instanceof B); //bool(false)21 ?>
原文:http://www.cnblogs.com/yexiang520/p/5656754.html
内容总结
以上是互联网集市为您收集整理的PHP面向对象(三)全部内容,希望文章能够帮你解决PHP面向对象(三)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。