類跟對象的關係
類是對象的抽象(對象的描述(屬性),對象的行爲(方法))
對象是類的實體
面相對象的三大特徵:封裝、集成、多態
自定義類
Class Person{
}
屬性定義
屬性是類裏面的成員,因此要定義屬性的前提條件是須要聲明一個類
Class Person{
public $name;// 屬性
public $age;
public $sex;
}
方法定義
方法是定義特定功能的代碼塊,在類中定義方法表示,建立對象以後,對象的特定行爲;
Class Person{
public function eat($food){
echo "Person can eat ".$food;
}
}
實例化對象
Class Person{
public $name;// 屬性
public $age;
public $sex;
public function eat($food){
echo "Person can eat ".$food;
}
}
$person1=new Person();
屬性的賦值
$person1->name="curtis";
echo $person1->name;
類方法的調用
$person1->eat("Apple");
繼承(PHP是單繼承,也就是一個子類只能有一個父類)
爲何要繼承?
回覆:爲了屬性、方法的重複利用;
業務場景:
有個Person類,有一個Student類;
Person裏面有姓名、年齡、性別
若是Student裏面再將上面的屬性定義一次,那就糟蹋了繼承這個神器;
Person類叫Student類的父類,Student類是Person類的之類;
Class Person{
public $name;// 屬性
public $age;
public $sex;
public function eat($food){
echo "can eat ".$food;
}
}
Class Student extends Person{
public $student_id;
public function write(){
echo "I can write";
}
public function read(){
echo "I can read";
}
}
$student1=new Student();
$student1->name="curtis1";
echo $student1->name;
echo "<br />";
$student1->eat("面");
echo "<br />";
訪問修飾符
public protected private
public 當前類,子類中都可訪問;
protected 當前類,子類內部容許訪問;
private 當前類內部容許訪問;
這個地方須要重點了解:
範圍
什麼叫類內部?
{}內叫類內部,出了{},實例化對象的時候構造函數也是內內部;
Class Person{
public $name;// 屬性
public $age;
private $sex;// 私有屬性
public function eat($food){
echo "eat ".$food;
}
function __construct($sex){
echo "性別:".$sex;
}
}
Class Student extends Person{
public $student_id;
public function write(){
echo "I can write";
}
public function read(){
echo "I can read";
}
}
$person1=new Person("男");
static 關鍵字
爲何要有這麼一個關鍵字?
常量
PI
靜態屬性 public static $PI = 3.14;
靜態方法
靜態成員訪問方式(類外部):
類名::屬性名稱
在當前類中訪問靜態屬性:
statis::屬性名;
在子類內部訪問父類靜態成員,parent::屬性名;statis::屬性名;
class Person
{
public $name;
// 屬性
public $age;
private $sex;
// 私有屬性
public function eat($food)
{
echo "eat " . $food;
}
public static $PI = 3.14;
/**
* 構造函數
*/
function __construct($sex)
{
echo "性別:" . $sex;
}
function show(){
echo static::$PI;
}
}
class Student extends Person
{
public $student_id;
public function write()
{
echo "I can write";
}
function __construct()
{}
public function read()
{
echo "I can read";
}
public function add()
{
echo 1 + parent::$PI."<br />";
echo 2 + static::$PI;
}
}
$person1 = new Person("男");
echo "<br />";
$person1->show();
echo "<br />";
echo Person::$PI . "<br />";
$student1 = new Student();
echo Student::$PI;
echo "<br />";
$student1->add();
方法的重寫
方法的重載
什麼叫相同的方法,什麼叫不一樣的方法?
回覆:相同的方法:方法名稱相同,方法的參數列表相同;
不一樣的方法:方法名稱不一樣;方法名稱相同,方法的參數列表不一樣;
爲何會有方法的重寫?
回覆:父類定義的方法子類有一樣的方法,子類的中的方法要實現有本身的行爲;
方法的重載
爲何會有方法的重載?
回覆:類中一樣一個方法名稱,經過不一樣的參數傳遞實現各自的行爲;
final關鍵字
跟方法的重寫對應來的
父類中有一個final關鍵字修飾的方法,子類想對該方法進行重寫那是不被容許的;
接口(interface)