**世界上唯一不變的變化。**
現代編程語言中的基本元素主要有:變量,流程控制接口,函數等等。我們能否不使用變量來編寫程序呢?這顯然是可以的,例如:
<?php
echo "Hello TIPI Readers";
這個程序很簡單,輸出一個字符串內容。
就和我們僅僅使用二進制也能編程一樣,不使用變量也能完成某些工作,不使用變量我們的程序將會非常難以編寫和維護,變量可以讓我們將值存儲起來,以便在程序的其他地方使用,或者通過計算保存新的值。
變量具有三個基本組成部分:
1.
**名稱**變量的標示符。就像小狗一樣,主人可能會給這些小狗起個喜歡的名稱。變量命名上,PHP繼承了Perl的語法風格,變量以美元符號開始,后面跟變量名。一個有效的變量名由字母或者下劃線開頭,后面跟上任意數量的字母,數字,或者下劃線。PHP同時還支持復合變量,也就是類似$$a的變量,它會進行兩次的解釋。這給PHP帶來了非常靈活的動態特性。
1.
**類型**變量的類型,就像小狗的品種,不同的小狗血統可能會不一樣,有的聰明,有的會購物等等。在很多靜態語言中,變量在定義時就指定了,在程序運行過程中都不允許進行變更,那如果你有一只能隨便指定品種的小狗會不會很拉風呢;-)PHP就是這樣,屬于弱類型語言,可以隨便賦予它任何類型的值。
1.
**值內容**。這是標示所代表的具體內容。這就像是實實在在的小狗的這個實物。你可以給任何一條小狗起名為:小七,在編程語言中也是如此,你可以給變量賦予它所能表示范圍的值。不過在同一時間,變量只能有一個值。
> PHP中組成變量名的字母可以是英文字母 a-z,A-Z,還可以是 ASCII 字符從 127 到 255(0x7f-0xff)。 變量名是區分大小寫的。
除了變量本身,在PHP中我們經常會接觸到與變量相關的一些概念,比如:常量,全局變量,靜態變量以及類型轉換等。本章我們將介紹這些與變量相關的實現。其中包括PHP本身的變量底層存儲結構、弱類型系統的實現以及這些類型之間的相互轉換等。
先看一段PHP代碼:
<?php
$foo = 10;
$bar = 20;
?
function change() {
global $foo;
$bar = 0;
$foo++;
}
?
change();
echo $foo, ' ', $bar;
運行代碼會輸出**11 20**。可是為什么會有這樣的輸出呢?變量在PHP的內部是如何實現的呢?變量的作用域又是怎么實現的呢?這是本章將對圍繞**變量**這個主題展開討論,下面我們從最基本的變量實現開始。
> 不是所有編程語言中的變量的值都可以改變的。想想我們學過的數學中的變量。 他們的值也是不可改變的。例如: x + y = 10; 變量x和y的值是不能發生變化的。 在某個具體場景,也就是某個方程式中只有表示特定的值,變量的值不能改變的好處是: 這樣就能盡可能少的產生[副作用](http://en.wikipedia.org/wiki/Side_effect_(computer_science)), 在[Erlang語言](http://www.erlang.org/)中就是如此,它是一門函數式編程語言,非常值得學習。
## 數據類型
從類型的維度來看,編程語言可以分為三大類:
1. 靜態類型語言,比如:C/Java等,在靜態語言類型中,類型的檢查是在編譯期(compile-time)確定的,也就是說在運行時變量的類型是不會發生變化的。
1. 動態語言類型,比如:PHP,python等各種腳本語言,這類語言中的類型是在運行時確定的,那么也就是說類型通常可以在運行時發生變化
1. 無類型語言,比如:匯編語言,匯編語言操作的是底層存儲,他們對類型毫無感知。
- 第一章 準備工作和背景知識
- 第一節 環境搭建
- 第二節 源碼結構、閱讀代碼方法
- 第三節 常用代碼
- 第四節 小結
- 第二章 用戶代碼的執行
- 第一節 生命周期和Zend引擎
- 第二節 SAPI概述
- Apache模塊
- 嵌入式
- FastCGI
- 第三節 PHP腳本的執行
- 詞法分析和語法分析
- opcode
- opcode處理函數查找
- 第四節 小結
- 第三章 變量及數據類型
- 第一節 變量的結構和類型
- 哈希表(HashTable)
- PHP的哈希表實現
- 鏈表簡介
- 第二節 常量
- 第三節 預定義變量
- 第四節 靜態變量
- 第五節 類型提示的實現
- 第六節 變量的生命周期
- 變量的賦值和銷毀
- 變量的作用域
- global語句
- 第七節 數據類型轉換
- 第八節 小結
- 第四章 函數的實現
- 第一節 函數的內部結構
- 函數的內部結構
- 函數間的轉換
- 第二節 函數的定義,傳參及返回值
- 函數的定義
- 函數的參數
- 函數的返回值
- 第三節 函數的調用和執行
- 第四節 匿名函數及閉包
- 第五節 小結
- 第五章 類和面向對象
- 第一節 類的結構和實現
- 第二節 類的成員變量及方法
- 第三節 訪問控制的實現
- 第四節 類的繼承,多態及抽象類
- 第五節 魔術方法,延遲綁定及靜態成員
- 第六節 PHP保留類及特殊類
- 第七節 對象
- 第八節 命名空間
- 第九節 標準類
- 第十節 小結
- 第六章 內存管理
- 第一節 內存管理概述
- 第二節 PHP中的內存管理
- 第三節 內存使用:申請和銷毀
- 第四節 垃圾回收
- 新的垃圾回收
- 第五節 內存管理中的緩存
- 第六節 寫時復制(Copy On Write)
- 第七節 內存泄漏
- 第八節 小結
- 第七章 Zend虛擬機
- 第一節 Zend虛擬機概述
- 第二節 語法的實現
- 詞法解析
- 語法分析
- 實現自己的語法
- 第三節 中間代碼的執行
- 第四節 PHP代碼的加密解密
- 第五節 小結
- 第八章 線程安全
- 第二節 線程,進程和并發
- 第三節 PHP中的線程安全
- 第九章 錯誤和異常處理
- 第十章 輸出緩沖
- 第十六章 PHP語言特性的實現
- 第一節 循環語句
- foreach的實現
- 第二十章 怎么樣系列(how to)
- 附錄
- 附錄A PHP及Zend API
- 附錄B PHP的歷史
- 附錄C VLD擴展使用指南
- 附錄D 怎樣為PHP貢獻
- 附錄E phpt測試文件說明
- 附錄F PHP5.4新功能升級解析
- 附錄G:re2c中文手冊