手记

【九月打卡】第19天--PHP面向对象编程第四章节面向对象的高级实践

课程名称:PHP面向对象编程

课程章节:
4-2 访问控制-php面向对象编程
4-3 Static(静态)关键字-php面向对象编程
课程链接

主讲老师:Peter

课程内容

学习到了PHP中面向对象的public、protected和private这三种访问权限。Static(静态)关键字,通过代码演示,更加深入了解其中的原理。

课程收获

一、访问控制

面向对象的三种访问权限

-public公有的类成员,可以在任何地方被访问

·定义该成员的类(自身)、该类的子类、其他类

-protected受保护的类成员,可以被其自身以及其子类访问

-private私有的类成员,只能被自身访问

二、Static(静态)关键字

声明类属性或方法为静态,就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问

静态方法可以通过一个类已实例化的对象来访问

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,使用self或者static。

静态属性不可以由对象通过 -> 操作符来访问。

静态属性只能被初始化为文字或常量,不能使用表达式。

使用parent关键字访问父类的静态成员

三、代码实现

class Human
{
    public $name;
    protected $height; // 只有自身和子类可以访问
    public $weight;
    private $isHungry = true;  // 不能被子类访问

    public static $sValue = "Static value in Hunman class.";

    public function eat($food)
    {
        echo $this->name."'s eating".$food."\n";
    }
}



class NbaPlayer extends Human
{
    // 定义属性
    public $team = "Bull";
    public $playerNumber = "23";

    private $age = "40"; // private的类成员只能在内的内部被访问

    // 静态属性定义时在访问控制关键字后面添加static关键字即可
    public static $president = "David Stern";
    // 静态方法定义
    public static function changePresident($newPrsdt)
    {
        // 在类定义中使用静态成员的时候,用self关键字后面跟着::操作符,即可。注意,在访问静态成员属性的时候,::后面需要跟$符号
        self::$president = $newPrsdt;
        echo parent::$sValue . "\n";
    }

    function __construct($name, $height, $weight, $team, $playerNumber)
    {
        echo "In NbaPlayer constructor\n";
        $this->name = $name;
        $this->height = $height;
        $this->weight = $weight;
        $this->team = $team;
        $this->playerNumber = $playerNumber;
    } 

    function __destruct()
    {
        echo "Destroying". $this->name . "\n";
    }

    // 定义方法
    public function run()
    {
        echo "Running\n";
    }

    public function jump()
    {
        echo "Jumping\n";
    }

    public function dribble()
    {
        echo "Dribbling\n";
    }

    public function shoot()
    {
        echo "Shooting\n";
    }

    public function dunk()
    {
        echo "Dunking\n";
    }

    public function pass()
    {
        echo "Passing\n";
    }
}

$jordan = new NbaPlayer("Jordan","198cm","98kg","bull","23");
$james = new NbaPlayer("James","203cm","120kg","Heat","6");
echo NbaPlayer::$president. "before change\n";
NbaPlayer::changePresident("Adam Silver");
echo NbaPlayer::$president . "\n";

课程截图


0人推荐
随时随地看视频
慕课网APP