## php論
**小明**:蝌蚪哥,我剛看了你寫的“或多或少的c語言知識”。發現c語言能做好多事情,可是現在為啥都不用c語言,而要有各種各樣的語言?
**蝌蚪哥**:這個問題問的很不錯,因為它的答案也很有深意。c語言是一門非常靈活的語言,想要熟練的掌握可不容易(看看進階和大成里的內容就能知道)。而且它自身的好多功能都太簡單,簡單到什么都能用,但用的時候又得自己動手搭(就好比生活中造樓的所有材料和工具都有,但是,當我想外出旅行的時候住。拿材料搭遠不如帶一個現成的房子要來的方便)。因此,一些大牛們就把c語言的存儲方面歸總出來,做成數據庫(專門用來操作數據)。另一些大牛們,就編程方面開發出了java,主管企業方面的oa系統的集成和開發。還有一些就是打包了c的文件操作,來給用戶提供服務。比如:php。再一個很重要的方面,就是能掙錢。
**小明**:你的意思是之所以有現在的五花八門的語言,其實有2方面的原因:一個是**為了滿足不同程序員的不同需求**。另一個是**程序員為了掙錢**。能再給我詳細說一下,你是怎么理解這兩點的嗎?
**蝌蚪哥**:首先在編程領域中,不同的領域用到的知識的深度和廣度都是不一樣的。**學術方面的程序員**。像數據庫的大牛們肯定整天就是在研究不同的算法處理數據能力的差異,然后進行迭代開發優化數據庫的功能;**技術方面的程序員**。像sun公司和微軟。他們分別開發出了java和c#,這些語言的誕生就是為企業服務的,就是為了掙錢。
**小明**:那為什么現在java比c#要火呢?
**蝌蚪哥**:這2種語言的誕生其實也有一個很有意思的小故事。他們有一個共同的祖先,就是c++。說這兩門語言前我不得不說c++。c++有3種編程思想:過程,對象和泛型。但是在早期的c++它只是有雛形,并沒有明確的提出來,因此好多人學c++的感覺就是雨里霧里,覺得太難選擇放棄。直到java提出這三個概念,這應該還得感謝sun公司。同樣地,正是由于這3個概念的提出,大大降低了c++的學習難度,但是受根深蒂固的思想影響,人們不愿意再去看c++,進而轉向了java。這也導致當時的sun公司可謂是意氣風發,誰也不放在眼里,包括微軟。微軟看不下去了,它那個時候站了出來,出于對c語言的敬畏和熱愛,出于對java的敵視兩方面的原因。它把和java(java用的是駝峰法,即首字母大寫)大同小異的部分重新打包,只不過變量和函數的起名規則改成匈牙利命名法(全小寫,_隔開)。并命名為c#(即c++++)。現在windows操作系統想要跑java程序必須安裝java虛擬機,在早期windows是不對java開放的,這就是原因。但是由于windows的安全問題。人們企業都用linux,進而可以很好的兼容java,所以現在得企業大部分都是在用java。所以導致了在企業OA系統方面java比c#火。。但是,提到游戲方面,java就得讓c#甩后幾條街了,因為linux沒游戲。。。。
**小明**:物競天擇,適者生存。在計算機語言行業里可謂是表現的淋漓精致,那這么說現在存留下來的計算機語言是不是都包含了過程,對象和泛型編程?我想聽你詳細地講一下。
**蝌蚪哥**:過程,對象和泛型。這三個其實很有意思。“或多或少的c語言知識”里,我舉的就是一個OA系統的例子,而它是用c語言寫的。這么說吧,世上本沒有對象,因為世間萬物都是處在時間軸上的,是線性的。那么在對象提出來之前的一切編程,都能看作是過程編程。那什么是對象?我相信在我講完c語言初探篇后,你對數據類型有了一個很深的印象。那么對象就可以理解成一個**被打包的函數類型**。這個函數里可以放置:1.**子函數**。2.**變量**。再未實例化之前,它就和int一樣,存在于text文本里(或者說腦海里)。實例化后,它就像一個結構體,你能使用它的成員函數和成員變量。你不需要重新寫那個函數代碼,只需要new一個“函數變量”就可以了。
解釋完對象編程,泛型編程就很好理解了。
對象打包了函數。那么數據結構和數據類型的打包就全部歸于泛型了。最典型的例子:PHP中的$a變量。
**小明**:聽完你講的這么一大段:oop(面向對象編程)是編程的數據方面(函數處理數據),泛型(generic)是獨立于特定的數據類型。好多書上都有詳細的介紹,我想著重聽聽泛型編程。
**蝌蚪哥**:好的,泛型編程顧名思義,泛泛的數據類型。現在不是又有兩種新的名詞誕生了么,靜態編程語言和動態編程語言。對于這些,我只想說:這些城里人真會玩兒,像我這種只懂c的人,還是回家種地吧。我們拿php舉例子吧,因為php會成為主流語言的。
php中的變量符號:只有一個$。 你可以把變量寫成以下任意一種:
$a = 1000;
$b = '1000';
$c = "1000";
$d = 1.000;
$e = max();
$f = NULL;
**小明**:為什么只有一個類型符號,在c語言中,每定義一個變量都需要指出它是什么類型,需要幾個字節的大小,為啥PHP只有$符號?還有,什么是動態和靜態語言?
**蝌蚪哥**:因為PHP在程序編譯的時候,會根據特定數據來動態分配數據類型空間,而c語言要自己手動寫類型。這就是動態語言和靜態語言的區別。
如果我現在要寫一段代碼:
$sum = $a + $b +$c + $d;
**小明**:不同的數據類型,$a是整型$b字符型$c字符串$d浮點型。。它們怎么可能進行運算?
**蝌蚪哥**:是不是感覺很不可思義?這就是所謂的泛型編程。忽略數據的類型,進而簡化數據的操作。它的實現原理,可以看“或多或少的c語言知識”里提出的體系。一個變量最終會通過這顆樹,最終匯總成同一個數據類型。
**小明**:這么看來,泛型編程的實現其實就是數據結構,它最終解決的是數據類型的簡化。
**蝌蚪明**:今天引出php和一些基本實現原理。希望你以后看待新技術的時候,不要忘了舊的技術,因為新技術是建立在舊知識的基礎上的。
- 2023-4-8__成長之路
- 技術雜談
- 程序員境界
- 走進猿類
- 做一個程序員
- 什么是猿類
- 愛亂吹的猿
- 業余生活
- 我的書架
- 高效程序員的45個習慣
- 敏捷—高效軟件開發之道
- 態度決定一切
- 學無止盡
- 交付用戶想要的軟件
- 敏捷反饋
- 敏捷編碼
- 敏捷調試
- 藝術人生
- 摘自藝術的境界
- 如何欣賞畫
- 《的》
- 我的文檔
- 小白學習前那些說不完的事
- 計算機語言都一樣
- 嘗試理解他人代碼
- 做為旁觀者的思考
- 怎樣才算懂計算機
- 工欲善其事,必先利其器
- 教案日志
- 十天學電腦
- 一,認識計算機
- 二、認識編程語言
- 三、認識程序內涵
- 四,認識數據結構
- 五、認識電腦系統
- 六、認識通信原理
- 七、郵箱管理
- 八、重新審視電腦
- 九、理解終生學習
- 十、感悟三千世界
- c語言
- C語言——我覺得好簡單
- c學好不怕沒飯碗—2014.7.21
- C語言——我想的有點兒簡單
- 或多或少的c語言知識
- c語言初探篇
- 初探c語言底層
- 初探整型和浮點型
- 初探二進制數---原反補移
- 初探有無符號
- 初探c是如何跑起來的
- 初探指針
- 初探數組
- 初探順序表
- 初探棧,隊列
- 初探c語言編程
- c語言進階篇
- c語言自身的那些事
- 結構詳解
- c語言大成篇
- 人類思維——模式匹配
- 論c語言面試
- 數據結構
- 核心概念,沒有之一順序表
- 線性表代碼實現
- Sq_list
- 不存在的鏈表
- 只是一種思想——棧
- 只是一種思想——隊列
- 不存在的樹
- 只是一種思想——二分法
- 不存在的圖
- 算法原理
- 傅里葉變換
- 算法導論
- 算法導論——c語言實現
- 算法導論——java實現
- 組成原理
- 操作系統
- 初探操作系統
- 深究操作系統
- 操作系統如何跑起來
- 進程就像細胞
- 系統就像生命
- 進程樹pstree
- 進程
- 進程何時更名為生命
- 初探進程映像
- 程序如何成為進程映像
- PCB
- PCB解讀之——信號量(p_sig)
- 進程同步
- 進程通信
- 進程調度
- 用戶
- PPDA
- 存儲系統
- I/O系統
- 網絡原理
- 通信簡史
- 通信是網絡基礎
- 趣談網絡
- 自我介紹
- 快遞公司
- 小D的自述
- 網絡架構
- OSI/RM
- 應用層
- 表示層
- 會話層
- 傳輸層
- 網絡層
- 數據鏈路層
- 物理層
- TCP/IP四層模型
- 五層模型
- 網絡劃分
- IP史
- 信息安全
- 社會工程學
- 信息收集
- 誘導
- 偽裝
- 如何成為任何人
- 社會心理學
- 思維模式
- 說服的力量
- 代碼審計
- 災難恢復
- 安全注入
- 網絡工程
- 802.11
- CCNA
- CWNA
- 社會工程
- 社會心理
- 信息誘導
- 身份偽裝
- 系統框架
- web前端框架
- smarty框架
- bootstrap框架
- thinkphp框架
- zend框架
- yii框架
- ci框架
- 網站開發
- 五大難題
- 網站工作原理
- 數據庫原理
- 服務器原理
- 前端開發
- 前端技能基礎
- html
- css
- javascript
- 瀏覽器兼容
- 前端總結
- 后臺開發
- 或多或少的JS
- js初探篇
- 理解Javascript
- JS繼承
- 數組
- 操作方法
- DOM事件
- 數據傳輸
- JS面試題
- 數據對象
- 學生管理系統
- 學生管理首頁
- 粗略學了一遍后的總結
- 零碎知識
- js初探篇第二版
- javascript構成
- 基本類型
- 基本語句與判斷類型
- 基本對象與操作函數
- 基本判斷與甄別數據
- 內置對象與操作函數
- 對象認識與深淺復制
- DOM級別與BOM
- 嚴格模式與混雜模式
- ES5和ES6
- js進階篇
- 上傳圖片
- js實戰篇
- 或多或少的PHP
- 詳解url結構
- html基礎
- html初識
- html-組成頁面的基礎標簽
- ie兼容
- 教學方法
- 論php——編程思想
- 論php——底層實現
- 中華國學
- 易經
- 黃帝內經
- 山海經
- 道德經
- 騙經
- 中華哲學
- 一花一世界
- 道可道非常道
- 一瞬
- 宇宙
- 心得體會
- 電腦叫智能生命體更準確
- 計算機不是漢語模式
- 瑣事日記
- 成長與人性
- 祝單身狗快樂
- 人其實過的很單薄
- 都怪自己不夠優秀
- 那是幾個人的世界
- 認清世界,認清自己
- 陪伴繁華逝去的平凡
- 俯拾仰取
- 技術手冊
- 網站開發
- 準備工作
- firewalld
- mysql
- redis
- 開發流程
- 整體配置
- 環境配置
- tomcat配置
- 數字證書配置
- 項目配置
- 數據設計
- 用戶管理
- 整站設計
- user
- user_group
- user_role
- 服務端
- 了解學習
- quartz
- HelloWorld
- HelloJob
- HelloQuartz
- HelloScheduler
- Job
- JobDataMap
- Trigger
- Scheduler
- properties
- spring
- AOP
- 使用
- svnkit
- svn init
- FSFS
- server
- Java
- 測試
- 任務調度
- 網站架構
- 網站前端
- pc端
- 移動端
- native
- ios
- android
- ipad
- hybrid
- 技術日志
- 2018-9-26
- 2018-11-26
- 資源收集
- UED資源
- 技術架構
- 云平臺
- 工作方面
- 實習工作經驗
- 草稿1
- 草稿2
- 草稿3
- 草稿4
- 草稿5
- 草稿6
- 草稿7
- 大學總結
- 面經
- 一、職能定位
- 細節
- 前端
- 工作總結
- 簡歷
- 職業規劃
- 一年規劃
- 整理歸檔
- 2015/11/10以前
- 2015/11/10
- 2015/11/11
- 2015/11/12
- 2015/11/13
- 2015/11/14
- 2015/11/15與16
- 2015/11/17
- 2015/11/18
- 2015/11/19與20
- 2015/11/21
- 2015/11/22
- 2015/11/23
- 2015/11/24
- 2015/11/25
- 2015/11/26
- 2015/11/27
- 2015/11/28
- 2015/11/29
- 2015/11/30-12/6
- 2015/12/7-2016/4/18
- 2016/4/19
- 2016/4/20~2017/6/27
- 2017/6/28-2017/7/4
- 2017/7/5-2018/1/11
- 2018/1/12
- 2018/1/13-2018/4/19
- 2018/4/20
- 2018/4/21-2018/5/10
- 2018/5/11
- 2018/5/12-2018/5/16
- 2018/5/17-2018/5/30
- 2018/5/30-2018/10/15
- 2018/10/15-2018/10/18
- 2018/10/19-2018/11/17
- 2018/11/17-2018/12/31
- 結束----------------開始
- 2019/2/18
- 2020/7/30
- 2020/9/5
- 2021/5/6
- 回收站
- 以前文件
- 2015-10-17__成長之路
- 2018-10-15__成長之路
- 2020-3-29__成長之路
- 畢業三年總結
- 浙大之旅
- 2020
- 英語
- 基礎3000單詞
- 第一周
- 百詞斬__126
- 百詞斬__126翻譯
- 百詞斬__252
- 百詞斬_252翻譯
- 百詞斬__392
- 百詞斬__532
- 百詞斬__672
- 第二周
- 百詞斬__812
- 聽力
- 新東方演講稿
- 庫克杜克大學演講全文版
- 庫克杜克大學演講演講英文對照版