PHP

tags: cy

變數前加$符號

輸出

<?php echo?><?= ?>
也可用
<?php print?>

echo 與 print 差異

  1. echo 比 print快一點
  2. echo 不回傳資料,print永遠回傳1
  3. echo,print 都不是一個函數,而是一個結構construct,所以後面的參數不加小括號 ()
  4. echo 可傳入多個參數,print不行

型態

String

單引號與雙引號:純文字字串建議使用''去做文字的包覆(與其他傳統語言不同)

雙引號中的變數會自動代入變數內容
$foo = 2;
echo "foo is $foo\n"; // 結果: foo is 2(換行)
echo 'foo is $foo\n'; // 結果: foo is $foo\n

雙引號串中的內容可以被解釋而且替換,而單引號串中的內容總被認為是普通字符

字串相連使用 . 句號

Boolean(布林)

$YesNo = TRUE

0與"0" => FALSE
1 與"1" => TRUE

TimeStamp(時間戳記)

<?= date("Y-y-M-m-D-d"); ?>
//2020-20-Aug-08-Mon-17

array

定義方法:

$bloodType[] = 'A';
$bloodType[] = 'B'; 
或
$bloodType = array('A', 'B');
或
$bloodType = ['A','B'];

$變數名稱[ num ] = value
$變數名稱 = array('key' => value)
$變數名稱['key'] = value //key為字串

ex: $myArray['myName'] = 'Jeremy'$myArray = array('myName'=>'Jeremy');
    echo "Hello! My name is ".$myArray['myName']
//輸出=>Hello! My name is Jeremy;

可使用var_dump 或 print_r 檢視陣列或物件內容

foreach

foreach( 陣列 as 變數名稱 ) 將陣列內容一個一個讀進變數名稱

foreach ($season as $key => $value){
	echo $key, "=>", $value;
}

陣列排序

指令 意義
sort() 以升序對索引陣列排序(字串排列)
rsort() 以升序對索引陣列排序
usort() 以自訂function排序陣列值 usort($array,"funName")
asort() 根據值,以升序對關聯陣列排序
ksort() 根據鍵,以升序對關聯陣列排序
arsort() 根據值,以降序對關聯陣列排序
krsort() 根據鍵,以降序對關聯陣列排序
natsort 自然順序算法對給定數組中的元素排序

定義常數

define

define()函式宣告常數,常數能是數值的值,包括布林、整數、浮點數和字串,雖然也可以設為資源,但有可能會出現問題。

define("常數名稱",值);
  • 使用方式-直接用常數名稱不用加雙引號

const

define 與 const 差異

  • define 可用在條件判斷中,不成立的條件中,定義的不生效,成功定義後全域性可用,可表達式賦值

  • const 不可用在條件判斷中,不過可定義在class中,不可表達式賦值,必須是標量

引用檔案

  • include 貼上
  • require 更強硬的引用,若出問題會報error並停止執行之後的程式

(xxx_once) 如果引用過,重複的引用會被忽略

ERROR顯示設定調整

看設定

phpinfo();

路徑

/Applications/MAMP/bin/php/php7.4.2/conf/php.ini

內容

display_errors = On (Xampp預設On MAMP預設Off)

error_reporting = E_ALL(都顯示)
=E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR(只顯示ERROR)
  • 在程式行前加上@,執行時會不顯示該行的錯誤訊息
  • 在變數前加上&量子糾纏 (直接去取指標的值,call by reference)

運算子

前後++差別

$x = $y++ // $x=$y,$y++ 先給值再加
$x = ++$y // $y++ ,$x=$y 先加再給值

&& 跟 & 差別

(條件a && 條件b) //條件a不符合 不執行條件b
(條件a & 條件b)  //條件a不符合 仍執行條件b

session

session_start()
如果要使用session都必須要有這句做啟動

session Data存於伺服器端,使用者透過提交session ID讓server端提取對應的資料

cookies

cookies存於用戶端,可用於存放session ID.帳密等資料
缺點是容易被竄改

session vs cookies session vs cookie

exit

exit($status)
中止腳本的執行,如果沒有status參數要傳入,可以省略括號

header("Location: $url")
exit;

exit

字串處理

  • strlen() 字串長度,在utf8編碼下中文字佔三個長度
    • mb_strlen( string, "string encoding" ) 加上編碼判斷

  • strpos($字串,x,y)從第一個y開始尋找x(y沒定義就是從頭找)
$s="012345671289";
//    ^從這個往後找
$pos=strpos($s,"12",2); //8
--
$pos=strpos($s,"xxx"); //false 
找不到值會傳回 boolean   //(echo gettype $(pos))

如果查詢到某值的位置為0,該值會被php判斷成false,解決辦法:!== false

$s = "012345671289";
    $pos = strpos($s,"012");
    
    if($pos !== false){
        echo("found: $pos"); //found:0
    }
    
    else{
        echo("Not Found");
    }

查詢字符串第一次出現的位置


  • substr($字串,x,y)從第x個字取y個
$s="01234567";
$result=substr($s,3,4);
echo $result;
//3456
  • str_reaplace("x","y",$字串) 把字串裡的x替換成y
$s="01234567";
$result=str_replace("12","-",$s);
echo $result;
//0-34567
  • htmlspecialchars($string) 將字串中HTML符號變成不可執行的文字符 <資安

function

  • func_get_args() 可變長度參數的函數
  • 以字串間接呼叫function
$p = "test";
echo $p($x); //相當於呼叫 test($x)函數;
  • function無法讀到function以外的全域變數,除非使用 global
  • 如果在function內使用未宣告的全域變數,會自動產生該全域變數,其他的function必須使用global才能使用該變數

php中的方法及類別不分大小寫

$a = 20; function myfunction($b) { print "a=$a"; // '',$a於function內未被定義 $a = 30; print "a=$a"; // 30 global $a, $c;// $c在這裡被定義為全域變數 print "a=$a"; // 20 return $c = ($b + $a); } print myfunction(40) + $c; //60+60=120

讀寫檔案

  • opendir:打開一個目錄
  • readdir:返回由opendir() 打開的目錄中的文件名稱
  • closedir:關閉由 opendir() 函數打開的目錄
  • file_put_contents:快速寫入檔案
  • move_uploaded_file:將上傳的檔案移動到新位置
  • fopen:打開文件或者URL
  • fread:讀取文件
  • fwrite/fputs:寫入文件
  • fgets:從文件指針中讀取一行
  • htmlspecialchars:轉換HTML 特殊符號為僅能顯示用的編碼

Class

Class Animal{
        public $price;        
        private $_weight;
}

__construct(建構子)

一旦宣告後就直接執行,經常會用來執行必要動作

__destruct(解構子)

這個類別執行結束之後再執行 __destruct 內的動作,經常拿來執行收尾的工作

interface和implements

資料庫

連接資料庫

$link = mysqli_connect("host","user","password","database","port","socket")
or die(mysqli_connect_error());

mysqli_query($link, "set names utf8");
mysqli_select_db($link, "資料庫");

//可在mysql_connect前加@可用來停用錯誤訊息

關閉連接

mysqli_close($link)

選取資料表資料

$sql = "select * from 資料表";
$result = mysqli_query($link, $sql);

顯示查詢結果

mysqli_fetch_assoc($result) //使用資料庫欄位取值
echo "ID:{$row['cID']}";

mysqli_fetch_row($result)   //使用數字索引取值
echo "ID:{$row[0]}";

mysqli_fetch_array()

mysqli_fetch_object()

查詢筆數

mysql_num_rows($result)

MVC架構

  • model:對資料庫的存取,異動,檢查
  • view:視圖,前端畫面
  • controller:路由,流程控制

.htaccess (路由設定檔)

RewriteEngine on
//找尋檔案中的file跟directory 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
//找不到的由瀏覽器來處理
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

.htaccess跟Apache共同工作完成一次路徑的解析

curl

  • curl_init() 建立curl連線
  • curl_setopt() 設定擷取的url網址
  • curl_exec()
  • curl_close() 關閉curl連線
$_SERVER['HTTP_HOST']:當前請求的Host頭中的內容(與取得Server的Port)
$_SERVER['SERVER_NAME']:當前運行網頁檔案所在的主機名稱
$_SERVER['REQUEST_URI']:訪問此頁面需要的URL
$_SERVER['PHP_SELF']:當前正在執行的網頁檔案名稱
$_SERVER['QUERY_STRING']:查詢的變數值

作業

會員系統(session): 首頁 會員頁 登入頁
登入 登出

session 設定時間

[session 設定時間](https://blog.longwin.com.tw/2008/10/php- -session-expire-time-2008/)

trim() 清除字串前後空白

電特多做 1.MVC版本 2.laravel版本 3.Lab_REST_API 全部做一遍 截圖

電特加油~我們就靠你惹 加油!!

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

(??? 有點想睡 超級想睡

傘電!!! flash man <- Barry Allen 好看


參考資料

php筆記

兔子吃肉

filesystem函數

框架(laravel sympfony)