PHP 簡介​、變數、資料型態、運算子

PHP 網站程式設計與資料庫基礎班 DAY 1

講師:張凱迪(KD.Chang)

Copyright © 2014 All rights reserved

Outline

 Web 101

 Setup Environment

 Hello PHP

 Variable &  Type & Operator

Web 101

Here we talk Web not Internet !

Modern Web

Modern Web

Modern Web

Cross Platform 跨平台

Cross Browser 跨瀏覽器

Modern Standard & Tools 新的開發標準和工具

How Web Works ?

Static Web 靜態網站

(Client Side Code : HTML / CSS / JavaScript)

Dynamic Web 動態網站 - 不是用 FLASH 就是動態! 

(Server Side Code : PHP, Python, RoR, Node.js, JSP)

Static Web

Dynamic Web

Here We Focus On Dynamic Web

Setup Environment

Setup Our Stack

Apache

Apache HTTP server

PHP run on it !

Cross Platform (Windows / Linux / Mac)

Open Source

MySQL

Open-source relational database (關聯式資料庫)

The world's second most widely used

Cross Platform (Windows / Linux / Mac)

Easy to use (phpMyAdmin)

Open Source

PHP

PHP:Hypertext Preprocessor

Server-side scripting language

Syntax like C & Perl

Can embed into HTML

Open Source

Many Package : X MAP

Windows (WAMP)

 

Linux (LAMP)

Mac (MAMP)

Many Package : X MAP

Open your browser

http://localhost:( your port num) or http://127.0.0.1:port

Hello PHP

Your First PHP Code

<?php 
// save a hello.php file

echo "Hello PHP!";

?>

PHP 的程式都只會作用在 <?php ... ?> 之中

Your Second PHP Code

<!-- rock_php.php -->
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Second PHP</title>
</head>
<body>
	<?php $color='red'; ?>
	<h1>PHP is Rock</h1>
	<h1 style="color:<?php echo $color;?>">PHP is Rock</h1>
</body>
</html>

Semicolon 分號

<?php

echo "Semi-colon";
// ; 為一程式程式敘述結束

?>

PHP 使用分號(;)當做一段程式敘述的結束,告訴直譯器一段程式已完成

Comment 註解

<?php

// comment cannot execute 註解不會執行,為對所寫程式的說明

/*
multi-line comment
multi-line comment 我是多行註解

*/

?>

How PHP works ?

http://self-paced-images.webucator.com/

含 PHP 程式碼的網頁 -> 支援 PHP 的伺服器 -> 純 HTML 網頁

顯示 PHP 相關資訊

PHP 程式碼必須存在伺服器,使用 phpinfo() 觀察伺服器是否有安裝 PHP並顯示 PHP 相關資訊

<?php

phpinfo();

?>

輸出網頁內容

PHP 中 echo() 和 print() 不是真正的函數,它是語言建構子(Language Construct),所以可以加括號亦可以不加。兩者最大差別為 echo 可以透過 , 來顯示數個變數

<?php
$quote_1 = '十年';
$quote_2 = '磨一劍';

echo('十年磨一劍');
echo '十年磨一劍';

print('十年磨一劍');
print '十年磨一劍';

echo $quote, $quote;

?>

重點回顧

1. 使用純HTML伺服器只能提供靜態內容(只有當網頁設計師更新網頁內容才會更新),若是使用PHP,則伺服器也可以結合資料庫(新增、擷取、更新、刪除資料)動態產生HTML網頁。事實上,當伺服器執行 PHP 程式碼時,最後產生的結果總是純 HTML / CSS,因此,一旦在伺服器執行完畢,每一篇 PHP 指令稿最後都會被轉換成 HTML / CSS

 

2. 良好的撰寫程式風格(程式碼多半包含在 <?php 與 ?> 中、注意空行、分號、註解),可以方便閱讀程式碼,檔名命名為 .php 

練習 1-1

將撰寫好的 hello.php 檔案存到伺服器的對應資料夾中(可能是www或/var/www,MAMP default Application/MAMP/htdocs可以自由設定對應資料夾)中並藉由瀏覽器打開:

   http://locoalhost : (Apache port 號碼) / hello.php

若安裝成功將會出現成功畫面


Variable & Type & Operator

Variable 變數

color

red

<?php

$color = 'red';
$student_name = '王小仙';

?>

PHP 程式是由資料和指令所組成,資料則是指變數和資料型態。指令則是指運算子、流程控制和函數

變數可以視為一個儲存值的盒子,變數在程式執行的過程中扮演暫存的角色(存在記憶體中)

變數命名原則

(1) 在 PHP 中,變數使用 $ 當做開頭

(2) 不建議使用 PHP 語法中已使用的關鍵字(Key words)命名

(3) 除了 $ 外變數至少需含一個字元

(4) $ 之後第一字元可以是英文字母或 _ ,後續字母可以是英文字母、_ 或是數字

(5) 空格以及 $ 與 _ 以外的特殊字元不可以使用

(6) 變數名稱習慣用小寫(PHP 將大小寫視為不同變數)

(7) 若有多個單字習慣用 _ 來分隔

PHP is Weak Typing

(不用事先宣告型別)

變數賦值

不同於其他程式語言,PHP 不用事先宣告變數的型別,直接使用 等號(=)指定變數值即可,PHP 會依照變數儲存內容決定型別

 

<?php

$grades = 80;
$name = '另胡衝';
$go_or_not = true;

?>

變數在『變數範圍』(Variable Scope)內需唯一

變數參考指定敘述

除了將值指定給變數外,也可以將變數指定給變數,兩者僅事變數值相同,但到分配不同的記憶體,改動一變數不影響另一變數。若是在變數值前加上 & ,則表示傳送的是參考(記憶體位置),會彼此影響

<?php

$student_name = '洪八公';
$name = $student_name;
$student_name = '洪九公';
echo name;

$name = &$student_name;
$student_name = '洪九公';
echo $name;

?>

變數參考指定敘述

$student_name

$name

$student_name

$name

$name = &$student_name;
$name = $student_name;

動態變數

PHP 動態變數是一種以變數來命名變數的方式,亦即變數名稱使用變數來命名,注意 echo 時只能用 {} 包起內層變數

<?php

$name = 'KD';
$$name = 'Lock';
$kd_name = $$name;
echo $kd_name;

$name = 'KD';
$$name = 'Lock';
echo ${$name};

?>

Constant 常數

<?php 

define('PI', 3.14);

echo PI;
echo '<br>';

$PI = 1;

echo $PI;

?>

有些時候一些常用值我們希望設成有意義的名稱,方便使用

Type 型別

1. 布林(boolean)

2. 整數(integer)

3. 浮點數(float或double)

4. 字串(string)

5. 陣列(array)

6. 物件(object)

7. 空值(NULL)

PHP 一般支援 8 種資料型態:

8. resource

布林(boolean)

boolean 值資料型態只有兩種:true 和 false (不區分大小寫)。常用於流程控制的判斷

<?php

$isHere = true;
$status = FALSE;

?>

整數(integer) 

整數指的是沒有小數的整數資料(整數包含0、正整數和負整數),整數範圍需視作業系統而定,一般 32 位元有符號整數(有表示正負號),範圍:2147483648-2147483647。以 0 開頭為八進位,0x開頭為十六進位(0-9、A-F)

<?php

$num = 1;
$eight = 03;
$sixteen = 0xA1;

?>

浮點數(float或double)

浮點數指的整數加上小數的資料(例如:3.14159),浮點數範圍需視作業系統而定,IEEE 格式是 64 位元,精確度可以達到 14 位小數點,亦可以用科學記號 e 或 E 表示以 10 為底的指數 

<?php

$float_num = 1e.345;
$PI = 3.14

?>

字串(string)

字串由 0 或多個字元由單引號(')或雙引號(")所包含,其中跳脫字元為透過 \ 開頭的字串 ,來顯示鍵盤無法輸入的特殊字元(但要用 "" 括起才有用)

<?php

$poet_1 = '嘈嘈切切錯雜彈,大珠小珠落玉盤';
$poet_2 = "嘈嘈切切錯雜彈,大珠小珠落玉盤";

echo $poet_1;

echo $poet_2; 

?>

補充資源:PHP的跳脫字元

陣列(array)

陣列可視為一系列儲存值的箱子,為非常常見的一種資料結構,後面會有專門章節負責介紹。注意若要印出陣列內容需用 print_r() 函數

<?php

$new_array = array(1, 2);
print_r($new_array);

?>

物件(object)

物件為電腦科學描述事物的方式,可以類比成現實生活的事物,包含屬性和方法。物件導向的程式撰寫方式可以讓程式可以重複使用,更容易維護,在之後章節也會再特別介紹

空值(NULL)

NULL 的值只能是 NULL(不分大小寫),表示變數沒有值。變數值如果是 NULL,原因主要有以下三種:

1. 變數指定成 NULL

2. 變數尚未指定任何值

3. 變數使用 unset() 取消指定值

<?php

$null_or_not = NULL;

?>

資源(resource)

資源資料型態的變數是一種特殊變數,其內容是外部資源參考。例如開啟檔案、連結資料庫、執行XML解析器

<?php
if(!file_exists("demo.txt")){
    $file_ref = fopen("demo.txt", "w");    //打開檔案
    echo get_resource_type($file_ref);    // 輸出:stream
    fclose($file_ref);		    //關閉文件
}
?>

Operator 運算子

PHP 運算式是由運算元(operands)和運算子(operator)所組成,共有算術、指定、位元、比較、邏輯等運算子。基本上運算子的優先順序為『由左到右,先乘除後加減』

算術運算子

算術運算子(Arithmetic Operators)為常用的數學運算,運算元是整數或浮點數

 

<?php
$a = 13;
$b = 7;
echo -($a);
echo '<br>';
echo $a * $b;
echo '<br>';
echo $a / $b;
echo '<br>';
echo $a % $b;
echo '<br>';
echo $a + $b;
echo '<br>';
echo $a - $b;
?>

遞增和遞減運算子

遞增遞減運算子(Increment/Decrement Operators)為可以置於變數前或後進行加減法運算的簡化寫法(若運算子在變數之前則變數立刻受影響,反之等運算式完才執行)

 

<?php

$a = 10;
$b = 12;

echo $a++;
echo ++$a;
echo $b--;
echo --$b;

?>

比較運算子

比較運算子(Comparision Operators)主要是用來比較兩運算元的布林值

 

1. ==

2. === (不只值相等,型態type也須相同)

3. !=

4. <> (不等於)

5. <

6. >

7. <=

8. >=

 

邏輯運算子

邏輯運算子(Logical Operators)可以連接多個比較運算式來建立複雜的條件運算式

 

1. ! (Not 運算,true變false,false變true)

2. && (And,連接兩個運算元皆為true,運算式才為true)

3. || (Or,連接兩個運算元,任何一個為true,運算式為true)

4. and (效果和&&相同,但&&優先順序較前)

5. or  (效果和||相同,但||優先順序較前)

6. xor (連結兩個運算元,任一為true,結果為true。同為true或false,結果為false)

 

位元運算子

位元運算子(Bitwise Operators),能夠進行二進位的位元運算,提供向左移或向右移或 Not、And、Xor、Or 運算

 

 

 

補充資源:位元運算子

字串連接運算子

字串連接運算子 (.) 可以連接兩個字串成一字串

 

<?php
$first_name = 'KD';
$last_name = 'Chang';

echo $first_name . ' ' . $last_name;

?>

指定運算子

指定運算子除了之前使用 (=) 進行變數的賦值外,更可以透過組合運算式(Combined Operators),可以建立更簡潔的算術、比較或位元運算式

 

<?php
$x = 7;
$y = 13;

echo $x += $y; // 等於 $x = $x + $y;
echo $x .= $y; // 等於 $x = $x . $y;
echo $x -= $y; // 等於 $x = $x - $y;
echo $x /= $y; // 等於 $x = $x / $y;
echo $x %= $y; // 等於 $x = $x % $y;

?>

錯誤控制運算子

錯誤控制運算子(Error Control Operators),可以透過在函數或運算式前使用 @ 錯誤控制運算子來避免錯誤訊息顯示在網頁上。錯誤訊息顯示功能於 php.ini 設定檔中設定 track_errors,如果為 on,可以使用 $php_errormsg 印出錯誤訊息

<?php

$x = 13;
$y = 0;
echo @($x / $y);
echo '錯誤訊息:' . $php_errormsg;

?>

Case Operator 型別轉換

資料型別轉換主要是因為運算式中有不同的資料型別進行運算。一般在 PHP 中有自動型別轉換和強迫型別轉換兩種,以下先說明自動型別轉換:

<?php
// 整數 + 浮點數 ->浮點數
// 整數 + 整數字串 -> 字串轉成整數
// 浮點數 + 整數字串 -> 字串轉成浮點數
// 浮點數 + 浮點數字串 -> 字串轉成浮點數
echo 1 + 1.2;
echo 1 + '2';
echo 1.7 + '3';
echo 1.7 + '1.33';
?>

Case Operator 型別轉換

(型態名稱) 運算式或變數
<?php 
// (int), (integer) 強迫轉成整數
// (real), (double), (float) 強迫轉成浮點數
// (string) 強迫轉成字串
// (array) 強迫轉成陣列
// (object) 強迫轉成物件
$x = 4;
$y = 3;
$z = (int) ($x / $y);
echo $z;

?>

PHP 預設會進行型別轉換,若轉換非自己預期的型別,可以透過強迫型別轉換進行轉換:

Q & A

Made with Slides.com