
批改狀態(tài):合格
老師批語:
/**
* 1. 類文件名稱與類名稱一樣
* 2. 變量是實(shí)現(xiàn)數(shù)據(jù)的復(fù)用,函數(shù)是實(shí)現(xiàn)了代碼塊的復(fù)用
* 3. 類是具有相同屬性和方法的對(duì)象的集合
* 4. 對(duì)象 是復(fù)合數(shù)據(jù)類型
* 5. oop 單位是對(duì)象,對(duì)象是類實(shí)例化的結(jié)果
*/
// ! 1. 類 與 對(duì)象
class User
{
// 成員屬性,一定要有訪問修飾符
// ! 2. OOP封裝性
/**
* public: 公共的(類外可以訪問)
* private: 私有的(只能本類訪問)
* property:受保護(hù)的(僅對(duì)本類和子類訪問,類外無法訪問)
* 構(gòu)成OOP封裝性(繼承、多態(tài))
*/
public string $name; // 定義增加類型,
private int $salary;
protected int $age;
// 魔術(shù)方法 必須是公有的,為系統(tǒng)所調(diào)用,用戶不能直接調(diào)用
// __set __get _call __callStatic
// ! 3 構(gòu)造器
// 特殊的成員方法 __construct
// 用途:創(chuàng)建實(shí)例化出事狀態(tài),屬性賦值(私有屬性),調(diào)用方法
public function __construct($name,$salary,$age)
{
// 代表本對(duì)象
$this->name = $name;
$this->salary = $salary;
$this->age = $age;
}
// 成員方法:
public function say(){
return $this->name . '會(huì)說話,他現(xiàn)在的工資是' . $this->salary;
}
}
// 實(shí)例化
//$james = new User();
$james = new User('Jordan', 10000, 18);
//var_dump($james);
// 給對(duì)象屬性賦值
$james->name = 'Jordan';
// 對(duì)象屬性訪問: ->
echo "<pre>";
echo $james->name;
// 屬性攔截器 重載
// 訪問當(dāng)前環(huán)境下不存在 或者不可見的成員時(shí),會(huì)被自動(dòng)調(diào)用
// 原始屬性value不會(huì)因此而改變
public function __get($name){
$res = 0;
if($name === 'salary')
{
$res = $this->$name - 5000;
}else{
$res = $this->$name;
}
return $res;
}
// 未當(dāng)前環(huán)境下不存在,或者不可見的成員賦值時(shí),會(huì)被自動(dòng)調(diào)用
// 原始屬性value會(huì)根據(jù)而改變
public function __set($name, $value)
{
if($name === 'salary')
{
$this->$name += $value;
} else {
$this->$name = $value;
}
}
//實(shí)例化
$james = new User();
// 對(duì)象屬性訪問: ->
echo "<pre>";
echo $james->name . '<br />';
echo $james->salary. '<br />'; //5000 __get
var_dump($james); // 10000
$james->salary = 2000; // __set
echo $james->salary. '<br />'; // 7000
var_dump($james); // 12000
// ! 4. 魔術(shù)方法 __call()
// 方法重載
public function __call($name, $args)
{
if($name == 'hello')
{
return <<<DATA
$this->name:
工資($this->salary)
對(duì)象($this->age)
DATA;
}
if ($name == 'sum') {
return array_sum($args);
}
}
//實(shí)例化
$james = new User();
// 方法:
echo $james->say() . '<br />';
echo $james->hello() . '<br />';
echo call_user_func([$james, 'sum'],10,20,30) . '<br />';
echo call_user_func_array([$james,'sum'],[10,20,30]);
<?php
// 類的自動(dòng)加載器
spl_autoload_register(function ($className) {
//var_dump($className);
$classFile = __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . $className . '.php';
if(is_file($classFile) && file_exists($classFile))
require $classFile;
});
<?php
// 客戶端代碼
// 引入類的自動(dòng)加載器
require __DIR__ . DIRECTORY_SEPARATOR . 'autoload.php';
/*
require __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'Product.php';
require __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'User.php';
*/
echo "<pre>";
$i = new Product("iphone 14 pm", 9999, 12);
echo $i->show() . "<pre>";
$u = new User("peter",12000,12);
echo $u->say();
<?php
class Product
{
public string $name;
protected float $price;
protected int $num;
public function __construct($name, $price, $num)
{
$this->name = $name;
$this->price = $price;
$this->num = $num;
}
// 普通方法
public function show()
{
return <<<SHOW
1.品名:$this->name
2.價(jià)格:$this->price
3.屬性:$this->num
SHOW;
}
}
<?php
// 類的繼承 擴(kuò)展 extends
// Son 繼承 Product
class Son extends Product
{
// 擴(kuò)展父類屬性
public string $brand;
public function __construct($name, $price, $num, $brand)
{
// 擴(kuò)展父類功能
// parent::調(diào)用父類成員
// self:: 類的引用,靜態(tài)成員的訪問
parent::__construct($name, $price, $num);
$this->brand = $brand;
}
// 重寫 出現(xiàn)再成績(jī)上下文里
public function show()
{
return parent::show() . <<<SON
4.品牌:$this->brand
SON;
}
// 擴(kuò)展功能
public function total()
{
return "$this->name,數(shù)量為{$this->num},總計(jì):" . ($this->price * $this->num) . "元";
}
}
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)