PHP-Cookbook-chapte8

程式碼

//'8.5'在函式呼叫間維持變數值
$session_name = $session_txt['8.5'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

function sequence_get_next_value()
{
		static $x =0;
		return $x++;
}

print sequence_get_next_value ()."=1st value <br>"; 
print sequence_get_next_value ()."=2nd value <br>";
print sequence_get_next_value ()."=3rd value <br>";


$message="
<fieldset><legend><font color=red>TIPS</font></legend>
     staric 變數 = 值,設定變數的維持值<br>
	 staic敘述是避免在函式中使用全域變數的良好方法。在PHP程式<br>
	 執行中,它會在函式間記得\$x的值,這表示程式執行完之後,PHP<br>
	 會忘記此靜態變數的值。
<br>
</fieldset>
";
echo $message."<br>";
//'8.8'動態建立匿名函式
$session_name = $session_txt['8.8'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

function greet ($type){
	return create_function ('$greeting',
							"print \"$type:\$greeting <br> \";");
}
$greeting1 =greet("Casual");
$greeting2 =greet("Formal");

$greeting1("How's it going?");
$greeting1("What's up doc?");

$greeting2("Hello");
$greeting2("Hello,my name is Sterling, it is a pleasure to meet you."); 




$message="
<fieldset><legend><font color=red>TIPS</font></legend>
     create_function()函式,會動態建立一個函式,並以第一個參數當作<br>
	 該函式的參數,以第二個參數當作該函式的程式碼。它會傳回該函式名稱,<br>
	 然後你就可以呼叫該函式。這種粗糙的包裝形式有許多用途,包括call_back()<br>
	 函式。
<br>
</fieldset>
";
echo $message."<br>";
//'8.10'取得任意數量的參數
$session_name = $session_txt['8.10'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

$input_record_separator = " ";

function perl_print (){
	$args =func_num_args();
	/*
	for ($idx = 0; $idx <$argc; $idx++){
		$current_arg = func_num_args($idx);
		print $current_arg.$input_record_separator;
	}
	*/
	foreach ($args as $arg){
		print $arg. $input_record_separator;
	}
}
function perl_print1 (){
	
	$argc =func_num_args();
	for ($idx = 0; $idx <$argc; $idx++){
		$current_arg = func_num_args($idx);
		print $current_arg.$input_record_separator;
	}
	
}

perl_print("Hello World \n","My Name is ","Sterling");
perl_print1("Hello World \n","My Name is ","Sterling","234");

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
   PHP提供一組方便的函式,可接受任意數量的參數。func_num_args()   
<br>
</fieldset>
";
echo $message."<br>";

PHP傳址呼叫、傳值呼叫、傳遞參考

常常看到函數前會加一個&符號,&到底是什麼意思?

例如

funcion &get_product_list ($department){
    $product_list = array();
    return $product_list;
}

$products = &get_product_list('rd')

這裡的加上&符號是什麼意思呢?查一下知道是用傳遞參考的方法呼叫函數。函數傳遞資料有三種方式:傳址呼叫(pass by adress)、傳值呼叫(pass by value)、傳遞參考(pass by reference)區別在哪裡呢?以下說明

& ->取址運算子

*->取值運算子

函數中資料的傳遞:傳值、傳址、傳參考
以下的說明是每種程式語言都通用的觀念,但不同程式語言有不同的語法,以及不同的程式語言不一定都支援全部的傳遞方式,要看你使用的是哪種程式語言。

PHP-Cookbook-chapter7

程式

//'7.1'處理時間標記
$session_name = $session_txt['7.1'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

$fn = $file_name = ROOT_PATH."/test/6-10.txt";

print "$fn was last accessed on:". fileatime ($fn)."<br>";
print "$fn was last change on:". filectime ($fn)."<br>";
print "$fn was last modified on:". filemtime ($fn)."<br>";

if (touch ($fn,$date)){
	print "Timestamp changed....";
}else{
	print "Modification Failed";
}

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
   在PHP中,copy()是更改檔案時間標記的唯一方式,而它唯一變更<br>
   的是檔案修改時間。因此,除非你用exec(),system()跳出PHP之外<br>
   ,否則你只能更改檔案的mtime。
   
<br>
</fieldset>
";
echo $message."<br>";
//'7.2'移除檔案
$session_name = $session_txt['7.2'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";


$message="
<fieldset><legend><font color=red>TIPS</font></legend>
   用unlink()函式處理你要刪除的檔案。若成功傳回1,否則傳回0。<br>
   因此你可以用or運算子或if-else區塊。<br>
   如果你想刪除數個檔案,你可以用forch迴圈讀取陣列元素,然後<br>
   刪除每個檔案。<br>
   foreach (\$file as \$file){ <br>
        unlink(\$file); <br>
		or die ('Waring str');<br>
   }
<br>
</fieldset>
";
echo $message."<br>";
//'7.3'拷貝或移動檔案
$session_name = $session_txt['7.3'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";


$message="
<fieldset><legend><font color=red>TIPS</font></legend>
   在PHP中,copy()函式<br>
   if (copy(\$orginal,\$new)){<br>
      print '成功'; <br>
   }else{  <br>
		print '失敗'; <br>
   }  <br>
   或者如果你需要移動檔案,就用rename()函式 <br>
   rename(\$original,\$new) <br>
      or die ('warmingstr')
<br>
</fieldset>
";
echo $message."<br>";
//'7.5'分析檔名的各個組成部分
$session_name = $session_txt['7.5'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

$fn = ROOT_PATH."/test/6-11.php";

$pinfo = pathinfo ($fn);
print "Directory name is :".$pinfo [dirname ] ."\n<br>";
print "Filename is :".$pinfo [basename ]." \n<br>";
print "Ending is :".$pinfo [extension ]." \n<br>";




$message="
<fieldset><legend><font color=red>TIPS</font></legend>
     參數 dirname 檔案位在的目錄<br>
     參數 basename 檔案名稱<br>
     參數 extension 檔案副檔名,若它有的話
<br>
</fieldset>
";
echo $message."<br>";
//'7.8'循序處裡目錄中的檔案
$session_name = $session_txt['7.8'];
echo $session_name."<br>";
//echo ROOT_PATH."<br>";

$dir_name = ROOT_PATH."/test";
$dh = dir ($dir_name);
echo "方法一<br>";
while ($entry = $dh ->read()){
	print $entry ."\n";
}
$dh->close();

$dh = opendir ($dir_name);
echo "<br>方法二<br>";
while ($entry = readdir ($dh)){
	print $entry ."\n";
}
closedir();

$message="
<fieldset><legend><font color=red>TIPS</font></legend>
    你可以用dir()函式透過一虛擬的物件處裡目錄或用opendir()<br>
	、readdir()、和closedir()來讀取目錄。
 	 
<br>
</fieldset>
";
echo $message."<br>";