PHP修饰类和方法的关键字简介

const

在PHP中定义常量我们通常用define,但是在类中,我们可以使用const关键字定义类常量,用法如下:

class MyClass{

const constant = 'constant value';

function showConstant() {

echo  self::constant . "";

}

}

const并非必须定义在类的内部,如:

constBAR=1;?><?php # bar.phprequire'foo.php';var_dump(Foo\BAR);// => int(1)

extends

扩展类,用一个类去扩展它的父类,这样,这个类就继承了父类的各种方法和属性。

class root {

function foo() {

echo 'ok';

}

}

class child extends root() {

function bar() {}

}

child::foo();

public

不用多说,表示这个方法是公用方法。在定义属性时,var=public;在定义方法时,不声明时默认为public。

class a {

var $test;

public $test;

public function foo() {}

function foo2() {}

}

private

私有属性或方法,仅当前类可以使用。扩展该类的子类无法使用声明了private的属性或方法,更无用说其他形式的访问或调用。

protected

受保护的属性或方法,仅当前类及其子类可以使用。如果对当前类或其子类进行实例化,再访问该属性或方法,将会产生一个致命错误。

static

static我们在普通的函数中也会使用,对应于global,static声明一个静态变量,让函数中的某个变量在每一次执行该函数数,其初始值采用上一次执行完时变量的值。在类中,static可以用于对方法和属性进行声明。在类中声明了static的属性,不能在类被实例化后使用,在类中声明了static的方法和属性不能用->进行访问,比如:

class foo {

static $var;

function index {

$this->var; // E_STRICT

}

}

$foo = new foo;

$foo->var; // 这时会返回 Undefined "Property" my_static

abstract

抽象类或方法,没有抽象属性的概念。抽象类不能被实例化,但可以被继承,其子类必须对父类已经声明了的方法全部重新定义,并且还有访问控制规则,具体看文档。

abstract class MyName{}

class MySubName extends MyName {}

如果类里面的方法使用了abstract,那么继承它的子类必须定义这些方法,而且访问控制必须是同等级的或者更宽松,更高级别的

class MyName {

abstract private function foo1() {}

abstract protected function foo2() {}

abstract public function foo3() {}

function foo4() {}

}

class MySubNmae extends MyName {

protected function foo1() {} // 父类中foo1()声明了abstract,因此,必须在子类中定义这个方法,而且声明private,那么该方法可以是private,protected或public

protected function foo2() {} // 同样,必须定义这个方法,由于父类声明了该方法为protected,所以不能在子类中声明为private,只能声明为protected或public

public function foo3() {} // 同上,只能声明为public,不能为private或protected

// 由于foo4()没有声明abstract,所以可以不用再次定义

}

抽象类的作用主要是用来被继承:构建一个类,这个类继承的父类被声明为抽象类,这样父类就不能实例化,但父类提供了一些有用的方法,子类就可以直接使用,而且在不同的子类之间,可以调用相同的方法,执行相同的数据处理,这样实际上就相当于抽象出了一个公用的方法库。

final

声明了final的类不能被继承,声明了final的方法不能再在子类中定义(报错)。

final class NONE {}

class NOTNONE extends NONE {} // 报错

class FOO {

final foo() {}

}

class MYFOO extends FOO {

foo() {} // 报错

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值