My blogs

The greatest test of courage on earth is to bear defeat without losing heart.

0%

php(一)

Php 語法筆記,後端語言。

介紹

Php 是一種通用開源腳本語言。語法吸收了 C 語言、Java 和 Perl 的特點,利於學習,使用廣泛,主要適用於 Web 開發領域。PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創的語法。它可以比 CGI 或者 Perl 更快速地執行動態網頁。用 PHP 做出的動態頁面與其他的程式語言相比,PHP 是將程序嵌入到 HTML 文檔中去執行,執行效率比完全生成 HTML 標記的 CGI 要高許多;PHP 還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。


php 在網站後端中

  • 比較圖如下:

比較

參考網站

結論來說使用率還是相對來高

php 是在伺服器端編譯執⾏行行的程式腳本,php 在瀏覽器開啟前會進⾏行行編譯,因此無法看到原始碼。


語法

echo 輸出字串(String)

常常有人將 echo 誤以為是一個函數,其實 echo 並不是 PHP 函數,而是一個語言結構(language construct)

使用 echo 的時候並不一定需要用小括號,可以直接使用單引號、雙引號

PS : PHP echo非是一個函數

輸出的是變數,則不能使用單引號,否則 PHP 會將 單引號的內容當成字串直接輸出 ,而不是輸出變數內容。


EX1:

1
2
3
4
5
<?php
 echo '測試一<br>';
 echo "測試二<br>" ;
 echo ('測試三<br>');
?>
  • 結果如下 :

測試一
測試二
測試三


EX2 (以變數方式):

1
2
3
4
<?php
 $test='PHP test.';
echo $test;
?>
  • 結果如下 :

PHP test.


PS : 上述說到單雙引號區別

此例子可加上雙引號寫成echo "$test",輸出皆相同。

若加上單引號echo '$test',則輸出為$test而非變數內容


echo vs print

用法與 echo 類似,嚴格來說 PHP print 本身並不是一個 PHP 函式,執行 效率比 echo 稍微慢一點點,處理程序單純的情況下,兩者差異其實並不大,PHP print 可以用單引號輸出單純的字串,也可以用雙引號輸出變數值


php用法

使用.連接起來(字串,變數),+與其他語言不大相同。

EX1:

1
2
3
4
5
6
7
<?php
$test = 'hello';
$test1 = '大家!';
echo "$test"."$test1<br/>";
echo '今年是'.date('Y').'年<br/>';
echo '今天是'.date('Y-m-d').'日' ;
?>
  • 結果如下 :

hello 大家!
今年是 2021 年
今天是 2021-09-21 日


php註解

註解範例

單一 : 兩個斜線//開始,斜線後方就是註解。
多筆 : 斜線加上星號如/*,結尾是星號加上斜線如*/

1
2
3
4
5
6
7
8
9
<?php
// 這裡是單行 PHP 註解 ...

/*
...這裡是多行 PHP 註解
...這裡是多行 PHP 註解
...這裡是多行 PHP 註解
*/
?>

php變數命名

PHP 變數有許多種不同的型態,例如常見的字串變數 String、整數變數 Integer、浮點數 Float、布林值 Boolean、陣列 Array、物件 Object … 等。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// 字串 String
$my_variables="Welcome";
echo $my_variables;

// 整數 Integer
$my_integer_number=20;
echo $my_integer_number;

// 浮點數 Float
$my_float=3.1415926;
echo $my_float;

// 陣列型態 Array
$my_array=array('a','b','c');
print_r($my_array);

// 布林值 Boolean
$MyVariables1=true; // 0
$MyVariables2=false;// 1

?>

命名規則

  • 前方都必須美金符號($)做開頭。

  • 變數名稱英文字母、數字、底線與十六進位制或符號_

  • 變數的第一個字母不可以用數字開頭。

  • 英文大小寫為不同。


字串(string)相關函數

想要加入特殊符號在字串中,在符號前加上\

取得字串長度 strlen()

範例:

1
2
3
4
<?php
echo "字串長度".strlen("hello")."<br/>";
echo "字串長度".strlen("你好hi");
?>
  • 結果如下 :

字串長度 5
字串長度 8
PS : 中文字一個字算三。


這邊改成

範例:

1
2
3
4
<?php
echo "字串長度".strlen("hello")."<br/>";
echo "字串長度".mb_strlen("你好hi",'utf-8');
?>
  • 結果如下 :

字串長度 5
字串長度 4

PS : mb_strlen第一個參數string 是要計算長度的字串,必要項目,而第二個參數 string encoding 則是要判斷的編碼,使用萬國碼就用 utf-8


取得字串內容 substr()

範例:

1
2
3
4
5
6
7
<?php
$test = "hello world";
echo substr($test,0,2).'<br/>';
echo substr($test,5,5).'<br/>';
echo substr($test,-2).'<br/>';
echo substr($test,0,-1).'<br/>';
?>
  • 結果如下 :

he
worl
ld
hello worl

PS : substr( $string , $start , $length )$strting 是原始的字串,$start 是要開始擷取的位置,$length 則為要截取的字串長度。
$start 與 $length必須為數字才有作用,可為正負整數


中文改成

範例:

1
2
3
4
<?php
$test = "今天天氣很好";
echo mb_substr($test,0,2,'utf-8').'<br/>';
?>
  • 結果如下 :

今天


布林(boolean)

var_dump印出變數的相關訊息於螢幕上,變數的值或是變數的種類,也能一次處理多個變數的功能

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$test = true;
$test2 = false;

echo "test : ";
var_dump($test);
echo "<br/>" ;

echo "test2 : ";
var_dump($test2);
echo "<br/>" ;


echo "test : ";
echo "$test".'<br/>' ;
echo "test2 : ";
echo "$test2".'<br/>' ;
//多個判別變數
var_dump('hi',1,2.5)
?>
  • 結果如下 :

test : bool(true)
test2 : bool(false)
test : 1
test2 :

string(2) “hi” int(1) float(2.5)

PS : PHP 會把 true 轉成 1,遇到 false 會轉成空字串(“”)。


常數(constant)

一個常量一旦被定義,就不能再改變或者取消定義

常量只能包含標量資料(boolean,integer,float 和 string),不能是表示式

PS : 指定其名字來取得常量的值,與變數不同,不應該在常量前面加上 $ 符號

PHP 5.3.0 之前可以用 define() 函式來定義常量。

PHP 5.3.0 以後,可以使用 const 關鍵字在類定義的外部定義常量。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
define('test',100);
define('hey',"你好嗎?");
//直接使用echo 不用加上錢字號。
echo test."<br/>";
/*通過 name 返回常量的值。當你不知道常量名,卻需要獲取常量的值時,constant() 就很有用了。
也就是常量名儲存在一個變數裡,或者由函式返回常量名。該函式也適用。*/
echo constant('test')."<br/>";

echo hey."<br/>";
echo constant('hey');

echo "<br/>";
// const 直接定義常數
const eng = 'A';
echo eng;
?>
  • 結果如下 :

100
100
你好嗎?
你好嗎?
A


空值(NULL)

判斷變數是否為

  1. 它被賦值為 NULL
  2. 它還沒有賦值。
  3. 它未定義,相當於 unset(),將一個變數 unset()後,不就是沒有定義嗎。

is_null功能:檢測變數是否為null

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$a = null;
$b = NULL;
$c= 0;
$d=" ";
echo "a為 :". is_null($a) . "<br/>";//1==true
echo "b為 :". is_null($b) ."<br/>";
echo "c為 :". is_null($c) . "<br/>";
echo "d為 :". is_null($d) ."<br/>";//空字串為false

echo '<pre>';
var_dump($a,$b,$c,$d);
echo '</pre>';
?>

  • 結果如下 :

a 為 :1
b 為 :1
c 為 :
d 為 :

NULL
NULL
int(0)
string(1) “ “


共同比較 empty() vs isset()

isset()

  1. 它並不會判斷變數是否為空,並且可以用來判斷陣列中元素是否被定義過

範例:

1
2
3
4
5
6
<?php
$a = 0;
echo 'a is '. isset($a) ;
echo '<br/>';
echo 'b is '. isset($b) ;
?>
  • 結果如下 :

a is 1 //true
b is //false


empty()

  1. 任何一個未初始化的變數、值為 0 或 false 或 空字串或 null 的變數、空陣列、
    沒有任何屬性的物件,都將判斷為 empty==true

ps : 未初始化的變數也能被 empty 檢測為,empty 只能檢測變數,而不能檢測語句。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

<?php
$a = 0;
$b ="";
$c =array();
$d=false;
$e=null;
echo 'a is '. empty($a).'<br/>' ;
echo 'b is '. empty($b).'<br/>' ;
echo 'c is '. empty($c).'<br/>' ;
echo 'd is '. empty($d).'<br/>' ;
echo 'e is '. empty($e).'<br/>' ;
echo 'f is '. empty($f).'<br/>' ;
?>
  • 結果如下 :

//all true
a is 1
b is 1
c is 1
d is 1
e is 1
f is 1

下方連結為整理比較圖表 :
點選連結


陣列(array))

Array 陣列函數是相當常用到的函數,你可以把 Array 當成一個用來儲存多數値的一個變數,當然 Array 本身其實是個函數,在你安裝好 PHP 的時候就已經內建了。

陣列的架構可以是單純的數個値,也可以是由 keyvalue 的搭配。

count() 陣列計算共有多少數。

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$a = ["apple","orange","lemon","banana","papaya"];
$b =array("cat","dog","duck","lion","zebera");

// index start 0
echo 'a is '. $a[0].'<br/>' ;
echo 'a is '. $a[1].'<br/>' ;
echo 'a is '. $a[2].'<br/>' ;
echo 'a is '. $a[3].'<br/>' ;
echo 'a is '. $a[4].'<br/>' ;

// account
echo count($a).'<br/>';

//Destructuring 拆解
$animal1 = $b[0];
$animal2 = $b[2];
$animal3= $b[4];
echo 'animal1 '. $animal1.'<br/>' ;
echo 'animal2 '. $animal2.'<br/>' ;
echo 'animal3 '. $animal3.'<br/>' ;

// 拆解
//index[0],index[1],index[2]
[$al1,$al2,$al3] = $b;
echo 'al1 '. $al1.'<br/>' ;
echo 'al2 '. $al2.'<br/>' ;
echo 'al3 '. $al3.'<br/>' ;

?>
  • 結果如下 :

a is apple
a is orange
a is lemon
a is banana
a is papaya

5

animal1 cat
animal2 duck
animal3 zebera

al1 cat
al2 dog
al3 duck


範例 2 Associative Arrays (key&value):

1
2
3
4
5
6
7
8
9
10
$a=array("Banana"=>"香蕉",
"Apple"=>"蘋果",
"Watermelon"=>"西瓜");

["Banana"=>$ba,"Apple"=>$ap]=$a;

echo $a['Banana']."<br/>";
echo $a['Apple'];

?>
  • 結果如下 :

香蕉
蘋果


範例 3 Apply:

parse_url 解析 URL,返回其組成部分。

解析一個 URL 並返回一個關聯陣列,包含在 URL 中出現的各種組成部分。

本函式不是用來驗證給定 URL 的合法性的,只是將其分解為下面列出的部分。不完整的 URL 也被接受,也會嘗試儘量正確地將其解析。

1
2
3
4
5
6
7

echo '<pre>';
print_r (parse_url('https://tady0725.github.io/tadyweb/'))
['host'=>$url] =parse_url('https://tady0725.github.io/tadyweb/');
echo '</pre>';
echo $url;
?>
  • 結果如下 :

Array
(
[scheme] => https
[host] => tady0725.github.io
[path] => /tadyweb/
)
tady0725.github.io


Multidimensional Arrays

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$cars = array (
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
[$volvo]=$cars;
echo '<pre>';
var_dump($volvo);
echo '<pre/>';
[$firstcarname] =$volvo;
echo $firstcarname;

?>

  • 結果如下 :

array(3) {
[0]=>
string(5) “Volvo”
[1]=>
int(22)
[2]=>
int(18)
}
Volvo


算術符號

$a =4 ,$b =10

數學運算符範例範例結果
+(加)$a + $b10+4 的結果:14
-(減)$a - $b10-4 的結果:6
*(乘)$a * $b10*4 的結果:40
/(除)$a / $b10/4 的結果:2.5
%(求餘數)$a % $b10%4 的結果:2
**指數$a ** $b10**4 的結果:10000

Comparison Operators

比較運算符解釋
$a == $b值相等時,才為真
$a === $b值以及資料形態都相等才為真
$a != $b值不相等時,才為真
$a <> $b值不相等時,才為真
$a !== $b值或資料形態不相等時才為真
$a < $b or $a>$b(大,小)於才為真
$a <= $b or $a>=$b(大,小)等於才為真

logical Operator

ex: $a =true ,$b =false;

邏輯運算符解釋
$a && $band $a and $b 皆為true 才是true
$a || $bor $a and $b 其中一個為true,就是true
! ($a && $b)判別正確答案相反

Assignment(string)

字串指派

範例:

1
2
3
4
5
6
7
8
<?php
$day ="2020-01-01";
$name ="John";
$day .=$name;
echo $day;

?>

  • 結果如下 :

2020-01-01John


switch 用法

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$a =85;
switch($a)
{
case $a>=90:
echo("大於90分");
break;

case $a>=80 && $a<90:
echo("80~90");
break;

default :
echo('不通過');
break;
}

?>

  • 結果如下 :

80~90


條件判斷&迴圈

if && else 寫法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$a =true;
$b =false;
if($a){
echo "真".'<br/>';
}
else
{
echo "假";
}
echo "-------------<br/>";

// if else 簡短寫法
echo ($a) ? "真" : "假";
// 存在變數

$istrue = ($a) ? "真" : "假";
echo $istrue;
?>

  • 結果如下 :


-————


for loop 和 break+continue 用法

continue : 控制程式放棄本次迴圈continue語句之後的程式碼並轉而進行下一次迴圈。continue 本身並不跳出迴圈結構,只是放棄這一次迴圈。

break : 跳出當前的語法結構,執行下面的語句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$a=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
$counts=count($a);
for($i=0;$i<$counts;$i++)
{
//break
if($i>=2)
break;
echo $a[$i]."<br/>";
//continue
/*
if($i>=2)
continue;
echo $a[$i]."<br/>";
*/
}
?>

  • 結果如下 :

星期日
星期一


foreach 用法

foreach 循環的目的是定義用途,它專門遍歷數組數據結構的元素。

array

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$n = [1,2,3,4,5,6,7,8,9];
/*
foreach( $array 作為 $element ) {
// 要執行的 PHP 代碼
}
*/
foreach ($n as $value)
{
echo "值".$value."<br/>";
}
?>

  • 結果如下 :

值 1
值 2
值 3
值 4
值 5
值 6
值 7
值 8
值 9


Associative Arrays

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$age = array("Peter"=>"35",
"Ben"=>"37",
"Joe"=>"43",
"Jhon"=>"53",
"Jay"=>"73");
/*
foreach( $array 作為 $element ) {
// 要執行的 PHP 代碼
}
*/
// as define variable 可自訂
foreach ($age as $name => $ages)
{
echo "名子 ".$name." ".$ages." 歲"."<br/>";
}
?>
?>

  • 結果如下 :

名子 Peter 35 歲
名子 Ben 37 歲
名子 Joe 43 歲
名子 Jhon 53 歲
名子 Jay 73 歲


while, do-while loop

while

1
2
3
4
5
6
7
8
9
10
$array =[1,2,3,4,5,6,7,8,9];
$countarray =count($array);
$i=0;
while($i < $countarray)
{
echo "$array[$i] <br/>";
$i++;
}
?>

  • 結果如下 :

1
2
3
4
5
6
7
8
9


do-while

1
2
3
4
5
6
7
8
9
10
$array =[1,2,3,4,5,6,7,8,9];
$countarray =count($array);
$i=0;
while($i < $countarray)
{
echo "$array[$i] <br/>";
$i++;
}
?>

  • 結果如下 :

do while 1
do while 2
do while 3
do while 4
do while 5
do while 6
do while 7
do while 8
do while 9


自定義功能(function)

Return 返回值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 一般function
function test()
{
echo "你好";
}
test();

echo "<br/>";
// return方式
function back()
{
return "你好 ㄚ";
}
echo back();
?>


  • 結果如下 :

你好
你好 ㄚ


Parameter 參數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function test($name)
{
echo "你好$name";
}
test("james");

echo "<br/>";

function testif($name)
{
if($name=="james")
return "你好$name";

return "你是誰?";


}
echo testif("jame");

?>

  • 結果如下 :

你好 james
你是誰?


參考網站


如果您喜歡我的文章,請幫我按五下 ,感謝大家。