亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
博主信息
博文 77
粉絲 0
評(píng)論 0
訪問量 80478
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
類與對(duì)象、oop封裝性、構(gòu)造器,魔術(shù)方法的應(yīng)用(屬性重載與方法重載),類的原生自動(dòng)加載,類的繼承與功能擴(kuò)展
Jet的博客
原創(chuàng)
683人瀏覽過

一、類與對(duì)象、oop封裝性、構(gòu)造器

  1. /**
  2. * 1. 類文件名稱與類名稱一樣
  3. * 2. 變量是實(shí)現(xiàn)數(shù)據(jù)的復(fù)用,函數(shù)是實(shí)現(xiàn)了代碼塊的復(fù)用
  4. * 3. 類是具有相同屬性和方法的對(duì)象的集合
  5. * 4. 對(duì)象 是復(fù)合數(shù)據(jù)類型
  6. * 5. oop 單位是對(duì)象,對(duì)象是類實(shí)例化的結(jié)果
  7. */
  1. // ! 1. 類 與 對(duì)象
  2. class User
  3. {
  4. // 成員屬性,一定要有訪問修飾符
  5. // ! 2. OOP封裝性
  6. /**
  7. * public: 公共的(類外可以訪問)
  8. * private: 私有的(只能本類訪問)
  9. * property:受保護(hù)的(僅對(duì)本類和子類訪問,類外無法訪問)
  10. * 構(gòu)成OOP封裝性(繼承、多態(tài))
  11. */
  12. public string $name; // 定義增加類型,
  13. private int $salary;
  14. protected int $age;
  15. // 魔術(shù)方法 必須是公有的,為系統(tǒng)所調(diào)用,用戶不能直接調(diào)用
  16. // __set __get _call __callStatic
  17. // ! 3 構(gòu)造器
  18. // 特殊的成員方法 __construct
  19. // 用途:創(chuàng)建實(shí)例化出事狀態(tài),屬性賦值(私有屬性),調(diào)用方法
  20. public function __construct($name,$salary,$age)
  21. {
  22. // 代表本對(duì)象
  23. $this->name = $name;
  24. $this->salary = $salary;
  25. $this->age = $age;
  26. }
  27. // 成員方法:
  28. public function say(){
  29. return $this->name . '會(huì)說話,他現(xiàn)在的工資是' . $this->salary;
  30. }
  31. }
  32. // 實(shí)例化
  33. //$james = new User();
  34. $james = new User('Jordan', 10000, 18);
  35. //var_dump($james);
  36. // 給對(duì)象屬性賦值
  37. $james->name = 'Jordan';
  38. // 對(duì)象屬性訪問: ->
  39. echo "<pre>";
  40. echo $james->name;


二、魔術(shù)方法的應(yīng)用(屬性重載與方法重載)

2.1、屬性重載

  1. // 屬性攔截器 重載
  2. // 訪問當(dāng)前環(huán)境下不存在 或者不可見的成員時(shí),會(huì)被自動(dòng)調(diào)用
  3. // 原始屬性value不會(huì)因此而改變
  4. public function __get($name){
  5. $res = 0;
  6. if($name === 'salary')
  7. {
  8. $res = $this->$name - 5000;
  9. }else{
  10. $res = $this->$name;
  11. }
  12. return $res;
  13. }
  14. // 未當(dāng)前環(huán)境下不存在,或者不可見的成員賦值時(shí),會(huì)被自動(dòng)調(diào)用
  15. // 原始屬性value會(huì)根據(jù)而改變
  16. public function __set($name, $value)
  17. {
  18. if($name === 'salary')
  19. {
  20. $this->$name += $value;
  21. } else {
  22. $this->$name = $value;
  23. }
  24. }
  1. //實(shí)例化
  2. $james = new User();
  3. // 對(duì)象屬性訪問: ->
  4. echo "<pre>";
  5. echo $james->name . '<br />';
  6. echo $james->salary. '<br />'; //5000 __get
  7. var_dump($james); // 10000
  8. $james->salary = 2000; // __set
  9. echo $james->salary. '<br />'; // 7000
  10. var_dump($james); // 12000


2.2、方法重載 _call()

  1. // ! 4. 魔術(shù)方法 __call()
  2. // 方法重載
  3. public function __call($name, $args)
  4. {
  5. if($name == 'hello')
  6. {
  7. return <<<DATA
  8. $this->name:
  9. 工資($this->salary)
  10. 對(duì)象($this->age)
  11. DATA;
  12. }
  13. if ($name == 'sum') {
  14. return array_sum($args);
  15. }
  16. }
  1. //實(shí)例化
  2. $james = new User();
  3. // 方法:
  4. echo $james->say() . '<br />';
  5. echo $james->hello() . '<br />';
  6. echo call_user_func([$james, 'sum'],10,20,30) . '<br />';
  7. echo call_user_func_array([$james,'sum'],[10,20,30]);


三、類的原生自動(dòng)加載

類的自動(dòng)加載器 autoload.php

  1. <?php
  2. // 類的自動(dòng)加載器
  3. spl_autoload_register(function ($className) {
  4. //var_dump($className);
  5. $classFile = __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . $className . '.php';
  6. if(is_file($classFile) && file_exists($classFile))
  7. require $classFile;
  8. });

引入類的自動(dòng)加載器 client.php

  1. <?php
  2. // 客戶端代碼
  3. // 引入類的自動(dòng)加載器
  4. require __DIR__ . DIRECTORY_SEPARATOR . 'autoload.php';
  5. /*
  6. require __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'Product.php';
  7. require __DIR__ . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'User.php';
  8. */
  9. echo "<pre>";
  10. $i = new Product("iphone 14 pm", 9999, 12);
  11. echo $i->show() . "<pre>";
  12. $u = new User("peter",12000,12);
  13. echo $u->say();


四、類的繼承與功能擴(kuò)展

父類 Product.php

  1. <?php
  2. class Product
  3. {
  4. public string $name;
  5. protected float $price;
  6. protected int $num;
  7. public function __construct($name, $price, $num)
  8. {
  9. $this->name = $name;
  10. $this->price = $price;
  11. $this->num = $num;
  12. }
  13. // 普通方法
  14. public function show()
  15. {
  16. return <<<SHOW
  17. 1.品名:$this->name
  18. 2.價(jià)格:$this->price
  19. 3.屬性:$this->num
  20. SHOW;
  21. }
  22. }

Son類 Son.php:繼承與功能擴(kuò)展

  1. <?php
  2. // 類的繼承 擴(kuò)展 extends
  3. // Son 繼承 Product
  4. class Son extends Product
  5. {
  6. // 擴(kuò)展父類屬性
  7. public string $brand;
  8. public function __construct($name, $price, $num, $brand)
  9. {
  10. // 擴(kuò)展父類功能
  11. // parent::調(diào)用父類成員
  12. // self:: 類的引用,靜態(tài)成員的訪問
  13. parent::__construct($name, $price, $num);
  14. $this->brand = $brand;
  15. }
  16. // 重寫 出現(xiàn)再成績(jī)上下文里
  17. public function show()
  18. {
  19. return parent::show() . <<<SON
  20. 4.品牌:$this->brand
  21. SON;
  22. }
  23. // 擴(kuò)展功能
  24. public function total()
  25. {
  26. return "$this->name,數(shù)量為{$this->num},總計(jì):" . ($this->price * $this->num) . "元";
  27. }
  28. }

批改老師:PHPzPHPz

批改狀態(tài):合格

老師批語:
本博文版權(quán)歸博主所有,轉(zhuǎn)載請(qǐng)注明地址!如有侵權(quán)、違法,請(qǐng)聯(lián)系admin@php.cn舉報(bào)處理!
全部評(píng)論 文明上網(wǎng)理性發(fā)言,請(qǐng)遵守新聞評(píng)論服務(wù)協(xié)議
0條評(píng)論
作者最新博文
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)

  • 登錄PHP中文網(wǎng),和優(yōu)秀的人一起學(xué)習(xí)!
    全站2000+教程免費(fèi)學(xué)