進階 WWW 程式設計 -- PHP 語言結構 靜宜大學資訊管理學系 蔡奇偉副教授 2003

Slides:



Advertisements
Similar presentations
第 4 章 PHP 基本語法.
Advertisements

电子成绩单项目实现.
第二章 基本程式設計.
上課囉 職場甘苦談 小資男孩向錢衝 育碁數位科技 呂宗益/副理.
補充: Input from a text file
C++程序设计 王希 图书馆三楼办公室.
Chapter 5 Relational Algebra
Operators and Expressions
Ch07 PHP程式基礎 網頁程式設計.
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
關聯式資料庫.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
課程名稱:程式設計 授課老師:________
Visual Basic 6.0 學習範本 第三章 基本資料型態.
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
PHP 5 入門基礎 第一個PHP 程式 PHP 資料型態.
第五讲 数据的分组、合并与转换.
第3章 變數、資料型別與運算子.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第五章 shell 编程 shell 编程的基本过程分为三步: 1. 建立 shell 文件 包含任意多行操作系统命令或shell命令的文本
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
C 程式設計— 控制敘述 台大資訊工程學系 資訊系統訓練班.
1 巨集 2 資料型態 3 物件、屬性、方法與事件 4 陳述式與副函式 5 其他注意事項 6 範例
JAVA程序设计 第5章 深入理解JAVA语言----补充.
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C 語言簡介 - 2.
第3章 變數、常數與資料型態 3-1 C語言的識別字 3-2 變數的宣告與初值 3-3 指定敘述 3-4 C語言的資料型態
Chapter 2 Basic Elements of Fortran
第3章 變數、資料型別與運算子 3-1 變數與資料型別的基礎 3-2 變數的命名與宣告 3-3 資料型別 3-4 運算式與運算子
變數命名 保留字(Reserved Word)
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
PHP 變數、常數與運算子 變數 常數 運算子
樹 2 Michael Tsai 2013/3/26.
Programming Languages
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
PHP编程基础与实例教程 PHP Fundamentals & Practices
C语言概述 第一章.
在Microsoft Access 下 建立資料庫
数据块中的数据存储 目录 页 目标 …… 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
Speaker: Liu Yu-Jiun Date: 2009/4/29
Chapter 2 基本語法.
第3章 PHP表达式.
OpenMP程序设计 2019/4/25.
Action Script 使用介紹 第六組 張瀚之.
第6章 運算式與運算子 [算術與多功能計算機]
VB 2005資料型別與運算子.
计算机问题求解 – 论题1-5 - 数据与数据结构 2018年10月16日.
本节内容 Lua基本语法.
第二章 基本数据类型 ——数据的表示.
唐常杰 四川大学计算机学院 计算机科学技术系
第 8 章 标准模板库STL 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
第六章 类属B树索引技术 对基于树的索引方法给出一种通用算法。该算法是建立在类属B树的概念之上开发的。它将类型系统开放,使系统能支持用户自定义的数据类型、函数和某些特殊的查询谓词的集合。并且,将新的数据类型、函数、查询谓词等登记到数据库管理系统中,
Ch07. 函式.
進階 WWW 程式設計 -- PHP Array 靜宜大學資訊管理學系 蔡奇偉副教授
Introduction to the C Programming Language
Go 语言编程 —— 平台研发部 吴植民.
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
2 Number Systems, Operations, and Codes
数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
變數、資料型態、運算子.
第6章 PHP基本語法介紹.
變數與資料型態  綠園.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
Presentation transcript:

進階 WWW 程式設計 -- PHP 語言結構 靜宜大學資訊管理學系 蔡奇偉副教授 2003 2019/2/25 進階 WWW 程式設計 PHP 語言結構(一) 靜宜大學資訊管理學系 蔡奇偉副教授 2003 靜宜大學資管系 蔡奇偉編撰 版權所有 2003

內容大綱 註解(Comments) 文數字(Literals) 識別字(Identifiers) 關鍵字(Keywords) 變數(Variables) 常數(Constants) 資料型態(Data Types) 運算子與運算式(Operators & Expressions)

註解(Comments) 範例 註解只是程式中的說明文字,不算是程式執行流程中的一部分。PHP 允許你用以下三種方式加入程式的註解文字: Shell Style: 用字元 # 加入簡短的單行註解文字。 C++ Style: 用雙斜線 // 加入簡短的單行註解文字。 C Style: 用 /* 和 */ 包夾單行或多行的註解文字。 範例 $value = $p * exp($r * $t); # 計算複利 $value = $p * exp($r * $t); // 計算複利 /* 這是一段  多行的註解文字 */

範例 # (//) 的註解範圍起自註解字元 # (//) 終止於斷行字元或目前 PHP 程式段的結束標記 ?>(看先碰到那一個)。 <?php $d = 100; # d 設為 100 ?> 得到的值為:<?php echo $d ?> 註解範圍 上一行程式產生以下的輸出: 得到的值為:100 /* … */ 的註解範圍起自 /* 終止於第一個碰到的 */。因此以下多層次註解方式不被 PHP 所接受: /* $j = 1; $i = 100; /* 註解 */ */

/* … */ 除了用來加入多行的註解文字外,也常在程式的測試階段中用來讓一段程式碼變成註解文字而不發生效力(這個動作稱為「註解掉(comment out)」)。 $i = 100; /* $j = $i + 20; $k = $i * $j; */ $i ++; 範例 這兩行程式碼變成註解而不再被執行

文數字(Literals) 文數字是直接寫在程式之中的常數值,譬如以下是合法的文數字: 整數:2001, 0xFE 字串:’Hello’, “A String”, ‘你好嗎?’ 特殊值:true, false, null

識別字(Identifiers) 識別字簡單來說就是名稱(name)。它是用來對一些 PHP 的物件加以命名,如變數名稱、函式名稱、常數名稱、或類別名稱等等。 識別字必須符合下列的命名規則: 第一個字元必須是英文大小寫字母、底線字元(_)、或 ASCII 碼 0X7F 到 0XFF 之間的字元。 第一個以後的其他字元除了上述以外,還可以是 0 到 9 的阿拉伯數字。

關鍵字(Keywords) 關鍵字是 PHP 程式中具有特殊意義的字。你不能把自定的變數、函式、常數、類別命名成與這些關鍵字同名,否則會造成錯誤。 PHP 的關鍵字可區分為三大類: 語法上的關鍵字,如 if, else, do, true, …, 等等。 特殊變數和常數,如 $argc, $_POST, …, 等等。 內建的 PHP 函式,如 array, echo, …, 等等(非常多) 完整的關鍵字表列請自行參考 PHP 的說明手冊。

變數(Variables) PHP 規定變數的名稱必須以錢號字元($)開頭,使之與其他的名稱有所區分(為了提昇程式的編譯效率)。除了錢號字元開頭外,剩餘的字元則必須符合前述的識別字命名規則。此外,變數名稱的大小寫是有所區別的,也就是說,名稱由相同字母但大小寫不同所組成的兩個變數,會被視為不同的變數。 範例 合法的變數名稱 $amount $this_is_Friday $_here 不合法的變數名稱 $not valid $3Com $@someplace

和 C/C++ 不同,PHP 的變數不需要經過資料型態的宣告,而且可以在不同時間存放不同型態的資料。所以以下幾行的變數連續指定在 PHP 中是完全合法的: $var = 3; # 整數 $var = ‘Hello’; # 字串 $var = array(10, 20, 30); # 陣列 $var = 5; # 整數 當然,為了程式的可讀性,我們應該避免使用同一個變數來儲存多種型態的資料(比如一下拿來存整數,等等又拿來存陣列)。

常數(Constants) 範例 define(name, expression); PHP 程式中的常數是用 define() 函式來定義,其格式如下: define(name, expression); 第一個參數 name 是常數的名稱,命名規則如前述的識別字;第二個參數 expression 是一個常式算式。我們通常用全部大寫來命名常數。 範例 define(PI, 3.1415); echo PI; # 3.1415 define(MESSAGE, “How are you doing?”); echo MESSAGE; # How are you doing?

資料型態(Data Types) PHP 共有八種資料型態,分屬於以下的三大類: 單一值的型態 布林值(boolean) 整數(integer) 浮點數(floating number) 字串(string) 複合值的型態 陣列(array) 物件(object) 特殊的型態 空值:NULL 資源(resource)

布林值(boolean) 布林值代表邏輯上的真假值:true 與 false。在程式中,布林值主要用在條件判斷上。譬如: if ($isOK) { … } 在 PHP 中,只有底下的值被視為 false: 關鍵字 false 整數值 0 浮點數值 0.0 空字串(””)和字串 “0” 沒有任何元素的陣列 沒有任何資料值與函式的物件 空值 NULL 其餘的值則都被視為 true。

整數(integer) 整數的大小範圍 PHP 並沒有硬性規定,而是隨系統而定。不過對目前的三十二位元電腦而言,這個範圍通常是在 -2,147,483,648 和 2,147,483,648 之間。 在程式中,你可以用下面三種整數的表示法: 十進位格式: 2003, -123, +78 十六進位格式(開頭為 0x 或 0X): 0XFF, 0x16, 0xff, -0xABCD 八進位格式(開頭為 0) : 0755, -0123

浮點數(floating number) 浮點數的大小範圍 PHP 並沒有硬性規定,一般而言是和系統的 C 程式語言的 double 相同,約略有15 位有效數字並大小在 1.710-308 和 1.710308 之間(對正數而言)。 在程式中,你可以用下面二種浮點數的表示法: 小數表示法: 3.14, 0.0015, -7.8 科學記號表示法: 0.314E1, 0.314e1, 13.5E-4, -2.1e6

字串(string) 雙引號字串:用雙引號(”)括住的字串。如: 單引號字串:用單引號(’)括住的字串。如: PHP 有以下兩種字串的寫法: ”Thanks God, it’s Friday” 特性: 特殊的字元可以用下一頁的逸出碼(escape sequence)來表示。 可以使用變數名稱來插入其值。 單引號字串:用單引號(’)括住的字串。如: ’Hello, world!’ 只接受兩種逸出碼:\\ (得到 \)和 \’ (得到 ’) 其他字串中的字元全部視同普通字元,而不做任何特殊處理。

雙引號字串中的逸出碼: \n newline \r carriage return \t horizontal tab \\ backslash \$ dollar sign \{ right brace \} left brace \[ right bracket \] left bracket \” double quote \ooo ooo 是 1 至 3 位八進位數所代表的 ASCII 字碼 \xhh hh 是一或二位的十六進位數所代表的 ASCII 字碼

字串範例 指令 輸出 echo ”Don’t stop!”; Don’t stop 指令 輸出 echo ”Don’t stop!”; Don’t stop echo ”<h1 align=\”center\”>”; <h1 align=”center”> echo ”First line\nSecond line”; First line Second line echo ”Ho\x6De”; Home echo ”C:\\Windows”; C:\Windows $value = 100; echo ”The value is $value”; The value is 100 echo ’Don\’t stop!’; Don’t stop echo ’<h1 align=”center”>’; <h1 align=”center”> echo ’First line\nSecond line’; First line\nSecond line echo ’The value is $value’; The value is $value echo ’C:\\Windows’; C:\Windows

陣列(array) PHP 的陣列可用來儲存一組相同或不同型態的資料。PHP 提供下列兩種不同存取方式的陣列: 索引陣列(indexed array) 用一個整數索引來存取陣列中的值。 40 25 3.14 ‘Hello’ 1 2 99 indices 對照陣列(associative array) 用一個字串型態的鍵(key)來存取陣列中的對照值。 ‘lastname’ ‘陳’ ‘firstname’ ‘水扁’ ‘sex’ ‘male’ keys values

陣列的產生方式 一、使用指定敘述 40 50 ?? 20 10 1 2 3 4 $myArray NULL 1 2 3 4 $myArray NULL $myArray[0] = 40; $myArray[1] = 50; $myArray[3] = 20; $myArray[4] = 10; ‘lastname’ ‘陳’ ‘firstname’ ‘水扁’ ‘sex’ ‘male’ keys values $myForm $myForm[‘lastname’] = ‘陳’; $myForm [‘firstname’] = ‘水扁’; $myForm [‘sex’] = ‘male’;

二、使用 PHP 的陣列建構函式: array() $myArray = array(40, 50, NULL, 20, 10); # 建立索引陣列 40 50 NULL 20 10 1 2 3 4 $myArray ‘lastname’ ‘陳’ ‘firstname’ ‘水扁’ ‘sex’ ‘male’ keys values $myForm # 建立對照陣列 $myForm = array(‘lastname’ => ‘陳’, ‘firstname’ => ‘水扁’, ‘sex’ => ‘male’);

空值(NULL) 空值在 PHP 程式中代表什麼值都沒有的一種特殊資料值。在下面三種狀況下,一個變數的值會被視為空值: $var = NULL; # 變數 $var 的值是空值 此變數從未被設定成任何值。 此變數被函式 unset() 給設定成空值,如: unset($var); # 變數 $var 的值變成空值

資源(resource) 資源是用來代表程式外部資源的一種資料型態。我們通常得呼叫特殊的函式來建立與處理資源。比方說,連結某個資料庫系統時,我們可以用下列方式來建立一個資源 $resourse: $resourse = db_connection(); # 註:db_connection() 是虛擬的函式 此後,變數 $resourse 在程式中就代表所連結的資料庫。透過變數 $resourse 我們可以做一些資料庫的操作,如: db_query($resource, $query); # 註: qb_query() 是虛擬的函式 這函式用查詢字串 $query 來存取資料庫。

用來判別資料型態的函式 若你想知道變數 $var 值的型態,可以使用以下的函式來判別: is_bool($var); is_int($var); is_float($var); is_string($var); is_array($var); is_object($var); is_null($var); is_resource($var); 此外,你可以用 var_dump($var) 函式來輸出變數 $var 的值與型態資訊。

運算子與運算式 算術運算子 位元運算子 指定運算子 遞增/遞減運算子 比較運算子 邏輯運算子 字串運算子 型態轉換 其他運算子 運算的結合性與優先序

算術運算子 Example Name Result $a + $b Addition Sum of $a and $b. $a - $b Subtraction Difference of $a and $b. $a * $b Multiplication Product of $a and $b. $a / $b Division Quotient of $a and $b. $a % $b Modulus Remainder of $a divided by $b. -$a negation Multiply $a by -1 +$a assertion The as $a

範例 若二元算術運算子的兩個運算元不同型態的話,PHP 會按照下面的規則自動地轉換型態: 整數 浮點數 整數運算元先轉換成浮點數,然後 再與浮點數運算元做運算 整數 字串 字串運算元先轉換成數值,然後 再與整數運算元做運算 浮點數 字串 字串運算元先轉換成數值,然後 再與浮點數運算元做運算 範例 5 + 4 # 9 (int) 17 + 3.14 # 20.14 (float)

PHP 從字串最左邊開始一個一個字元地轉換成數值,直到碰到無法轉換為止,譬如: 5 + ”3.14” # 8.14 (float) ”9 Lives” – 1 # 8 (int) ”3.14 Pies” * 2 # 6.28 (float) ”1.0E3 Points of Light” + 1 # 1001 (float)

位元運算子 Example Name Result $a & $b And Bits that are set in both $a and $b are set. $a | $b Or Bits that are set in either $a or $b are set. $a ^ $b Xor Bits that are set in $a or $b but not both are set. ~ $a Not Bits that are set in $a are not set, and vice versa. $a << $b Shift left Shift the bits of $a $b steps to the left (each step means "multiply by two") $a >> $b Shift right Shift the bits of $a $b steps to the right (each step means "divide by two")

位元運算絕大部是用在整數運算元上。不過,PHP 也允許你使用字串運算元。 ~$a 若 $a 是字串,則逐個字元運算。 若 $a 和 $b 都是字串,則逐個字元地做運算,而且運算所得的字串,其長度等於 $a 和 $b 中較短者。 $a & $b $a | $b $a ^ $b $a 和 $b 必須都是整數。不是整數的運算元都會先被轉成整數,然後再開始運算。 $a << $b $a >> $b

指定運算子(Assignment Operator) Example Result $a = $b $a is set to be the value of $b $a &= $b $a = ($a & $b) $a += $b $a = ($a + $b) $a |= $b $a = ($a | $b) $a -= $b $a = ($a - $b) $a ^= $b $a = ($a ^ $b) $a *= $b $a = ($a * $b) $a <<= $b $a = ($a << $b) $a /= $b $a = ($a / $b) $a >>= $b $a = ($a >> $b) $a %= $b $a = ($a % $b) $a .= $str $a = ($a . $str)

遞增/遞減運算子 Example Name Effect ++$a Pre-increment Increments $a by one, then returns $a. $a++ Post-increment Returns $a, then increments $a by one. --$a Pre-decrement Decrements $a by one, then returns $a. $a-- Post-decrement Returns $a, then decrements $a by one.

比較運算子 Example Name Result $a == $b Equal TRUE if $a is equal to $b. Identical TRUE if $a is equal to $b, and they are of the same type. (PHP 4 only) $a != $b Not equal TRUE if $a is not equal to $b. $a <> $b $a !== $b Not identical TRUE if $a is not equal to $b, or they are not of the same type. (PHP 4 only) $a < $b Less than TRUE if $a is strictly less than $b. $a > $b Greater than TRUE if $a is strictly greater than $b. $a <= $b Less than or equal to TRUE if $a is less than or equal to $b. $a >= $b Greater than or equal to TRUE if $a is greater than or equal to $b.

我們用以下的例子來說明 == 和 === 以及 != 和 !== 之間的區別: 3.14 == ”3.14” # true 3.14 === ”3.14” # false 3.14 === 3.14 # true 3.14 == ”3.14 Pies” # true 3.14 === ”3.14 Pies” # false 3.14 != ”3.14” # false 3.14 !== ”3.14” # true 3.14 !== 3.14 # false 3.14 != ”3.14 Pies” # false 3.14 !== ”3.14 Pies” # true 3.14 <> ”3.14” # false

比較大小時,運算元可能是:兩者皆為數值、兩者皆為字串、或一為數值另一為字串。下表列出這些組合的比較方法: 第一運算元 第二運算元 比較方法 數值 數值大小 數字串 非數字串 字典序 數字串:數字格式的字串,如:”3.14”, “20”, “1.0e-6”, …, 等等。 非數字串:數字串以外的字串,如:”Hello”, “3 books”, …, 等等。

邏輯運算子 Example Name Result $a and $b $a && $b And TRUE if both $a and $b are TRUE. $a or $b $a || $b Or TRUE if either $a or $b is TRUE. $a xor $b Xor TRUE if either $a or $b is TRUE, but not both. ! $a Not TRUE if $a is not TRUE.

懶惰性的計算(Lazy Evaluation) 在 PHP 驗算邏輯式的過程中,若已經可以確定整個式子的真假值,就不會再計算剩下的部分,這稱之為懶惰性的計算(Lazy Evaluation)。譬如: 1 == 1 or echo ’This is skipped’ true 不會被執行 $result = fopen($filename) or exit(); 若開檔成功,則不會執行 exit();否則就會執行 exit()。 $result = $flag and mysql_connect(); 只有當 $flag 為真時,才會執行 mysql_connect()。

字串運算子 範例 $string1 . $string2 把字串 $string1 和字串 $string2 結合成一個字串 “Hello, “ . “world!” # “Hello, world!” “The value is “ . ‘3’ # “The value is 3” “The value is “ . 3 # “The value is 3” $a = 3.14; “The value is “ . $a # “The value is 3.14” $a = “It’s”; $a .= “ ok.”; # $a 為 “It’s ok.”

型態轉換(Type Casting) 你可以用以下類似 C/C++ 的型態轉換運算子來轉換資料的型態: 運算子 轉換成的型態 (int) 或 (integer) Integer (float) 或 (real) Floating point (bool) 或 (boolean) Boolean (string) String (array) Array (object) Object

其他運算子 範例 條件運算子(? :) (conditional_expr)? true_expr : false_expr 若 conditional_expr 的值為 true,則以 true_expr 為式子的值,否則以 false_expr 為式子的值。 範例 $a = (3 == ‘3’)? ‘equal’ : ‘not equal’; # $a = ‘equal’ $a = (3 === ‘3’)? ‘equal’ : ‘not equal’; # $a = ‘not equal’

範例 錯誤訊息控制運算子(Error Control Operator) 某些 PHP 函式或運算子發現錯誤時會輸出錯誤訊息。你可以在函式或運算子之前加上字元 @ 來取消這些錯誤訊息的輸出。 範例 /* Intentional file error */ $my_file = @file ('non_existent_file') or     die ("Failed opening file: error was '$php_errormsg'"); // this works for any expression, not just functions: $value = @$cache[$key]; // will not issue a notice if the index $key doesn't exist.

範例 執行運算子(Execution Operator) `external_command` PHP 會執行反引號(`)所夾住的外部系統指令 external_command,然後傳回執行的結果。 範例 假定 WWW 伺服器使用 Unix 作業系統。底下兩行指令執行後將輸出目前目錄下的檔案表列。 $output = `ls -al`; echo "<pre>$output</pre>";

運算的結合性與優先序 低 高 Associativity Operators left , or xor and right print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ? : || && | ^ & non-associative == != === !== < <= > >= << >> + - . * / % ! ~ ++ -- (int) (float) (string) (array) (object) @ [ new 低 高

PHP 的運算規則是優先序高的運算先計算。當然,你可以用括號 (…) 來改變運算的優先序或結性,如: echo 1 + 2 * 3; # 7 echo (1 + 2) * 3; # 9 echo 1 + (2 + 3) * 4; # 21 優先序相同的運算子並列時,由結合性(associativity)來決定是由左至右(left)或由右至左(right)地運算。如: echo 4 – 2 - 1; # 1 (not 3) echo (int)(float) 3.14; # 3 echo (float)(int) 3.14; # 3.0