类成员方法的作用域

本文详细介绍了PHP中public、private、protected、abstract、final五种方法作用域的概念及用法,通过具体示例展示了如何在类中声明和调用这些不同作用域的方法。

采摘处:http://www.nowamagic.net/librarys/posts/php/18


PHP支持6种方法作用域:public、private、protected、abstract、final和static。本节介绍前5种作用域。

public

公共方法可以在任何位置任何时间访问。在方法前面加上关键字public,或不加任何关键字,都可以声明一个公共方法。下面的例子展示了如何进行声明,以及如何在类外部调用公共方法:

01class Visitors
02{
03    public function greetVisitor(){
04        echo "Hello<br />";
05    }
06    function sayGoodbye(){
07        echo "Goodbye<br />";
08    }
09}
10 
11Visitors::greetVisitor();
12$visitor=new Visitors();
13$visitor->sayGoodbye();

执行结果如下:

1Hello
2Goodbye
private

标记为private的方法只能在类内部使用,不能由实例化的对象调用,也不能由类的子类使用。如果某些方法只用作为类中其他方法的“助手”(即辅助方法),就应当标记为私有。例如,考虑一个名为validateCardNumber()的方法,这个方法用来确定顾客的图书馆卡号在语法上的有效性。虽然这个方法肯定是有用的,能够满足一些任务的需要,如创建顾客和自检验,但单独执行这个函数则没有什么用处。因此,validateCardNumber()应当标记为私有,如下:

1private function validateCardNumber( $number )
2{
3    if (!ereg ('^( [0-9]{4})-([0-9]{3})-([0-9]){ 2 }) ')) return FALSE ;
4    else return TRUE ;
5}

从实例化的对象中调用此方法将导致致命错误。

protected

标记为protected的类方法只能在该类及其子类中使用。这些方法可用来帮助类或子类完成内部计算。例如,在获取某个员工信息之前,可能希望验证员工身份号(EIN),它将作为参数传递到类的实例化方法(即构造函数)中。然后使用verifyEIN()方法验证此EIN在语法上是否正确。因为这个方法只用于类中的其他方法,对于派生自Employee的类也可能有用,所以应当声明为Protected:

01class Employee
02{
03    private $ein;
04    function __construct($ein)
05    {
06        if($this->verifyEIN($ein)){
07            echo "EIN verfied Finish";
08        }
09    }
10 
11    protected function verifyEIN($ein)
12    {
13        return true;
14    }
15}
16$employee=new Employee("123-45-6789");

试图从类外部调用verifyEIN()将导致致命的错误,因为该方法具有保护作用。

abstract

抽象方法很特殊,在在父类中声明,但在子类中实现。只有声明为abstract的类可以声明抽象方法。如果想定义一个应用编程接口,以后作为实现的一个模型,就可以声明一个抽象方法。开发人员会知道,如果能满足抽象方法定义的所有需求,那么他为该方法开发的特定实现应该能正常工作。抽象方法如下声明:

1abstract function methodName();

假设要创建一个抽象Employ类,它要作为其他一些员工类型的基类:

1abstract class Employee
2{
3    abstract function hire();
4    abstract function fire();
5    abstract function promote();
6}

然后,各个员工类再分别扩展这个类。

final

标记为final的方法可以防止被子类覆盖。final方法声明如下:

1class Employee
2{
3    final function getName(){
4        
5    }
6}

以后如果试图覆盖final方法将导致致命错误。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值