PHP面向對象和麵向過程

来源:https://www.cnblogs.com/cuiyuanxin/archive/2019/02/23/10423550.html
-Advertisement-
Play Games

編程界不論是PHP、Python都有這麼兩種編程思想,oop面向對象、pop面向過程,這兩種在功能上沒有多大區別,但是在代碼編寫上卻有很大區別。今天就記錄一下麵向對象和麵向過程的優點、缺點、定義、實現過程。 oop 面向對象 面向對象有兩個重要的概念:類和對象。 什麼是類?類是具備某項功能的抽象模型 ...


編程界不論是PHP、Python都有這麼兩種編程思想,oop面向對象、pop面向過程,這兩種在功能上沒有多大區別,但是在代碼編寫上卻有很大區別。今天就記錄一下麵向對象和麵向過程的優點、缺點、定義、實現過程。

  • oop 面向對象

面向對象有兩個重要的概念:類和對象。

什麼是類?類是具備某項功能的抽象模型,在應用當中類需要實例化也就是new之後使用,這個時候就引出了對象。

什麼是對象?對象是類實例化之後的一個產物,是一個實體。

面向對象的3個基礎特征:

  • 封裝

把客觀事物封裝成一個類,通過修飾符改變屬性或函數的訪問許可權達到保護作用

  • 繼承

子類繼承父類,可以使用父類的公共屬性和方法,可以實現介面,同時實現介面里的所有方法

  • 多態

覆蓋和重載,子類繼承父類,子類可以覆蓋父類中的方法。一個類中可以同時擁有同一個函數名的方法,但是方法的參數不同,實現結果也不同。

面向對象的幾個名詞:類、對象、屬性、方法、實例化。

面向對象優點:可擴展性高,可復用,易維護

面向對象缺點:編程複雜度高,性能比面向過程低(需要實例化類)

來一段簡單的代碼demo:

 

 1 <?php
 2 
 3 /**
 4 * 面向對象 
 5 * 兩個重要概念 
 6 * class app 就是一個類
 7 */
 8 class oop {
 9 
10     /**
11     * 面向對象三大特征
12     * 封裝 把客觀事物封裝成一個類,通過修飾符改變類的屬性、函數的訪問許可權,達到保護作用
13     * private 私有成員 public 公共 protected 保護成員
14     */
15     public $name = '名字';
16     public $sex = [
17         '男', '女'
18     ];
19     private $eag = 30;
20     protected $job = '女公關';
21 
22     public function dump() {
23         echo $this->name;
24     }
25 
26 }
27 
28 /**
29 * 面向對象三大特征
30 * 繼承 子類繼承父類 子類可以使用父類的公共屬性和方法
31 */
32 class oop1 extends oop {
33 
34     public function dump1() {
35         var_dump($this->sex);
36     }
37 
38     /**
39     * 面向對象三大特征
40     * 多態 覆蓋和重載 子類繼承父類 子類可以覆蓋父類的方法,一個類里可以存在用一個函數名方法,但是參數不一樣,結果也不一樣
41     */
42     public function dump() {
43         echo __CLASS__ . '覆蓋了父級' . __FUNCTION__ . '的結果';
44         echo '<br>';
45     }
46 
47 }
48 
49 /**
50 * 面向對象三大特征
51 * 繼承 子類繼承父類 子類可以使用父類的公共屬性和方法
52 */
53 class oop2 extends oop {
54 
55     /**
56     * 面向對象三大特征
57     * 多態 覆蓋和重載 子類繼承父類 子類可以覆蓋父類的方法,一個類里可以存在同一個函數名的方法,但是參數不一樣,結果也不一樣
58     */
59     public function dump() {
60         echo __CLASS__ . '覆蓋了父級' . __FUNCTION__ . '的結果';
61         echo '<br>';
62     }
63 
64 }
65 
66 //類是具備某項功能的抽象模型,實際應用中要先實例化(new)後使用,以下就是實例化類,列印$class看到的結果就是對象
67 $class = new oop();
68 //object(oop)#1 (2) { ["name"]=> string(6) "名字" ["sex"]=> array(2) { [0]=> string(3) "男" [1]=> string(3) "女" } } 
69 var_dump($class);
70 echo '<br>';
71 //實例化之後就可以調用公共屬性(變數)
72 $name = $class->name;
73 var_dump($name);
74 echo '<br>';
75 //實例化之後就可以調用公共函數(方法)
76 $class->dump();
77 echo '<br>';
78 $class1 = new oop1();
79 var_dump($class1);
80 echo '<br>';
81 $class1->dump1();
82 echo '<br>';
83 $class1->dump();
84 $class2 = new oop2();
85 var_dump($class2);
86 echo '<br>';
87 $class2->dump();

 

執行結果:

 

PHP面向對象和麵向過程

  •  pop 面向過程

面向過程的代碼執行是從上到下(從前到後),有一個個函數去實現步驟,使用的時候需要一個一個依次調用。

面向過程優點:性能比面向對象高(不用去實例化類),將複雜的問題流程化,進而簡單化。

面向過程缺點:不易維護,可擴展性不高。

代碼片段:

 1 <?php
 2 
 3 /**
 4 * 面向過程的資料庫連接方式
 5 */
 6 
 7 
 8 function db($cnf) {
 9 
10     $config = [
11         'host' => 'localhost',
12         'username' => 'root',
13         'password' => 'root',
14         'databases' => '',
15         'port' => 3306,
16         'conding' => 'utf8'
17     ];
18 
19     $rows = array();
20 
21     if(isset($cnf) && is_array($cnf)) {
22         $config = array_merge($config, $cnf);
23     }
24     $link = mysqli_connect($config['host'], $config['username'], $config['password'], $config['databases'], $config['port']);
25     if(mysqli_connect_errno($link)) {
26         die('MySQL資料庫連接失敗,錯誤代碼ERROR:' . mysqli_connect_errno());
27     }
28     // if(!$config['databases']) {
29     //     $conding = $config['conding'];
30     //     mysqli_query("SET NAMES '{$condig}'", $link);
31     //     mysqli_select_db($config['databases'], $link);
32     // }
33     $sql = 'select * from niuniu_user limit 1';
34     $query = mysqli_query($link, $sql);
35     $row = mysqli_fetch_array($query, MYSQLI_ASSOC);
36     if(mysqli_num_rows($query) > 1) {
37         while($row) {
38             $rows[] = $row;
39         }
40     } else {
41         $rows = $row;
42     }
43 
44     var_dump($rows);
45 
46     mysqli_close($link);
47 }
48 
49 
50 echo '面向過程的資料庫連接方式<br>';
51 
52 $cnf = [
53     'host' => '172.17.0.2',
54     'username' => 'root',
55     'password' => 'cuiyuanxin66666',
56     'databases' => 'nndb'
57 ];
58 
59 db($cnf);

源代碼已上傳GitHub:https://github.com/cuiyuanxin/php-demo

純手打筆記,如有錯誤請評論提出,謝謝。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 字體圖標生成 http://fluttericon.com/Flutter中文網 https://flutterchina.club Flutter官網 https://flutter.ioFlutter中文社區https://www.flutter123.netFlutter中文開發者論壇 htt ...
  • 前言 對於每一個程式員來說,空指針異常應該是基本都會遇到過的異常,而且這個異常出現的概率還比較大。 但是,空指針異常又是最容易解決的異常,因為只要加個非空判斷就可以避免了。 本篇通過對比一般非空判斷和 dart 特有的語法糖告訴你如何使用 dart 進行優雅的避空。 目錄 1. dart 線上編輯器 ...
  • 創建Comp組件<template> <div class="x-bar"> <div :id="id" :option="option"></div> </div></template><script> import HighCharts from 'highcharts' import high ...
  • 首先,不論是在Windows、Linux還是Mac上,Webassembly的編譯都是主要依賴於Emscripten SDK這個工具的。但是,在這裡必須要吐槽一下,不論是WebAssembly官網、WebAssembly中文網還是Emscriptem官網安裝文檔上給出的安裝方式基本都是這樣的(中文網 ...
  • 需要實現的功能有: 1、圖上點擊要素會出現自定義的信息視窗 2、將視圖內的要素顯示到右側的標簽中 3、點擊右側的標簽,定位到指定要素視圖 1、圖上點擊要素會出現自定義的信息視窗——註意書寫順序,不規範結果是出不來的 var map = new Map({ basemap:"dark-gray" }) ...
  • 設置預設值 這是被廣泛流傳的js技巧之一,這種編碼應該說是很壞的習慣。 ||的問題 js是一種弱類型的編程語言,代表著傳入的變數並不清楚作為何種類型使用。 這樣的定義在js是不存在的, 對js來說傳入的任意參數都應該考慮不同類型的結果 ,而不是單單考慮一種情況。若傳入0、false等,||所要實現默 ...
  • 上面是將有序數組轉為二叉樹的代碼~ 二分查找的速度為O(log n), 遍歷二叉樹的速度為O(n) ...
  • 近期有一個需求,需要對優惠券可用商品列表加個排序,只針對面值類的券不包括折扣券。 需求是這樣的,假設有一張面值券 50 塊錢,可用商品列表 A 100、B 40、C 10,當用戶查詢當前券可用商品列表的時候優先將卡券可以直接抵扣且不需要用戶在額外支付的商品排在前面。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...