一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP和Mysqlweb應用開發核心技術 第1部分 Php基礎-3 代碼組織和重用2

PHP和Mysqlweb應用開發核心技術 第1部分 Php基礎-3 代碼組織和重用2

2019-12-04 11:04PHP教程網 PHP教程

創建可以調用的函數以便重用代碼把參數傳遞給函數并且從函數返回值和腳本的不同部分中的變量和數據進行交互

從本章中,我們了解 

.創建可以調用的函數以便重用代碼 

.把參數傳遞給函數并且從函數返回值和腳本的不同部分中的變量和數據進行交互 

.把代碼和函數組存入到其他文件中,并且我們的腳本內包含這些文件. 

3.1基本代碼重用:函數 

3.1.1 定義和調用函數 

關鍵字function通知php這是一個函數,后面跟著的是函數的名稱,它可以是字母、數字、字符或下劃線 

函數名稱之后是參數列表,然后是函數體。在其它語言中名稱相同、但是參數列表不同的函數,php不支持這一特性。 

復制代碼代碼如下:


<?php 
function booo_spooky() 

echo "I am booo_spooky. This name is okay!<br/>\n"; 

function ____333434343434334343() 

echo <<<DONE 
I am ____333434343434334343. This is an awfully 
unreadable function name. But it is valid. 
DONE; 

// 
// This next function name generates: 
// 
// Parse error: syntax error, unexpected T_LNUMBER, 
// expecting T_STRING in 
// /home/httpd/www/phpwebapps/src/chapter03/playing.php 
// on line 55 
// 
// Function names cannot start with numbers 
// 
function 234letters() 

echo "I am not valid<br/>\n"; 

// 
// Extended characters are ok. 
// 
function grüß_dich() 

echo "Extended Characters are ok, but be careful!<br/>\n"; 

// 
// REALLY extended characters are ok too!! Your file will 
// probably have to be saved in a Unicode format though, 
// such as UTF-8 (See Chapter 5). 
// 
function 日本語のファンクション() 

echo <<<EOT 
Even Japanese characters are ok in function names, but be 
extra careful with these (see Chapter 5). 
EOT; 

?> 


3.1.2 把參數傳遞給函數 
基本語法:為了把參數傳遞給函數,在調用函數時需要把參數值 括在括號中,以逗號分隔。每個被傳遞的參數可 
以是任何合法表達式,可以是變量、常量值、運算符的結果,甚至可以是函數調用。 

復制代碼代碼如下:


<?php 
function my_new_function($param1, $param2, $param3, $param4) 

echo <<<DONE 
You passed in: <br/> 
\$param1: $param1 <br/> 
\$param2: $param2 <br/> 
\$param3: $param3 <br/> 
\$param4: $param4 <br/> 
DONE; 

// 
// call my new function with some values. 
// 
$userName = "bobo"; 
$a = 54; 
$b = TRUE; 
my_new_function($userName, 6.22e23, pi(), $a or $b); 
?> 


按引用傳遞:默認情況下,只有變量的值被傳遞給函數。因此,對這個參數或者變量的任何改動都只是在函數局部有效的 

復制代碼代碼如下:


$x = 10; 
echo "\$x is: $x<br/>\n"; 
function change_parameter_value($param1) 

$param1 = 20; 

echo "\$x is: $x<br/>\n"; 
?> 


輸出: $x is :10 
$x is :10 
如果你的目的是函數實際地修改傳遞給它的變量,而不僅僅處理其值的拷貝,那么可以用引用(reference)傳遞的功能。這是通過使用&字符完成的 

復制代碼代碼如下:


<?php 
function increment_variable(&$increment_me) 

if (is_int($increment_me) || is_float($increment_me)) 

$increment_me += 1; 


$x = 20.5; 
echo "\$x is: $x <br/>\n"; // prints 20.5 
increment_variable(&$x); 
echo "\$x is now: $x <br/>\n"; // prints 21.5 
?> 


參數的默認值 
在你期望參數具有支配地位的特定值的情況下,稱為默認參數值(default argumentvalue) 

復制代碼代碼如下:


<?php 
function perform_sort($arrayData, $param2 = "qsort") 

switch ($param) 

case "qsort": 
qsort($arrayData); 
break; 
case "insertion": 
insertion_sort($arrayData); 
break; 
default: 
bubble_sort($arrayData); 
break; 


?> 


可變數量的參數: 
php能夠把任意數量的參數傳遞給函數,然后使用func_num_args、func_get_arg和func_get_args取得參數值 

復制代碼代碼如下:


<?php 
function print_parameter_values() 

$all_parameters = func_get_args(); 
foreach ($all_parameters as $index => $value) 

echo "Parameter $index has the value: $value<br/>\n"; 

echo "-----<br/>\n"; 

print_parameter_values(1, 2, 3, "fish"); 
print_parameter_values(); 
?> 


3.1.3 從函數返回值 
一些其他語言把在退出之前只執行一些代碼的子例程和執行一引起代碼并且把值返回調用者的函數區分開來,php和它們不同,所有php函數在返回調用者時 
都有一個值和它相關聯。對于沒有明確的返回值的函數,返回值為null 

復制代碼代碼如下:


<?php 
function does_nothing() 


$ret = does_nothing(); 
echo '$ret: ' . (is_null($ret) ? '(null)' : $ret) . "<br/>"; 
?> 


如果希望返回非null時,利用return把它和一個表達式關聯 

復制代碼代碼如下:


<?php 
function is_even_number($number) 

if (($number % 2) == 0) 
return TRUE; 
else 
return FALSE; 

?> 


當你希望從函數返回多個值 時,把結果作為數組傳遞回來是方便的方式 

復制代碼代碼如下:


<?php 
function get_user_name($userid) 

// 
// $all_user_data is a local variable (array) that temporarily 
// holds all the information about a user. 
// 
$all_user_data = get_user_data_from_db($userid); 
// 
// after this function returns, $all_user_data no 
// longer exists and has no value. 
// 
return $all_user_data["UserName"]; 

?> 


3.1.4 函數內的變量范圍 
函數級別變量: 
聲明它們的函數內是合法,并且在函數的調用之間不記憶它們的值 

復制代碼代碼如下:


<?php 
$name = "Fatima"; 
echo "\$name: $name<br/>\n"; 
function set_name($new_name) 

echo "\$name: $name<br/>\n"; 
$name = $new_name; 

set_name("Giorgio"); 
echo "\$name: $name<br/>\n"; 
?> 


靜態變量: 
static作為前綴的變量在函數調用之間保持它們的值不變,如果聲明變量時為其賦值了,在運行當前腳本時,php只在第一次遇到這個變量時執行賦值 

復制代碼代碼如下:


<?php 
function increment_me() 

// the value is set to 10 only once. 
static $incr=10; 
$incr++; 
echo"$incr<br/>\n"; 

increment_me(); 
increment_me(); 
increment_me(); 
?> 


腳本內聲明的變量("全局變量") 

復制代碼代碼如下:


<?php 
$name = "Fatima"; 
echo "\$name: $name<br/>\n"; 
function set_name($new_name) 

echo "\$name: $name<br/>\n"; 
$name = $new_name; 

set_name("Giorgio"); 
echo "\$name: $name<br/>\n"; 
?> 


l輸出結果: 
$name: Fatima 
$name: 
$name: Fatima 
如果在 內部組函數加一個globa ,那么輸出結果 
$name: Fatima 
$name: Fatima 
$name: Giorgio 
3.1.5 函數范圍和可用性 
3.1.6 把函數作為變量使用 

復制代碼代碼如下:


<?php 
function Log_to_File($message) 

// open file and write message 

function Log_to_Browser($message) 

// output using echo or print functions 

function Log_to_Network($message) 

// connect to server and print message 

// 
// we're debugging now, so we'll just write to the screen 
// 
$log_type = "Log_to_Browser"; 
// 
// now, throughout the rest of our code, we can just call 
// $log_type(message) and change where it goes by simply 
// changing the above variable assignment! 
// 
$log_type("beginning debug output"); 
?> 


但是php包含很多不能用作變量函數的語言結構,這種結構的明顯例子是echo、print、var_dump、print_r、isset、unset、is_null is_type 
3.2 中級代碼重用:使用和包含文件 
3.2.1 把代碼組織到文件中 
對通用功能進行分組: 如果希望把很多函數保存到單一位置上,典型情況是一個文件,即代碼庫(code library) 
生成一致的接口 

復制代碼代碼如下:


<?php 
// circle is (x, y) + radius 
function compute_circle_area($x, $y, $radius) 

return ($radius * pi() * pi()); 

function circle_move_location(&$y, &$x, $deltax, $deltay) 

$x += $deltax; 
$y += $deltay; 

function compute_circumference_of_circle($radius) 

return array("Circumference" => 2 * $radius * pi()); 

?> 


通過使用這此函數具有一致的名稱、參數順序以及返回值 ,可以顯著地減少失敗的可能性和代碼中的缺陷。 

復制代碼代碼如下:


<?php 
// 
// all routines in this file assume a circle is passed in as 
// an array with: 
// "X" => x coord "Y" => y coord "Radius" => circle radius 
// 
function circles_compute_area($circle) 

return $circle["Radius"] * $circle["Radius"] * pi(); 

function circles_compute_circumference($circle) 

return 2 * $circle["Radius"] * pi(); 

// $circle is passed in BY REFERENCE and modified!!! 
function circles_move_circle(&$circle, $deltax, $deltay) 

$circle["X"] += $deltax; 
$circle["Y"] += $deltay; 

?> 


3.2.2 選擇文件名和位置 
為了防止web用戶打開.inc文件,我們使用兩種機制防止這種情況發生,首先,在構成文檔目錄樹中,我們確保web服務器不允許用戶瀏覽或者加載 
不希望他們進行這些操作,在16章保護web應用程序中介紹,然后,然后將配置瀏覽器允許用戶瀏覽.php和.html文件,但是不能瀏覽.inc文件 
防止這種問題的第二個途徑不把代碼入在文檔樹中,或存入其它目錄,并且要么明確地在我們的代碼中引用這個目錄,通知php總是查看這個目錄 
3.2.3 在腳本中包含庫文件 
include 和require,這兩個區別在于,當找不到文件時,require輸出錯誤,而include輸出警告。 

復制代碼代碼如下:


<?php 
include('i_dont_exit.inc'); 
require('i_dont_exit.inc');\ 
?> 


include和require在哪里查找文件 
你可以指定明確的路經: 
require("/home/httpd/lib/frontend/table_gen.inc'); 
require('http://www.cnblogs.com/lib/datafuncs.inc'); 
require(d:\webapps\libs\data\connetions.inc'); 
如果沒有指定明確路徑,php就在當前目錄中查找要包含的文件,然后查找php.ini文件中的include_path設置中列出的目錄. 
在windows是include_path=".;c:\php\include;d:\webapps\libs“設置完成后,不要忘記重新啟動web服務器。 
include和require做了什么 
包含在腳本標記中的任何內容都作為一般 php腳本處理。 
清單3-1和清單3-2顯示php腳本和用于包含的簡單文件 
清單3-1 
3.2.4 把包含用于頁面模板化 
<p align='center'> 
<b> 
<?php echo $message; ?> 
</b> 
</p> 
清單3-2 

復制代碼代碼如下:


<html> 
<head> 
<title>Sample</title> 
</head> 
<body> 
<?php 
$message = "Well, Howdy Pardner!"; 
include('printmessage.inc'); 
?> 
</body> 
</html> 


文件包含和函數范圍 
當把函數從腳本移動到包含文件時,會如何影響函數作用范圍及調用它們的能力。 
如果一個函數在另一個文件中,并且這個文件沒有通過include和require包含在當前腳本中,那么調用是非法的 
為了避免這個問題,在腳本開頭包含其他文件是個好主意。 
當共享變成問題時 
為了避免重復加載共享文件,可以用require_once()和include_once()語言結構防止函數或者結構重復定義的問題.

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青青手机在线观看 | 男人女人日皮视频 | 天天色资料 | 免费看欧美一级特黄a大片一 | 手机看片国产免费现在观看 | 日韩无砖专区2020在线 | 97porm自拍视频区原创 | 大桥未久aⅴ一区二区 | 日韩欧美精品一区二区 | 啊好痛嗯轻一点免费 | 99精品视频免费在线观看 | 拔插拔插成人 | 9966国产精品视频 | 亚洲免费小视频 | 成人久久久 | 日本免费精品 | 国产一区二区播放 | 国产成人小视频 | 色五夜婷婷 | 艹b小说 | 天美传媒影视在线免费观看 | 韩国女主播在线大尺无遮挡 | 30分钟的高清视频在线观看 | 苍井空色欲迷墙 | 问一问免费咨询 | 91制片厂制作传媒网站破解 | 三级aaa黄特色 | 亚飞与亚基高清国语在线观看 | 日日爽日日操 | 大学生特黄特色大片免费播放 | a级在线看 | 40岁女人三级全黄 | 国产香蕉国产精品偷在线观看 | 国产绳艺在线播放 | 日韩精品特黄毛片免费看 | 国产-第1页-草草影院 | 日韩欧美国产免费看清风阁 | 国色天香社区视频免费观看3 | 亚洲香蕉伊在人在线观看9 亚洲系列国产系列 | 免费aⅴ在线 | 1986葫芦兄弟全集免费观看第十集 |