PHP面向对象 高级实践(上)

1.访问控制

  • public——都可以访问
  • protected——只有子类和自身可以访问
  • private——只有自身可以访问

2.继承

  • 父类里面定义的类成员,可以不用在子类里面重复定义,节约了编程的时间和代价
  • 同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用他们的时候可以一视同仁
  • 子类可以修改和调整父类定义的类成员。一旦子类修改了,就按照之类修改后的功能执行。我们称之为重写
  • 在PHP中可以用extends关键字来表示类的继承,后面跟父类的类名
  • PHP中extends后面只能跟一个类名,这就是PHP的单继承原则

3.static关键字

<?php
class Human{
  public $age="10";
  public static $sValue="Static Value in Human Class";
}

class NbaPlayer extends Human{
   //静态属性定义是在访问控制关键字后面添加static关键字即可
   public static $president="David Stern";
   //静态方法定义
   public static changePresident($newPresident){

        //在本类定义中使用静态成员的时候,用self关键字或者static关键字后面紧跟::操作符即可。
        //注意,在访问静态成员属性的时候,::后面需要跟$符号
        self::$president=$newPresident;
        //等价于static::$president=$newPresident;

        //使用parent关键字就可以访问父类的静态成员
       echo parent::$sValue;
    
        //$this的使用必须基于对象,而静态成员是全局的
       echo $this->age;//输出报错
       
   }
}

//在类定义外部访问静态属性,我们可以用类名加::操作符的方法来访问类的静态成员。
echo NbaPlayer::$president; //输出 David Stern
NbaPlayer::changePresident("Adam Silver");
echo NbaPlayer::$president; //输出 Adam Silver
//在类外部直接访问父类的静态成员
echo Human::$sValue;
?>
  1. 1.静态属性用于保存类的公有数据
  2. 2.静态方法里面只能访问静态属性
  3. 3.静态成员不需要实例化对象就可以访问
  4. 4.类的内部可以通过self或者static关键字访问自身静态成员
  5. 5.可以通过parent的关键字访问父类的静态成员
  6. 6.可以通过类的名称在类定义外部访问静态成员

4.final成员

问题描述:

  1. 对于吃饭这个功能,不希望子类修改它
  2. 对于NBA球员这个类,不希望在创建他的子类
<?php
//定义父类
//子类中编写跟父类【方法名称】完全一致的方法可以完成对父类的重写

//对于不想被子类重写的方法,可以方法定义前面添加final关键字
//对于不想被任何类继承的类可以在class关键字之前添加final关键字
 final class BaseClass{

    public function test(){
        echo "BaseClass::test called ";
    }
    //添加final关键字,能将这个方法不能在子类中重写
    final public function test1(){
        echo "BaseClass::test1 called ";
    }
}

class ChildClass extends BaseClass{

    public function test($tmp=null){
        echo "ChildClass::test called ".$tmp;
    }
    public function test1(){
        echo "ChildClass::test1 called ";
    }
    
}

$obg=new ChildClass();
//方法的重写针对的只是方法名称
$obg->test('ll'); //输出 ChildClass::test called ll
$obg->test1();

5.数据访问补充

<?php

class BaseClass{
    public function test(){
        echo "BaseClass::test called ";
    }
    public function test1(){
        echo "BaseClass::test1 called ";
    }
}

class ChildClass extends BaseClass{
    const CONST_VALUE="a constant value";
    private static $cValue="static value";
    public function test($tmp=null){
        echo "ChildClass::test called ".$tmp;
        用parent关键字可以访问父类中被子类重写的方法
        parent::test();

        //$this->called();
        self::called();//等价于$this->called();
        echo self::CONST_VALUE;
        echo static::$sValue;//等价于echo self::$sValue;
    }

    public function called(){
        echo "ChildClass::called() called ";
    }
}

$obg=new ChildClass();
$obg->test();
//输出 ChildClass::test called   BaseClass::test called

 

1.parent关键字可以用于调用父类中被子类重写的方法,也可以用于调用父类中定义的静态成员
2.self关键字可以用于访问类自身的成员方法,也可以访问自身静态成员和类常量;不能用于访问类自身的属性,使用常量的时候不需要再常量前面添加$符号
3.static关键字用于访问类自身定义的静态成员,访问静态属性时需要在属性前面添加$符号

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值