常见的关键字
final关键字
final关键字是加在类和类中的方法前,但是不能使用final标识成员属性。它的作用:一 、使用final标识的类不能被继承。二、使用final标识的成员方法,在子类中不能被覆盖。
列子1:
<?php
header('content-type:text/html;charset=utf-8');
final class Myclass {
}
//被final标识的类不能被继承,否则会出错
class Myclass2 extends Myclass{
}
//结果如下
Fatal error: Class Myclass2 may not inherit from final class (Myclass) in D:\WWW\test.php on line 8
例子2:
<?php
header('content-type:text/html;charset=utf-8');
class Myclass {
final function fun(){
}
}
class Myclass2 extends Myclass{
//被final标识的方法不能被覆盖,否则出错
function fun(){
}
}
//结果如下
Fatal error: Cannot override final method Myclass::fun() in D:\WWW\test.php on line13
static关键字
使用static关键字可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法。使用static标识的成员属于类的,与对象实例和其他类无关。
在外部访问静态成员
类名::静态成员属性名
类名::静态成员方法名()
在类中访问本类中的静态成员
self::静态成员属性名
self::静态成员方法名()
如果在类的外部访问类中的静态成员,可以使用对象的引用和类名访问,但是通常使用类名访问。在使用静态方法时的要注意,在静态方法中只能访问静态成员,因为非静态成员需要通过对象的引用才能访问,通常使用$this完成。而静态的方法在对象不存在的情况下也可以直接使用类名来访问,没有对象也就没有$this引用,没有$this引用就不能访问类中的非静态成员,但可以使用类名或self在非静态方法中访问静态成员。
<?php
header('content-type:text/html;charset=utf-8');
class Myclass{
static $count;
function __construct(){
self::$count++;//类中调用用self访问静态属性
}
static function getCount(){
return self::$count;//类中调用用self访问静态属性
}
}
Myclass::$count=0;//外部调用使用类名访问静态属性
$myc1=new Myclass();
$myc2=new Myclass();
$myc3=new Myclass();
echo Myclass::getCount().'<br/>';/外部调用使用类名访问静态属性
echo $myc3->getCount();/外部调用也可以使用对象引用访问静态属性。不推荐
//结果如下
3
3
const关键字
在php中定义常量是通过调用define()函数来完成的,但是将类中的成员属性定义为常量,则只能使用const关键字。将类中的成员属性使用const关键字标识为常量。访问方式和static一样,也是在外部使用类名访问成员属性和成员方法,不能使用对象引用来访问。在内部使用self关键字来访问。标识为常量的成员属性时只读的,不能重新赋值,如果试图该变它的值,则会出现错误。所以在声明常量时一定要给它初值,因为没有其他方式后期赋值。用const声明的常量名称前不需要使用” $”符号,而且常量名称通常都是大写的。
<?php
header('content-type:text/html;charset=utf-8');
class Myclass{
const CONSTANT='CONSTANT VALUES';
function showConstant(){
return self::CONSTANT;//在类中用self访问常量
}
}
echo Myclass::CONSTANT.'<br/>';//在外部用类名访问常量
$myclass=new Myclass();
echo $myclass->showConstant().'<br/>';
echo $myclass->CONSTANT;//不能用对象引用访问
//结果如下
CONSTANT VALUES
CONSTANT VALUES
Notice: Undefined property: Myclass::$CONSTANT in D:\WWW\test.php on line 13