PHP类及其方法的修饰关键词简介

广告位招租
扫码页面底部二维码联系

const【本文受版权保护】

本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。【未经授权禁止转载】

在PHP中定义常量我们通常用define【转载请注明来源】【版权所有,侵权必究】,但是在类中,我们可以使用const关键【未经授权禁止转载】转载请注明出处:www.tangshuang.net字定义类常量,用法如下:

【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。转载请注明出处:www.tangshuang.net【转载请注明来源】
class MyClass{
    const constant = 'constant value';
    function showConstant() {
        echo  self::constant . "";
    }
}

const并非必须定义在类的内部,如:【未经授权禁止转载】

【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】
<?php
# foo.php
namespace Foo;
const BAR = 1;
?>

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

extends著作权归作者所有,禁止商业用途转载。

【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】

扩展类,用一个类去扩展它的父类,这样,这【本文受版权保护】【版权所有】唐霜 www.tangshuang.net个类就继承了父类的各种方法和属性。

【本文受版权保护】转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】
class root {
  function foo() {
    echo 'ok';
  }
}

class child extends root() {
  function bar() {}
}

child::foo();

public原创内容,盗版必究。

【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。

不用多说,表示这个方法是公用方法。在定义未经授权,禁止复制转载。【原创内容,转载请注明出处】属性时,var=public;在定义方法【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net时,不声明时默认为public。

【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net
class a {
  var $test;
  public $test;
  public function foo() {}
  function foo2() {}
}

private【本文受版权保护】

未经授权,禁止复制转载。原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。

私有属性或方法,仅当前类可以使用。扩展该本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。类的子类无法使用声明了private的属转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。性或方法,更无用说其他形式的访问或调用。

转载请注明出处:www.tangshuang.net【版权所有,侵权必究】【转载请注明来源】本文作者:唐霜,转载请注明出处。

protected原创内容,盗版必究。

本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net

受保护的属性或方法,仅当前类及其子类可以【本文首发于唐霜的博客】【转载请注明来源】使用。如果对当前类或其子类进行实例化,再【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】访问该属性或方法,将会产生一个致命错误。

【本文首发于唐霜的博客】【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】

static【本文首发于唐霜的博客】

【版权所有,侵权必究】【转载请注明来源】著作权归作者所有,禁止商业用途转载。【本文受版权保护】

static我们在普通的函数中也会使用,【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net对应于global,static声明一个【本文受版权保护】【版权所有】唐霜 www.tangshuang.net静态变量,让函数中的某个变量在每一次执行著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】该函数数,其初始值采用上一次执行完时变量本文作者:唐霜,转载请注明出处。【未经授权禁止转载】的值。在类中,static可以用于对方法【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net和属性进行声明。在类中声明了static【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。的属性,不能在类被实例化后使用,在类中声本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】明了static的方法和属性不能用-&g【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】t;进行访问,比如:

【版权所有,侵权必究】【原创内容,转载请注明出处】【未经授权禁止转载】【转载请注明来源】
class foo {
  static $var;
  function index {
    $this->var; // E_STRICT
  }
}

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

abstract【未经授权禁止转载】

【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。

抽象类或方法,没有抽象属性的概念。抽象类转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。不能被实例化,但可以被继承,其子类必须对【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net父类已经声明了的方法全部重新定义,并且还【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net有访问控制规则,具体看文档【转载请注明来源】【转载请注明来源】

【原创内容,转载请注明出处】【未经授权禁止转载】【版权所有,侵权必究】
abstract class MyName{}
class MySubName extends MyName {}

如果类里面的方法使用了abstract,【作者:唐霜】【本文受版权保护】那么继承它的子类必须定义这些方法,而且访本文作者:唐霜,转载请注明出处。【作者:唐霜】问控制必须是等级的或者更宽松的。

转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。
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,所以可以不用再次定义
}

抽象类的作用主要是用来被继承:构建一个类【作者:唐霜】著作权归作者所有,禁止商业用途转载。,这个类继承的父类被声明为抽象类,这样父【本文受版权保护】【版权所有】唐霜 www.tangshuang.net类就不能实例化,但父类提供了一些有用的方【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】法,子类就可以直接使用,而且在不同的子类【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net之间,可以调用相同的方法,执行相同的数据【转载请注明来源】未经授权,禁止复制转载。处理,这样实际上就相当于抽象出了一个公用转载请注明出处:www.tangshuang.net原创内容,盗版必究。的方法库。

【原创内容,转载请注明出处】原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】

final本文作者:唐霜,转载请注明出处。

【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。

声明了final的类不能被继承,声明了f【转载请注明来源】【关注微信公众号:wwwtangshuangnet】inal的方法不能再在子类中定义(报错)本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】

【原创不易,请尊重版权】【转载请注明来源】转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】
final class NONE {}
class NOTNONE extends NONE {} // 报错

class FOO {
  final foo() {}
}

class MYFOO extends FOO {
  foo() {} // 报错
}

总结【未经授权禁止转载】

转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。
关键字【访问 www.tangshuang.net 获取更多精彩内容】 类外声明【版权所有,侵权必究】 声明类【未经授权禁止转载】 声明属性【原创不易,请尊重版权】 声明方法原创内容,盗版必究。
const【关注微信公众号:wwwtangshuangnet】 本文版权归作者所有,未经授权不得转载。 【原创不易,请尊重版权】
extends【版权所有】唐霜 www.tangshuang.net 【作者:唐霜】
public【版权所有】唐霜 www.tangshuang.net 未经授权,禁止复制转载。 本文作者:唐霜,转载请注明出处。
protected本文版权归作者所有,未经授权不得转载。 未经授权,禁止复制转载。 【版权所有】唐霜 www.tangshuang.net
private【原创不易,请尊重版权】 未经授权,禁止复制转载。 本文作者:唐霜,转载请注明出处。
abstract【原创不易,请尊重版权】 【原创不易,请尊重版权】 本文版权归作者所有,未经授权不得转载。
final【访问 www.tangshuang.net 获取更多精彩内容】 著作权归作者所有,禁止商业用途转载。 【本文首发于唐霜的博客】

2015-08-25 5080

为价值买单,打赏一杯咖啡

本文价值50.8RMB