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

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

By 張凱迪(KD Chang)

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

本課程分為 前端網頁程式設計基礎班 和 PHP 網站程式設計與資料庫基礎班 兩個班,希望藉由這次課程能讓對於網頁程式設計有興趣的同學可以有一個入門的管道,在上完課程後可以有足夠的自學能力能夠持續學習進修,進而將自己的點子付諸實踐。課程網站:http://kdchang.cc/web-programming-course/ Email:web.programming.course@gmail.com FB 粉絲專頁:https://fb.com/Web.Programming.Course

  • 2,052
Loading comments...

More from 張凱迪(KD Chang)