
批改狀態(tài):合格
老師批語:
OOP全稱object oriented progrmming 面向?qū)ο缶幊?br>和面向?qū)ο缶幊滩煌氖敲嫦蜻^程編程。面向過程編程是直接面向 變量 和函數(shù) 編程,沒有類和封裝。
oop直接面向?qū)ο缶幊?,封裝了變量和函數(shù)的一個(gè)編程單元。be本質(zhì)是封裝,目標(biāo)是代碼復(fù)用
首先聲明一個(gè)類文件,聲明的類與這個(gè)類所在的文件推薦同名
class Product{
//屬性
//protected 受保護(hù)成員,僅限本類以及子類訪問
protected $name;
//private 私有成員,僅限本類中的使用
private $price;
//函數(shù)
//構(gòu)造方法
public function __construct($name,$price)
{
//初始化類成員,讓類/實(shí)例化狀態(tài)確定下來
//生成類的實(shí)例
//2.給這個(gè)新類復(fù)制屬性
$this->name=$name;
$this->price=$price;
//return $obj;
}
//實(shí)例方法
public function show():string
{
return "$this->name:$this->price";
}
}
spl_autoload_register(function($class){
require $class.'.php';
});
引用后require 包含這個(gè)函數(shù)的文件后,當(dāng)前也new的對象自動(dòng)調(diào)用這個(gè)函數(shù),
注意:類名應(yīng)和文件名一致,才起作用
//類的靜態(tài)成員
//類中成員,屬性和方法
//類中成員并非全部都要使用類實(shí)例方法,也可直接使用類訪問成員
//這個(gè)就是靜態(tài)成員
class Staff{
public static $name;
public static $salary;
public function __construct($name,$salary)
{
//靜態(tài)成員與實(shí)例無關(guān),當(dāng)然不能使用$this訪問,用類的引用
//self:當(dāng)前類的引用
self::$name=$name;
self::$salary=$salary;
}
//靜態(tài)方法
public static function show(){
return 'self::$name, self::$salary';
}
}
注意:類實(shí)例可以訪問靜態(tài)方法,但不能訪問靜態(tài)屬性
extends 繼承,子類只能繼承一個(gè)父類,可以調(diào)用父類除了私有權(quán)限的所有屬性和方法。也可以自己定義函數(shù)方法和屬性。
trait 理解為一個(gè)公共方法集。
trait 借用了class語法實(shí)現(xiàn)的一個(gè)輕量級的類,但不是類,所以不能實(shí)例化
trait聲明一個(gè)類,在調(diào)用它是只需要在本類中使用use trait聲明的類明即可。
一個(gè)類中可以調(diào)用多個(gè)trait。如果trait之間有同名方法,可以設(shè)定優(yōu)先級,或者別名
當(dāng)trait和父類中有同名方法是,trait優(yōu)先級比父類高。
trait T1
{
public function m1()
{
return __METHOD__;
}
}
trait T2
{
public function m1()
{
return __METHOD__;
}
}
class A{
//在要使用trait的類中,使用use關(guān)鍵字引用它即可
use T1;
}
class B{
use T1,T2{
//優(yōu)先級
T1::m1 insteadOf T2;
//別名
T2::m1 as T2m1;
}
}
echo (new A)->m1();
echo (new B)->m1();
//如果要引用多個(gè)trait
// 1.優(yōu)先級
// 2.起別名
echo (new B)->T2m1();
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號