PHP基础学习(二)

文章目录

          • 类的访问控制权限表
          • 类的继承
          • 使用`::`运算符
          • parent 关键字
          • final 关键字
          • stats关键字
          • 多态
          • 接口

类的访问控制权限表

在这里插入图片描述
公有成员变量或方法能被全局访问,私有成员变量或方法只能被所属类访问,保护成员变量或方法能被同类和子类访问

类的继承

基类就是父类,派生类就是子类
扩展或派生出来的类拥有其基类的所有变量和函数,并包含所有派生类中定义的部分

public、protected 关键字定义的成员变量和成员函数可以被子类继承private 关键字定义的成员变量和成员函数不能被子类继承

使用::运算符

调用其他不相关类(除去父类子类)的类成员,PHP 是通过 伪变量$this->作用域操作符:: 来实现的

关键字::变量名/常量名/方法名

上述格式中的「关键字」分为以下 3 种情况。

parent:可以调用父类中的成员变量、成员方法和常量。

self:可以调用当前类中的静态成员和常量。

类名:可以调用基类中的变量、常量和方法。

案例:


class A {
                       //定义类 A
   function example() {
         //定义类中的函数 
      echo "我是基类的函数 A::example().
"; } } class B extends A { //定义子类 B function example() { //定义类中的函数 echo "我是子类中的函数 B::example().
\n"
; A::example(); //调用父类的函数 } } class DMIND{ function dd(){ echo 666; } } DMIND::dd(); //直接调用 A::example();// A 类没有对象实例,但可以直接调用其方法 example $b = new B;// 建立一个 B 类的对象 $b->example();//调用 B 的函数 example ?>

PHP基础学习(二)_第1张图片

静态方法只能调用静态成员变量
PHP基础学习(二)_第2张图片
上图中将private $i = 1;改为 private static $i = 1;即可

静态方法和常量,都用::形式调用,例如:self::$i

parent 关键字

对于在继承类中使用基类的情况,不要使用基类的名字,应该使用特殊的名字 parent

假设A是基类
尽量不要写成:A::example();
写成:		 parent::example()//使用关键字 parent 指明是使用基类 
final 关键字
当在一个函数声明前使用 final 关键字时,这个被修饰的函数不能被任何函数重载。
当一个类被 final 修饰后,说明该类不可以再被继承,也不能再有子类。
当一个方法被 final 修饰后,说明该方法在子类中不可以进行重写,也不可以被覆盖
stats关键字

不是所有的变量(方法)都要通过创建对象来调用。 可以通过给变量(方法)加上 static 关键字的方式来直接调用。

多态

虽然是同一种方法,却产生了不同的形态,这就是多态。
多态有两种存在形式,分别是覆盖和重载

接口

interface 关键字声明一个接口,接口名一般大写

interface 接口名 
{
     
    function 接口函数 A()function 接口函数 B();
…
}

class 类名 implement 接口名	//一个类可以实现多个接口,implement后可写多个接口,用逗号分隔
{
     
    function 接口函数 A()//类中的函数要与接口中的函数对应,接口中的成员函数要在类中成员函数实现
    function 接口函数 B();	
…
}

接口使用的一个案例:

//定义接口
interface User{
     
	function getDiscount();
	function getUserType();
}

//定义VIP用户这个类,关键字“implement” 把接口整合起来
class VipUser implements User{
     
	private $discount=0.8;
	function getDiscount()	//第一个接口函数的具体实现
	{
     
		return $this->discount;
	}
	function getUserType()	//第二个接口函数的具体实现

	{
     
		return "VIP用户";
	}
}

//定义商品类
class Goods{
     
	var $price = 100;	//定义价格
	var $vc;
	//定义run方法,参数类型是User接口类型参数
	function run(User $vc){
     	
		$this->vc = $vc;
		$discount = $this->vc->getDiscount();
		$usertype = $this->vc->getUserType();
		echo $usertype."商品价格:".$this->price*$discount;
	}
}
$display = new Goods();
$display->run(new VipUser);

//输出:VIP用户商品价格:80
?>

接口不能被实例化,接口可以继承接口

对于PHP这种不能继承多个类的语言,可以借助接口来实现。接口提供了相当于多重继承的功能,但是它不会带来多重继承所产生的语义上的歧义。

你可能感兴趣的:(PHP特性,Web)