国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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()語言結構防止函數或者結構重復定義的問題.

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美日韩美女 | 偷拍做爰吃奶视频免费看 | 一级毛片免费高清 | 久久久毛片 | 国产一区在线不卡 | 一区二区国产视频 | 成人在线小视频 | 超黄网站在线观看 | 成人片免费视频 | 亚洲视频精品 | 亚洲激情精品 | 91精品免费在线观看 | 老司机av导航| 日韩一区二区在线观看 | 国产成人精品午夜视频' | 一区二区三区亚洲 | 99精品视频在线观看 | 午夜av影院 | 精品一区二区在线观看 | 欧美一区二区三区在线看 | 中文字幕国产一区 | 91精品国产91久久综合桃花 | 一级毛片免费看 | 男人天堂社区 | 四虎视频| 99re在线观看视频 | 日韩中文字幕在线视频 | 在线观看一区二区三区四区 | 亚洲国产精品一二三区 | 久久中文字幕一区 | 91久久国产精品 | 国产欧美日韩综合精品一区二区 | 91精品国产综合久久婷婷香蕉 | 天堂成人av| 一本一本久久a久久精品综合妖精 | 91亚洲国产成人久久精品网站 | 亚洲国产免费 | 国内精品久久久久久久影视简单 | 综合色网站 | 欧美福利| 免费大片黄在线观看 |