2016年10月13日 星期四

PHP基本觀念筆記

一、function 使用

1、函數的優點:
    • 減少程序運行的復雜性
    • 提高程序的可靠性
    • 提高軟體的開發效率
    • 提高程式的維護性
    • 提高程式的重複性
2、定義函數
function 函數名(參數1, 參數2...) {


  執行程序...
  returen 返回值;
}

//呼叫函數 
  • 函數可以在定義之前呼叫。 
  • 呼叫函數會去指定函數,當該函數執行完成後,程序會接著執行呼叫函數之下一行程式碼。
函數名(參數1, 參數2..);

3、 函數參數之預設值
  • 在設定時,如傳入的參數與函數本身不同時,將含有預設值之參數放後面。
例如:
<?php
function say_name($name,$city,$age="不能說密碼"){
echo "name:<span style='color:red'>" .$name. "</span><br />";
echo "age: <span style='color:red'>" .$age.  "</span><br />";
echo "city:<span style='color:red'>" .$city. "</span><br />";
}
if(function_exists(say_name)){
say_name("張大千","台中");
}
?>

4、函數的變量 

4-1 函數變量的作用範圍


  • 在函數內之變數,是局部變數,只限制在函數內使用
  • 當變數前加入 global 則沒有限制,例如 global $http

4-2 靜態變數 (static variable)



  • 是在所有對函數調用中共享
  • 只有在第一次執行才會設定變數初始值

例如:

<?php

function addNumber() {

static $i=0;
$i++;
echo $i."<br />";
}
addNumber();
addNumber();
addNumber();
?>
4-3 變數之傳值&傳址傳遞
  • 傳值變數是引用變數的值
  • 傳址變數是引用變位的位址,可以直接改變變數的值,如建立檔案捷徑觀念
例如:
<?php

$name="陳大仁";

//valueVariable
function valueVariable($name) {
$name=$name."先生";
echo $name."在等人<br />";
}
valueVariable($name);
echo $name."<br /><br />";

//addressVariable

function addressVariable(&$name) {
$name=$name."先生";
echo $name."在等人<br />";
}
addressVariable($name);
echo $name;

?>

//valueVariable結果
陳大仁先生在等人
陳大仁

//addressVariable結果

陳大仁先生在等人
陳大仁先生

4-4 多引數傳遞

方式:使用 func_get_args() 接收一個數組,數組裡面包含所有參數
例如:
<?php
function stu_name(){
$arr = func_get_args();
foreach($arr as $key=>$value){
echo "你是第".($key+1)."位學生,姓名為".$value."<br / >";
}
}
stu_name("張三","李四","王老五");
?>
//結果
你是第1位學生,姓名為張三
你是第2位學生,姓名為李四
你是第3位學生,姓名為王老五

4-5 變數函數

可以在變數戶加(),系統會查找與變數值同名的函數,去執行
例如:
<?php
$myname = "show_name";
function show_name(){
echo "my name is jack.";
}
echo $myname();
?>
//結果 my name is jack.

4-6 遞迴函數



  • 在函數體內,調用呼叫自己
  • 切記加入一個停止的條件
  • 避免陷入無限循環,如非必須儘量少使用

例如:

<?php
// show 5*4*3*2*1
function jc($i){
if ($i>1) {
$result = $i * ($i-1);
} else {
$result = $i;
}
return $result;
}
echo jc(5);
?>
//結果 20

4-7 內部函數

可以在函數體內,定義函數
例如:
<?php
function showMyName(){
function execResult($firstName,$LastName){
echo "your name is ".$firstName." ".$LastName;
}
execResult("Wang","Jack");
}
showMyName();
?>
//結果 your name is Wang Jack.

二、基礎應用說明

1、定義字符串
  • '單引號:
    • 咼引號內只能是'或 \才能被轉釋,其他則不轉釋
    • 單引號內的所有文字,一律用字串表示
    • 單引號的效能大於雙引單
  • "雙引號:雙引號內的所有文字,當有特定符號、標韱,會被正常顯示出來
  • <<<定界符:為了能夠在PHP中輸入大量文字而不是用轉義符,人們發明出了定界符。
    • 使用定界符,實際使用定界符的時候,要注意字符串的分隔符需要自己單獨一行,也就是說,在它前後都不能加空格或tab。
    • 定界符語法 
變數 = <<<名稱(大寫英文)        
名稱; 
  • 如將名稱加入單引號,則內容表示好像單引號標識意思  
例如:
<?php
$url='!!!!!!!!!!';
$test='單引號內的所有文字,一律用字串表示'$url';
echo "$test.<br />";
$test="雙引號內的所有文字,當有特定符號、標韱,會被顯示出來$url";
echo "<br />.$test.<br />";
echo "</br>";

$b = <<<EOT

在遇到下一個EOT(End Of Text)之前,我們可以在文字中隨便使用'單"雙引號$url
EOT;
echo $b;

$b2 = <<<'EOT2'
如將名稱加入單引號,則內容表示好像單引號標識意思
EOT2;
echo $b2;
?>
//結果
單引號內的所有文字,一律用字串表示$url.

.雙引號內的所有文字,當有特定符號、標韱,會被顯示出來!!!!!!!!!!.


在遇到下一個EOT(End Of Text)之前,我們可以在文字中隨便使用'單"雙引號!!!!!!!!!!


2、邏輯值使用說明

  • 當下列情況顯示 FALSE:
    • FALSE
    • 0
    • 0.0
    • 字串為空時,例如$a="",$a=''
    • "0" 或 '0'
    • NULL,表示該變數沒有值或沒有指定
    • 陣列未指定值,例如 $a = array()
  • 除以以上情況,均為 TRUE
3、物件建立
<?php
class Cars {
public $color;
public $kind;
function display(){
echo "<br /> 您的車型為".kind."<br />顏色為:".color;
}
}
$car1 = new Cars();
$car1->color = "Yellow";
$car1->kind =  "三菱";
// 結果
您的車型為:kind
顏色為:color
?>

4、變數型態轉換
  • 自由轉換:型態直接根據內容由系統決定資料形態。
  • 強制轉換:直接在內容前面指定資料型態做轉換。
  • 具體轉換函數:使用函數方式指定資料型態。
    • 函數有intval()、floatval()、strval()
    • 這些函數直接針對標準變數做轉換,陣列、物件則不支援。
  • 使用settype()函數: 直接修改原始宿主的型態。
<?php
echo "自由轉換"."<br/>";
$a = 123;
echo var_dump($a)."<br/>";

echo "<br/>強制轉換"."<br/>";
$b = '123,是數值'."<br/>";
echo "\$b = ".$b;
$c = (int) $b;
echo "\$c = ".$c;
echo "<br/>";

echo "<br/> 使用settype()直接轉換宿主<br/>";
$e="10";
settype($e,'float');
var_dump($e);
echo "<br/>";

echo "<br/> 使用函數轉換<br/>";
$f = 10.5;
$g = intval($f);
var_dump($g);
echo "<br/>".$g;
?>

5、運算符使用注意事項

5-1、遞增符號

後++是先執行表達式,再執行平身遞加。
前++執行平身遞加,再執行表達式。
例如:

$a = 1;$c = 10 + $a++; //結果是11


$a = 1;$c = 10 + ++$a; //結果是12


5-2 比較運算符



  • < 小於、<= 小於等於
  • > 大於、>= 大於等於
  • <>、!= 不等於
  • !== 類型或值都不相等
  • == 值相等
  • === 類型或值都相等
5-3 邏輯運算符
  • and 或 && ,左右兩邊表達式均成立 TRUE ,返回真值
  • OR 或  ||  ,左右兩邊表達式有一個成立 TRUE ,返回真值
  • not 或 ! ,當為真返回假;當為假返回真
  • xor , 當左右表達式只允許一個是 TRUE 則返回真,其他清況均反回假 FALSE
    • 例如:
      • true xor true = false
      • false xor false = false 
      • true xor false = true
      • false xor true = true
5-4 三元表達式
echo (條件)? (當條件為真,顯示之結果) : (當條件為假,顯示之結果)

5-5 @ 禁止顯示警告信息


  • 可以用於函數、變數、常數禁止顯示警告訊息
  • 不可用於流程、迴圈裡,例如 if、while、foreach
  • 一般來說,放置在有返加在值的地方
5-6 運算元的斷路
/*


  • 斷路發生在   && 與 ||   (邏輯運算元) 
  • 斷路不發生在 &  與 | (位移運算元)
*/

//&& 斷路測試
$a = "我是女生";
$a=="我是男生" && $b=2;
echo "請問\$b 有執行?<br />";
echo $b;
//結果 Undefined variable: b

//|| 斷路測試
$myname="mark";
$myname == "mark" | $sex="男生";
echo "請問\$sex 有執行?<br />";
echo $sex;
//結果 男生


//實際應用
$file_name ="f.txt";
$f = @ fopen($file_nam,'r') || die("f.txt,檔案不存在");

//結果f.txt,檔案不存在

5-7  流程控制
5-7-1 if 流程控制
<?php
/*
if (條件式1){
陳述式1
}elseif(條件式2){
陳述式2
}elseif(條件式3){
陳述式3
}else{
陳述式...
}
注意
  • if語句中,一個條件成立,其他分支不執行
  • if中的條件式,只能是bool值
*/

$age=111;

if ($age>=1 && $age<=60) { //
echo "你的年紀為從1~60";
}elseif($age>60 && $age<=80){
lseif($age>80 && $age<=100){
echo "你的年紀為從61~80";
}else{
echo "你的年紀為從1~60";
}eecho "你已經不是人了...";
}

?>
5-7-2 switch 流程控制
語法:
switch (表達式){
case 值:
....
break;
case 值:
....
break;
default:
....
}

5-7-3 while 、 do..while 與 for

while (表達式){
代碼段
}


do {
代碼段
} while(表達式);
/*
特點:
1、最少會執行一段代碼段
2、while(表達式);後有分號
*/


for (表達式1; 表達式2; 表達式3){
代碼段
}
/*
執行順序:
1、第一次執行順序:表達式1→表達式2→代碼段→表達式3
2、第二次執行順序:表達式2→代碼段→表達式3....
特點:
使用時機:當明確知道循環次數
*/


  • 表達式一般為變數,如果不加 break,後面的 case 都會執行
  • 使用時機
    • 當值有固定的幾種情況時
    • 語句結構清晰
    • 執行效率高
5-7-4 流程跳脫或中止


  • break :中斷目前執行的迴圈
  • continue :則是回到迴圈的開頭,執行「下一次」的迴圈。
  • continue 數字:則跳至幾層循環,直接就結束。
  • exit 別名 die:直接退出程序
6、 常量定義
/*
常量:
作用:定義一個不會變的值
聲明:define
特點:
常量名要大寫,用引號包起來
全域都可以用引用、常量名不能變更或銷毀
檢測:利用defined
*/
//聲明
define('PI',3.14);
echo constant('PI'),"<br>"; //3.14
//或
echo PI,"<br>";
//檢測
if (!defined('PIS')){
    echo 'PIS常量未定義';
    define('PIS',9999);
}else{
    echo 'PIS常量已定義';
}
echo '<br>';

//動態常量名,用變量的值做為常量的名稱,如何做?
//使用constant()函數
$chage = 'PIS';
echo constant($chage); //9999

十、其他注意事項

1、載入外部文件注意事項:
  • include() 如果載入的文件不存在,提示警告錯誤,程序還可以繼續執行。
  • require() 如果載入的文件不存在,致命性錯誤,程序終企,不繼續執行。
  • include_once() 與 require_once() 除了上述錯誤顯示不同外,作用為只載入一次文件,如果此文件載入過,將不再載入。
2、 print_r 與 var_dump 差異
  • print_r 如果給出的是 string、integer 或 float,將列印變數值本身。如果給出的是 array,將會按照一定格式顯示鍵和元素。object 與陣列類似。
  • 而var_dump除了print_r的資訊外,還會再列出變數型態。
例如:
<?php
$str="12.34.456.5465.22";
$arr = (explode(".",$str,2));
print_r($arr);
echo "<br />";
var_dump($arr);
?>

//結果
print_r       結果   Array ( [0] => 12 [1] => 34.456.5465.22 )
var_dump  結果  array(2) { [0]=> string(2) "12" [1]=> string(14) "34.456.5465.22" }

沒有留言: