PHP 基礎 - fantasy0107/notes GitHub Wiki

大小寫區分

沒有大小寫區分

  1. 自訂類別

stdClass 是保留不可以使用

class Product
{
	...
}

  1. 函式
function getProduct() 
{
	...
}
  1. 內建關鍵字
echo, while .....

有大小寫區分

  1. 變數
$name / $NAME / $NaMe

程式敘述與分號

$product = 'apple';

if ($product == 'apple') {
   ...
}

空白與斷句

空白不影響程式所以可以利用這種特性增加可讀性

註解

// 單行
# 單行
/*多行*/

字面常數

2001
0xFE
1.41
"Hello world"
'Hi'
true
null

識別字

只是個名稱, 用來命名 變數, 函式, 常數, 類別. 第一個字母必須是ASCII字母大小寫都可以

$bill
$I_HEART_PHP

常數

常數識別字只能表示純量值, 布林值, 整數, 浮點數, 以及字串都可以是常數值, 一旦設定後不能再改

define('PUBLISH', 'O'Reilly');
echo PUBLISH;

關鍵字(保留字)

是核心功能保留字, 函示, 類別以及常數的名稱不能跟關鍵字相同

資料型別

整數

-2147483648 ~ 2147483647

十進位 => 1988 / -641 / +33
八進位 => 0755 / +010
十六進位 => 0xFF / 0x10 / -0xDAD1
二進位 => 0b01100000 / -0b10

is_int($var) 可以ˇ判斷是否為整數

浮點數

1.7E-308 ~ 1.7E+308

3.14 / 0.017 / -7.1
科學記號法 => 0.314E1 
is_float($var); //判斷浮點數

字串

'big dog'; //不會解釋字串
"Hi $name"; //會解釋字串

雙引號內轉譯字

布林值

以下皆為 false

關鍵字 false
整數 0 
浮點數 0.0 
空字串 "" 或 "0"
沒有元素的陣列
NULL
is_bool($var) //判斷布林值

陣列

key 可以是 數字或字串

$person = ['Edison'];

$person = ['Light bulb' => 'Edison'];

foreach ($person as $name) {
	...
}

foreach ($person as $value => $name) {
	...
}

// is_array($var); //判斷是否為陣列

物件

定義屬性與方法. 定義類別需搭配關鍵字

class Person
{
    public $name = '';
    
    function name ($newname = NULL)
    {
    	if (!is_null($newname)) {
        	$this->name = $newname;
        }
        
        return $name;
    }
}

$ed = new Person;

is_object($var); // 判斷是否為物件

資源

像是資料庫連線儲存的變數背後的值有特殊意義所以可以稱為資源

callback

代表函式或物件

$callback = function () { echo 'callback'; };

call_user_func($callback);

NULL

代表變數裡頭沒有值;

$aleph = "beta";
$aleph = NULL; //代表沒有值

is_null($var);//判斷是否為null

變數

識別字必須要有 $

$name;

未設定值的變數會向 NULL一樣

動態變數名稱

$foo = 'bar';
$$foo = 'baz';

參考

$black = & $white;

可見範圍

區域, 全域, static, 函式參數

區域

函式內宣告

function updateCounter()
{
    $counter++;
}

全域可見範圍


function updateCounter()
{
    global $counter;
    $counter++;
}

$counter = 10;
updateCounter();
echo $counter;// 11

靜態

function updateCounter()
{
    static $counter = 0;
    $counter++;
    
    echo "Static counter is now {$counter}\n";
}

$counter = 10;
updateCounter(); // 1
updateCounter(); // 2 
echo "Global counter is {$counter}";

函式參數

函式可以命名參數

function greet($name)
{
	echo "Hello, {$name}\n";
}

垃圾回收

管理記憶體的方式

  1. copy-on-write: 複製不會浪費記憶體
  2. reference counting: 確保當記憶體不再需要時, 會將其釋放並歸> 還給作業系統
    符號表

運算式與運算子

運算式: 可計算並產生值
運算子: 用運算元來做某些事情

隱式型別轉換(casting)(type juggling)

"9 Lives" - 1; //8
"3.14 Pies" * 2; //6.28
"9. Lives" - 1 ; //8
"1E3 Points of Light" + 1; //1001(float)

運算子

算數

+ 和  
- 差  
* 乘  
/ 除  
% 取餘數  

字串

$n = 5;
$s = 'There were'. $n . 'ducks';

遞增和遞減

++   
--  

比較

==    
===   
!= / <>  
!==  
>  
>=  
<  
<=  

位元

& and   
| or  
^ xor  
<< 左移  
>> 右移  

邏輯

AND => and / &&  
OR => || / or      
XOR => xor  
Not => !  

轉型運算子

(int) / (integer)
(bool) / (boolean)
(float) / (double)
(string)
(array)
(object)
(unset)

其它

@ 抑制錯誤 
`` 當作 shell 指令
?: => 三元運算子
instanceof 偵測物件所屬類別

流程控制

if   
switch  
while    
for    
foreach  存取陣列元素
try catch  錯誤處理 
declare  定義可執行區塊
exit 結束腳本/return 回傳值   
goto 跳到

引用程式碼

include / include_once (產生警告但是不會停止)
require / require_once (引入不存在屬於重大錯誤)

把 php 嵌入網頁

XML

<?  php_code ?>

SGML

<?= php_code ?>

Script

<% php_code %>

直接回應

<input rtype="text" name="first_name" value="<?= "Dawn";?>">

//ASP
and this number (<% echo (2+2); %>)