oop初涉

一、final

1.<?php 

//final用于类、方法之前
//final不可被继承
//final方法不可被覆盖
final class fun
{
//成员属性
public $name="小强";
//
public function math()
{
echo "蟑螂为什么叫做".$this->name.'?';


}
//类的实例化
$f =new fun();
$f->math();
//类的继承
class fun1 extends fun
{
public function math1()
{
echo "因为".$this->name."就是蟑螂!";

}
}
$f1 =new fun1();

$f1->math1();

?>

以上程序报错:Fatal error: Class fun1 may not inherit from final class (fun) in D:\www\test.com\www\oop\final.php on line 28

2.

<?php 
//final用于类、方法之前
//final不可被继承
//final方法不可被覆盖
class fun
{
//成员属性
public $name="小强";
//防止子类方法被重写使用final
final public function math()
{
echo "蟑螂为什么叫做".$this->name.'?';


}
//类的实例化
$f =new fun();
$f->math();
//类的继承
class fun1 extends fun
{
  public function math()
{
echo "因为".$this->name."就是蟑螂!";

}
}
$f =new fun();
$f->math();
?>

页面报错:Fatal error: Cannot override final method fun::math() in D:\www\test.com\www\oop\final2.php on line 28

在父类的方法前面加上final 子类方法不能被重写

二.php5类中的常量

我们使用const 定义一个常量,定义的这个常量不能被改变

在 PHP5 中  const 定义的常量与定义变量的方法不同,不需要加  $  修饰符。 const PI = 3.14;  这样就可以。而使用 const  定义的常量名称一般都大写,这是一个约定,类中的常量使用起来类似静态变量,不同点只是它的值不能被改变。我们使用 类名::常量名来调用这个常量

例子:

<?php 
class fun
{
const A="这是类常量,";
}
echo fun::A.'使用类名::常量名来调用';
?>

三. 可以使用abstract 来修饰一个类或者方法

用abstract修饰的类表示这个类是一个抽象类, 用abstract 修饰
的方法表示这个方法是一个抽象方法。 
抽象类不能被实例化。 
抽象方法是只有方法声明,而没有方法的实现内容。

例子为证:

(1)<?php 
//抽象类不能被实例化
//声明一个抽象类
abstract class fun
{
public $name = "小鲁";
public function abc()
{
echo "我的名字是:".$this->name;
}
}
$f= new fun();
$f->abc();
?>

页面报错:Fatal error: Cannot instantiate abstract class fun in D:\www\test.com\www\oop\abstract.php on line 12

(2)这个就可以正常显示了

<?php 
//抽象类不能被实例化
//声明一个抽象类
abstract class fun
{
public $name = "小鲁";
final public function abc()
{
echo "我的名字是:".$this->name;
}
}
//继承自父类fun
class fun1 extends fun{

}
//虽然父类不能被实例化 但是子类可以可以被实例化
$f= new fun1();
$f->abc();
?>

四.接口的定义和规范

接口(interface)是抽象方法和静态常量定义的集合。 
接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。 
接口中没有其它类型的内容。 

在接口中只能有抽象方法。如果在接口中出现了非抽象方法,会报错如下: 
Interface function User::setName() cannot contain body in ………. 

在接口中的抽象方法只能是public 的,默认也是public 权限。 
并且不能设置成  private     或者  protected 类型。 

在接口中可以使用静态抽象方法。在PHP5.2 中,不建议在抽象类中使用静态抽象方法。 
而接口中依然保留了静态抽象方法。 

一个类可以使用 implements实现接口,甚至可以实现多个接口。 


<?php 
//一个类可以继承和接口同时实现 
class student
{
protected $grade;
public function getGrade()
{
return $this->grade;
}
}
//一个类可以实现多个接口。只要使用 ,号将多个接口链接起来就可以
//接口1
interface user
{
function getname();
function setname($_name);
}
//接口2
//只有管理员可以设置公告
interface administrator
{
function setbulletin($_bulletin);
}
//一个类可以实现多个接口
class studentadmin extends student implements user,administrator
{
function getname(){}
function setname($_name){}
function setbulletin($_bulletin){}
}
//实例化对象
$s= new studentadmin();
echo $s->getGrade();
echo $s->getname();
echo $s->setBulletin("公告内容");
?>

接口的继承

一个接口可以继承另外一个接口

PHP5 中的类是单继承,但是接口很特殊。一个接口可以继承自多个接口

一个接口继承其它接口时候,直接继承父接口的静态常量属性和抽象方法。

要注意只有接口和接口之间使用  继承关键字  extends。 
类实现接口必须实现其抽象方法,使用实现关键字  implements。

抽象类实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实
例化的类去处理

<?php 
//抽象类实现接口,抽象类实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实
//例化的类(比如说抽象类不能被实例化,但是他的子类可以被实例化)去处理
//接口1
interface user
{
function getname();
function setname($_name);
}
//abstractnornaluser 只实现了user接口中的一个方法
//声明一个抽象类
abstract class abstractnornaluser
{
protected  $name;
public function getname(){
return $this->name;
}
}
//这里实现了接口的另一个方法
class nornaluser extends abstractnornaluser{
public function setname($_name){
$this->name=$_name;
}
}
$nouser =new nornaluser();
$nouser->setname("tom");
echo "你叫".$nouser->getname();
?>









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值