const
【访问 www.tangshuang.n原创内容,盗版必究。未经授权,禁止复制转载。et 获取更多精彩内容】【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。在PHP中定义常量我们通常用define未经授权,禁止复制转载。【未经授权禁止转载】,但是在类中,我们可以使用const关键【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。字定义类常量,用法如下:
【版权所有】唐霜 www.tangshu【原创内容,转载请注明出处】【本文受版权保护】ang.net【版权所有,侵权必究】class MyClass{
const constant = 'constant value';
function showConstant() {
echo self::constant . "";
}
}
const并非必须定义在类的内部,如:
转载请注明出处:www.tangshua【原创不易,请尊重版权】未经授权,禁止复制转载。ng.net【版权所有,侵权必究】<?php # foo.php namespace Foo; const BAR = 1; ?> <?php # bar.php require 'foo.php'; var_dump(Foo\BAR); // => int(1)
extends
【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】【关注微信公众号:wwwtangshua【原创不易,请尊重版权】【作者:唐霜】ngnet】扩展类,用一个类去扩展它的父类,这样,这原创内容,盗版必究。【本文受版权保护】个类就继承了父类的各种方法和属性。
【访问 www.tangshuang.n【版权所有,侵权必究】【转载请注明来源】et 获取更多精彩内容】【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshua【原创内容,转载请注明出处】【原创不易,请尊重版权】ngnet】class root {
function foo() {
echo 'ok';
}
}
class child extends root() {
function bar() {}
}
child::foo();
public
【作者:唐霜】【版权所有】唐霜 www.tangshu【作者:唐霜】本文作者:唐霜,转载请注明出处。ang.net【关注微信公众号:wwwtangshua【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。ngnet】【版权所有】唐霜 www.tangshu转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.netang.net不用多说,表示这个方法是公用方法。在定义本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。属性时,var=public;在定义方法未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】时,不声明时默认为public。
【原创内容,转载请注明出处】转载请注明出处:www.tangshua【本文首发于唐霜的博客】原创内容,盗版必究。ng.netclass a {
var $test;
public $test;
public function foo() {}
function foo2() {}
}
private
【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。【转载请注明来源】私有属性或方法,仅当前类可以使用。扩展该【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。类的子类无法使用声明了private的属【转载请注明来源】【版权所有,侵权必究】性或方法,更无用说其他形式的访问或调用。
著作权归作者所有,禁止商业用途转载。【作者:唐霜】【关注微信公众号:wwwtangshua转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netngnet】protected
本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】ngnet】【原创不易,请尊重版权】受保护的属性或方法,仅当前类及其子类可以本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。使用。如果对当前类或其子类进行实例化,再【原创不易,请尊重版权】【本文受版权保护】访问该属性或方法,将会产生一个致命错误。
【作者:唐霜】【未经授权禁止转载】本文作者:唐霜,转载请注明出处。【作者:唐霜】static
著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】【访问 www.tangshuang.n【转载请注明来源】著作权归作者所有,禁止商业用途转载。et 获取更多精彩内容】static我们在普通的函数中也会使用,本文版权归作者所有,未经授权不得转载。【作者:唐霜】对应于global,static声明一个【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。静态变量,让函数中的某个变量在每一次执行【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】该函数数,其初始值采用上一次执行完时变量【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】的值。在类中,static可以用于对方法【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。和属性进行声明。在类中声明了static【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。的属性,不能在类被实例化后使用,在类中声【作者:唐霜】【本文首发于唐霜的博客】明了static的方法和属性不能用-&g【作者:唐霜】【本文首发于唐霜的博客】t;进行访问,比如:
【关注微信公众号:wwwtangshua著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netngnet】【本文首发于唐霜的博客】【转载请注明来源】本文版权归作者所有,未经授权不得转载。class foo {
static $var;
function index {
$this->var; // E_STRICT
}
}
$foo = new foo;
$foo->var; // 这时会返回 Undefined "Property" my_static
abstract
著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】未经授权,禁止复制转载。抽象类或方法,没有抽象属性的概念。抽象类【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net不能被实例化,但可以被继承,其子类必须对【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。父类已经声明了的方法全部重新定义,并且还本文作者:唐霜,转载请注明出处。【作者:唐霜】有访问控制规则,具体看文档。
本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】abstract class MyName{}
class MySubName extends MyName {}
如果类里面的方法使用了abstract,【转载请注明来源】【本文受版权保护】那么继承它的子类必须定义这些方法,而且访本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net问控制必须是等级的或者更宽松的。
转载请注明出处:www.tangshua原创内容,盗版必究。【未经授权禁止转载】ng.net【版权所有】唐霜 www.tangshu著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netang.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.tangshua【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。ng.net著作权归作者所有,禁止商业用途转载。final
【原创不易,请尊重版权】原创内容,盗版必究。转载请注明出处:www.tangshua【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。ng.net声明了final的类不能被继承,声明了f原创内容,盗版必究。【未经授权禁止转载】inal的方法不能再在子类中定义(报错)本文作者:唐霜,转载请注明出处。【作者:唐霜】。
著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。ngnet】final class NONE {}
class NOTNONE extends NONE {} // 报错
class FOO {
final foo() {}
}
class MYFOO extends FOO {
foo() {} // 报错
}
总结
【本文首发于唐霜的博客】原创内容,盗版必究。【原创内容,转载请注明出处】| 关键字 | 类外声明 | 声明类 | 声明属性 | 声明方法 |
| const | √ | √ | ||
| extends | √ | |||
| public | √ | √ | ||
| protected | √ | √ | ||
| private | √ | √ | ||
| abstract | √ | √ | ||
| final | √ | √ |
2015-08-25 5204


