课程名称: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";