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

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

白玉苦瓜 余光中.
程式語言(I)- Visual Basic 6.0 第 9 章 結構化程式設計
Memory Pool ACM Yanqing Peng.
输出数组 Result: Array (     [0] => zzu     [1] => php     [2] => MySQL     [3] => javascript     [4] => html     [5] => css )
System Administration Practice Homework 2: Shell Programming
C語言中可變参數的用法——va_list、va_start、va_arg、va_end参數定義
Chapter 5 遞迴 資料結構導論 - C語言實作.
Ch07 PHP程式基礎 網頁程式設計.
Chapter 7 Subroutine and Function
第四章 網頁表單與資料傳遞.
簡易C++除錯技巧 長庚大學機械系
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
PHP 5 入門基礎 第一個PHP 程式 PHP 資料型態.
Ch10 函式 網頁程式設計.
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
第五章 shell 编程 shell 编程的基本过程分为三步: 1. 建立 shell 文件 包含任意多行操作系统命令或shell命令的文本
PHP 5 陣列與自定函數 陣列應用 自定函數.
C 程式設計— 指標.
Matlab M檔案 方煒 台大生機系.
C 程式設計— 指標 台大資訊工程學系 資訊系統訓練班.
Function.
類別(class) 類別class與物件object.
SQL Stored Procedure SQL 預存程序.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
張智星 台大資工系 多媒體檢索實驗室 第九章 小餅乾(Cookies) 張智星 台大資工系 多媒體檢索實驗室.
SpringerLink 新平台介绍.
Java 程式設計 講師:FrankLin.
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
PHP 變數、常數與運算子 變數 常數 運算子
表單(Form).
第一單元 建立java 程式.
進階 WWW 程式設計 -- PHP 語言結構 靜宜大學資訊管理學系 蔡奇偉副教授 2003
Microsoft SQL Server 2008 報表服務_設計
架站實做—AppServ
|07 函數.
進階 WWW 程式設計 -- PHP 語言結構 靜宜大學資訊管理學系 蔡奇偉副教授 2003
表單(Form).
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
Speaker: Liu Yu-Jiun Date: 2009/4/29
CH1 我的第一個App與變數宣告.
GUI Title and GUI Status
微積分網路教學課程 應用統計學系 周 章.
SpringerLink 新平台介绍.
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
函數 博碩文化出版發行.
HelloPurr_Extend 靜宜大學資管系 楊子青
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 14 章 自定函數.
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
Introduction to the C Programming Language
函數應用(二)與自定函數.
陣列與結構.
Ch07. 函式.
Web安全基础教程
反覆迴圈、陣列、副程式 靜宜大學資管系 楊子青
反覆迴圈、陣列、副程式 靜宜大學資管系 楊子青
網頁設計實務- PHP 與資料庫整合.
打Mole不打Ladybug (IV): 讓使用者控制Ladybug移動 靜宜大學資管系 楊子青
2012 程式設計比賽 Openfind 天使帝國 v2.0 (蓋亞的紋章).
Chap 6 函數 故用兵之法,十則圍之,五則攻之,倍則分之, 敵則能戰之,少則能逃之,不若則能避之。 故小敵之堅,大敵之擒也。
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
What is “this”? 在物件導向程式設計中,類別的定義就是在說明如果創建了“這個物件”的話,它會具有那些屬性與功能,以及這些功能是如何實現的。 而所謂的“這個物件”就以 this 來表示。 當我們在JavaScript與jQuery中寫 script 程式(函式)時,“誰”呼叫這個函式,這個“誰”就是該函式中所謂的.
作業系統實習課(二) -Scheduler-Related System Calls-
Introduction to the C Programming Language
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Unix指令4-文字編輯與程式撰寫.
Develop and Build Drives by Visual C++ IDE
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

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

內容大綱 函式的定義 函式的呼叫 函式的參數 變數的有效範圍 傳回函式值 變函式 無名函式

函式的定義 function function_name (parameter1, parameter2, … parametern) { statement list } 函式名稱的命名 function_name 必須符合識別字的規則。 函式名稱的大小寫無區別,如 sin, Sin, 和 SIN 都代表同一個函式。 參數列 parameter1, parameter2, … parametern 可以是 0 個、1 個、或 1 個以上的參數。 敘述列可以是 PHP 的敘述或 HTML 的敘述。

每呼叫 col() 一次就會在網頁中加入 </td><td> 這兩個 HTML 標籤 範例 function strcat ($left, $right) {    $combined_string = $left . $right;    return $combined_string; } function strcat ($left, $right) {    return $left . $right; } 每呼叫 col() 一次就會在網頁中加入 </td><td> 這兩個 HTML 標籤 <?php function col () { ?> </td><td> <?php } ?>

在 PHP4 中,函式不需要在呼叫之前定義,除非函式的定義出現在條件敘述中,譬如: <?php $makefoo = true; /* We can't call foo() from here since it doesn't exist yet, but we can call bar() */ bar(); if ($makefoo) {   function foo ()   {     echo "I don't exist until program execution reaches me.\n";   } }

/. Now we can safely call foo() since $makefoo evaluated to true /* Now we can safely call foo() since $makefoo evaluated to true */ if ($makefoo) foo(); function bar() { {   echo "I exist immediately upon program start.\n"; } ?>

在 PHP4 中,函式 A 可以寫在函式 B 中,但只有在函式 B 被呼叫後,函式 A 才真正被定義而能被呼叫。 function foo() {   function bar()   {    echo "I don't exist until foo() is called.\n";   } } /* We can't call bar() yet since it doesn't exist. */ foo(); /* Now we can call bar(), foo()'s processing has  made it accessible. */ bar();

函式的呼叫 function_name (argument_list); $result = function_name (argument_list); 第一式用在呼叫無傳回值的函式,或不需處理函式的傳回值時。 第二式用來呼叫有傳回值的函式,並把傳回值儲存在變數 $result 中。 函式名稱 function_name 可以是內建函式或使用者自定的函式。 引數列 argument_list 包含欲傳入的引數。你得先閱讀函式的說明 文件,了解其各個參數的目的與接受的參數個數,才能正確地使 用該函式。

範例 function strcat ($left, $right) { return $left . $right; } // 呼叫 strcat 函式並依序代入 ’Hello, ’ 和 ’woild!’ 兩個引數。 $msg = strcat (’Hello, ’, ’woild!’); // $msg 得值 ’Hello, world!’

函式的參數 Pass-by-value References Pass-by-reference 預設的參數值 處理數目不定的參數

Pass-by-value(數值傳遞) 範例 把引數的值傳遞給函式的參數。 function max ($x, $y) $a = 3; { return ($x >= $y) ? $x : $y; } $a = 3; $b = 4; $m = max($a, $b); $a $b $x $y max 傳遞 3 4

範例 function swap ($x, $y) { $temp = $x; $x = $y; $y = $temp; } $a = 3; $b = 4; swap($a, $b); $a $b $x $y swap 傳遞 3 4 使用數值傳遞的方式時,引數與參數是不同的變數。所以 swap 只交換了參數 $x 和 $y 的值,並沒有交換引數 a 和 b 的值。

References(參照) 在 PHP 中,變數的名稱和它的內容是分開的兩件事。舉例來說,指定 3 給變數 $foo 後,它的名稱和內容如下圖所示: name content $foo 3 對同一個內容,我們可以用參照來建立不同的名稱來存取它,譬如: $bar = & $foo; $foo 3 $bar 這一行敘述使得變數 $bar 是變數 $foo 的一個參照,亦即使得兩個變數指涉相同的內容,如右圖所示。

Pass-by-reference(參照傳遞) 只要在函式定義中的參數前加上 & 就會使得該參數是引數的一個參照。存取參照型態的參數時,等同於直接存取其對應的引數。因此參照傳遞的方式可以讓我們在函式中修改引數的值。 範例 function inc (& $x) { { $x++; } $a = 10; inc($a); echo $a; // 11 function inc ($x) { { $x++; } $a = 10; inc($a); echo $a; // 10

範例 function swap (&$x, &$y) { $temp = $x; $x = $y; $y = $temp; } $b = 4; swap($a, $b); swap $a $x $b $y 在 swap 中交換 x 和 y 的值,等同於交換引數 a 和 b 的值。

預設的參數值 你可以在函式定義中指定參數的預設值,譬如: function makecoffee ($type = "cappuccino“) {     return "Making a cup of $type.\n"; } echo makecoffee (); // Making a cup of cappuccino echo makecoffee ("espresso"); // Making a cup of espresso 預設值必須是常數算式,不能是變數或函式呼叫。 指定預設值的參數必須擺在未指定者之後。

處理數目不定的參數 範例 若參數數目不固定,你可以在函式中呼叫底下的三個函式來處理: func_num_args ( ) : 傳回函式所接收到的引數個數。 func_get_arg ( $n ) : 傳回第 $n 個引數。 func_get_args ( ) :傳回一陣列,其中包含所有的引數。 範例 function foo() {    $numargs = func_num_args();    echo "Number of arguments: $numargs<br>\n";    if ($numargs >= 2) {     echo "Second argument is: " . func_get_arg (1) . "<br>\n";    }    $arg_list = func_get_args();    for ($i = 0; $i < $numargs; $i++) {     echo "Argument $i is: " . $arg_list[$i] . "<br>\n";    } } foo (1, 2, 3);

變數的有效範圍 範例 PHP 的變數根據它們第一次出現的所在可以區分為以下兩種: 全域變數:出現在函式定義以外的變數。 局部變數:出現在函式定義中的參數與變數。 基本上,全域變數若未經過宣告,不能在函式中直接存取;局部變數則完全不能在函式以外的地方存取。 範例 $a = 3; // $a is a global variable. function foo () { $a += 100; // $a is a local variable. } foo(); echo $a; // print global $a, i.e., 3.

範例 如果要在函式存取全域變數,你必須在函式中將其宣告成 global,如下例所示: $a = 1; $b = 2; function Sum() {    global $a, $b;    $b = $a + $b; } Sum(); echo $b; // 3 $a = 1; $b = 2; function Sum() {    // global $a, $b;    $b = $a + $b; } Sum(); echo $b; // 2

超級全域變數(superglobal) 為了程式撰寫方便,你可以在函式中不經 global 宣告而直接存取 PHP 內建的某一些全域變數。這些變數稱之為超級全域變數。以下是這些變數的表列,我們以後會介紹它們的用途。 $GLOBALS Contains a reference to every variable which is currently available within the global scope of the script. The keys of this array are the names of the global variables. $_SERVER Variables set by the web server or otherwise directly related to the execution environment of the current script. $_GET Variables provided to the script via HTTP GET.

$_POST Variables provided to the script via HTTP POST. $_COOKIE Variables provided to the script via HTTP cookies. $_FILES Variables provided to the script via HTTP post file uploads. $_ENV Variables provided to the script via the environment. $_REQUEST Variables provided to the script via any user input mechanism, and which therefore cannot be trusted.. $_SESSION Variables which are currently registered to a script's session.

範例 function test_global() {    // Most predefined variables aren't "super" and require    // 'global' to be available to the functions local scope.    global $HTTP_POST_VARS;        echo $HTTP_POST_VARS['name'];        // Superglobals are available in any scope and do    // not require 'global'.  Superglobals are available    // as of PHP 4.1.0    echo $_POST['name']; }

靜態變數(static variable) 你可以把一個局部變數宣告成靜態變數,使得函式執行完成後仍能保持其值而不被消除。 範例 function counter () {    static $count = 0;    return $count++; } for ($i = 1; $i <= 5; $i++) { echo counter(); } function counter () {    $count = 0;    return $count++; } for ($i = 1; $i <= 5; $i++) { echo counter(); } 輸出:0 1 2 3 4 輸出:0 0 0 0 0

傳回函式值 在函式中,return 敘述可以用來傳回函式值;不過你只能傳回一個值,譬如: function return_one () { } 如果想傳回多個值,你可以把它們包裝在一個陣列中,然後再傳回該陣列,譬如: function return_two () { return array(“Fred”, 35); }

變函式(Variable Functions) 如果一個變數後面直接跟著括號 (),則 PHP 會把變數的值視為某個函式的名稱,然後嘗試去呼叫它。這個變數稱式為變函式。 範例 變函式不能用來存 PHP 的基本函式:echo(), print(), unset(), isset(), empty(), include(), require() 等等。 function foo() {    echo "In foo()<br>\n"; } function bar($arg = ' ') {    echo "In bar(); argument was '$arg'.<br>\n"; } $func = 'foo'; $func();        // This calls foo() $func = 'bar'; $func('test');  // This calls bar()

無名函式(Anonymous Functions) 你可以用底下的 PHP 內建函式來產生一個無名函式: create_function ($args, $code ) 範例 $newfunc = create_function ( '$a, $b', 'return "ln($a) + ln($b) = ".log($a * $b);‘ ); echo "New anonymous function: $newfunc\n"; echo $newfunc(2,M_E)."\n"; // outputs // New anonymous function: lambda_1 // ln(2) + ln(2.718281828459) = 1.6931471805599