
批改狀態(tài):合格
老師批語:
protected
可繼承成員extends
類成員的來源parent
父類引用
class Person
{
// 1. 屬性
// public: 公共成員, 當前類, 類外部
// public string $email = 'a@qq.com';
// private: 私有成員, 僅限當前類,類外部不可見
private int $id = 10;
// protected: 受保護的, 用在當前類,以及他的子類
protected string $name;
// public > protected > private
// 類中,類外,子類: public
// 類中,子類: protected
// 類中: private
// 2. 方法
public function __construct($name)
{
$this->name = $name;
}
// 自定義方法
protected function getInfo(): string
{
return $this->name;
}
}
class Stu extends Person
{
// extends: 相當于把父類代碼復(fù)制到當前類中(除Private成員外)
// 只需要擴展父類中的:"屬性和方法"
// 1. 屬性擴展
// 之前
// protected string $name;
// 擴展的
private string $lesson;
private int $score;
// 2. 方法擴展
// 構(gòu)造方法
public function __construct($name, $lesson, $score)
{
// parent: 引用父類
parent::__construct($name);
$this->lesson = $lesson;
$this->score = $score;
}
// protected -> public
public function getInfo(): string
{
return parent::getInfo() . '同學, (' . $this->lesson .
' ) , 成績: ' . $this->score .'<br>';
}
}
$stu = new Stu('小張', 'php', 90);
echo $stu->getInfo() ;
禁用父類, 僅允許通過它的子類來訪問父類成員
把當前類,聲明為”抽象類”: abstract
如果類中有抽象方法,則這個類必須聲明為抽象類
abstract class Demo1
{
public string $name = 'admin';
// 如果某個方法沒有具體實現(xiàn),應(yīng)該聲明成抽象方法
abstract public static function getInfo($name);
}
class Demo2 extends Demo1
{
// 在子類中, 必須將父類中的抽象方法實現(xiàn)了
public static function getInfo($name)
{
return 'Hello, ' .$name;
}
}
echo Demo2::getInfo('朱老師');
升級版的”抽象類”
// 接口類
interface iUser
{
// 常量
public const NATION = 'CHINA';
// 方法: public
public function m1();
public function m2();
}
// 工作類: 實現(xiàn)了接口的類
class Demo1 implements iUser
{
// 接口的抽象方法,必須在工作類中全部實現(xiàn)
public function m1()
{
}
public function m2()
{
}
}
// 如果實現(xiàn)類僅實現(xiàn)了接口的一部分抽象方法,應(yīng)該聲明為抽象類
abstract class Demo2 implements iUser
{
public function m1()
{
}
}
class Demo3 extends Demo2
{
public function m2()
{
}
}
// php是單繼承
interface A
{
}
interface B
{
}
interface C
{
}
// Test類,同時從三個接口中獲取成員,間接實現(xiàn)了"多繼承"
class Test implements A, B, C
{
}
interface iDb
{
// insert
public static function insert(array $data);
// update
public static function update(array $data, string $where);
// delete
public static function delete(string $where);
// select
public static function select(array $options);
}
abstract class aDb
{
// insert
public static function insert(array $data)
{
}
// update
public static function update(array $data, string $where)
{
}
// delete
public static function delete(string $where)
{
}
}
class Db extends aDb
{
}
全局成員: 函數(shù), 常量, 類/接口,全局有效, 禁止重復(fù)聲明
function hello()
{
}
const A =1;
class D
{
}
// 將第二個hello 聲明到另一個空間中,不會重名了
namespace _0815_1;
function hello()
{
}
const A = 2;
class D
{
}
class Demo1
{
public static string $name = 'admin';
}
// 當存在命名空間時, 全局成員應(yīng)該使用完整的名稱
// 完整類名 = 空間名稱\類名
// ::class 獲取類的完整名稱
echo Demo1::class . '<br>';
echo \two\Demo1::$name;
namespace two;
class Demo1
{
public static string $name = '豬老師';
}
echo Demo1::class . '<br>';
// 跨空間訪問
// echo one\Demo1::$name;
// 跨空間訪問時,必須從根空間/全局空間開始查詢: \
echo \one\Demo1::$name;
// 實際訪問的是: 'two\one\Demo1'
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號