php中的訪問修飾符、方法修飾符、接口

訪問修飾符

修飾符 描述
public(公有的) 可以在類的內部和外部訪問
private(私有的) 只能在類的內部訪問
protected(受保護的) 在類的內部和子類中訪問(在整個繼承鏈上訪問)

方法修飾符

static(靜態的)

class Person {
    public static $national = '中國';
    public static function show()
    {
        echo "這是一個靜態方法";
    }
}
//測試
echo Person::$national,'<br>';
Person::show();

1、static修飾屬性成爲靜態屬性,static修飾方法成爲靜態方法
2、靜態屬性在加載類的時候分配空間,所以不需要實例化就可以直接訪問
3、訪問靜態成員語法:類名::靜態成員
4、靜態成員在內存只有就一份,爲所有的實例公共。
5、靜態成員不能訪問普通成員,只能訪問靜態成員。因爲靜態成員被創建的時候可能還沒有任何實例被實例化
6、靜態變量在類加載的時候產生,頁面執行完畢銷燬

self
self表示當前類的名字

class User {
    public static $count = 0;
    public function __construct(){
        self::$count++;//表示當前類的名字
    }
    public function (){
        self::$count--;
    }
}
$user1 = new User();
$user2 = new User();

靜態成員是可以被繼承的

header("Content-type: text/html; charset=utf-8");

class Person {
    public static $nation = '中國';
    public static show(){
        echo "這是一個父類的靜態方法";
    } 
}

class Student extends Person{
    
}

echo Student::$national,'<br>';
Student::show();

確定當前對象(靜態延時綁定)
【static::靜態成員】稱爲延時綁定,static表示的是一個類,具體表示什麼類在運行時確定,表示的是當前對象所在的類

class Person {
    public static $type='人類';
    public function showPerson() {
        //var_dump($this);  //object(Student)#1 (0) { } 
        //echo self::$type; //人類
        echo static::$type; //學生    【靜態延時綁定】
    }
}
class Student extends Person {
    public static $type='學生';
    public function showStu() {
        //var_dump($this);  //object(Student)#1 (0) { } 
        //echo self::$type; //學生
        echo static::$type; //學生    【靜態延時綁定】
    }
}
//測試
$stu=new Student;
$stu->showPerson();
echo '<hr>';
$stu->showStu();

final(最終的)
final修飾的類不能被繼承
final修飾的方法不能重寫

 

abstruct(抽象的)

1、abstruct修飾的方法叫抽象方法,abstruct修飾的類叫抽象類
2、如果只有方法的聲明而沒有方法的實現成爲抽象方法
3、如果一個類中有一個方法是抽象方法,那麼這個類就是抽象類
4、抽象類不允許實例化,必須在子類中重新實現才能實例化

//抽象類
abstract class Goods {
    protected $name;
    public function setName($name) {
        $this->name=$name;
    }
    abstract public function getName(); //抽象方法
}
//實現抽象類
class Book extends Goods {
    public function getName() {
        echo "《{$this->name}》";
    }
}
//測試
$book=new Book();
$book->setName('PHP入門到精通');
$book->getName();

抽象類的作用:
1、定義統一的方法名稱
2、防止實例化

接口(interface)

1、如果一個類中所有的方法全都是抽象方法,那麼這個類就可以聲明成接口
2、接口是一個特殊的抽象類
3、接口中的抽象方法只能是public的,默認也是public權限
4、通過implements類實現接口
5、不能通過final和abstract修飾接口中的抽象方法

interface Goods {
    function add();
    function update();
}
class GoodsA implements Goods {
    public function add() {
        echo '實現add<br>';
    }
    public function update() {
        echo '實現update<br>';
    }
}
//測試
$goods=new GoodsA();
$goods->add();
$goods->update();

接口允許多重實現

 

類不允許多重繼承,接口允許多重實現

繼承類同時實現接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章