PHP學習記錄
對於語言類的學習,選擇好一門你感興趣的語言種類,去學精它,語言不在多,而在精。
C++、C語言這些術語強類型語言,較難。這些語言,大家至少掌握一門。
java、python、php、js、jsp、GO、。。。
HTML、CSS、XML。。。SQL。。。
PHP
中文無法識別,和php版本相關,切換php版本查看問題;
PHP簡介
- PHP(全稱:PHP:Hypertext Preprocessor,即"PHP:超文本預處理器")是一種通用開源腳本語言。
- PHP 腳本在服務器上執行。(包含數據庫、中間件)
- PHP 文件可包含文本、HTML、JavaScript代碼和 PHP 代碼
- PHP 代碼在服務器上執行,結果以純 HTML 形式返回給瀏覽器
- PHP 文件的默認文件擴展名是 ".php"(.html .js .css .p\y .java)
工具
操作系統windows,linux
編譯環境:安裝phpstudy(包含Apache、PHP、MySql)
開發編程Sublime Text
環境準備
首先大家1、打開筆記本;2、打開PHPstudy,並開啓Apachue;3、打開Sublime TEXT;
新建文件夾php並用Sublime打開(文件的名字不能是中文,也不能有空格)
保存位置 : D:\phpstudy_pro\WWW\php
CTRL+S保存並命名,保存位置在www/php文件下;php1.php
直接通過瀏覽器打開,這裏的代碼是不能直接翻譯,會以源碼的形式直接顯示;
谷歌:
火狐:右擊源碼顯示
編譯php
如果想看到編譯後的結果,就必須加上我們的php的編譯器纔可以;
1、打開phpstudy
2、完成上一步之後,我們會發現,php文件夾中多了兩個配置文件;
3、在瀏覽器上輸入,127.0.0.1
會顯示:
如果沒有以上顯示
3、然後點擊php1.php
會顯示
翻譯結果
文件源碼
翻譯後
PHP語言
PHP腳本以結束
可以單獨使用
<?php echo "hello world" ?>
可以嵌入到HTML中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>這是php第一頁</h1>
<?php echo "hello world!"; ?>
</body>
</html>
註釋
html的多行註釋
php的多行註釋 /* */
單行註釋:# 、//
變量
-
變量以 $ 符號開始,後面跟着變量的名稱
-
變量名必須以字母或者下劃線字符開始
-
變量名只能包含字母數字字符以及下劃線(A-z、0-9 和 _ )
-
變量名不能包含空格
-
變量名是區分大小寫的($y 和 $Y 是兩個不同的變量)
<?php $x=3; $y=4; $z=$x+$y; echo $z; ?> <?php $txt="Hello world!"; $x=5; $y=10.5; ?> #字母必須要雙引號,數字都可以 #PHP 是一門弱類型語言 #在上面的實例中,我們注意到,不必向 PHP 聲明該變量的數據類型。 #PHP會根據變量的值,自動把變量轉換爲正確的數據類型。 #在強類型的編程語言中,我們必須在使用變量前先聲明(定義)變量的類型和名稱。 <?php $x='3'; $y="10"; $z=$x+$y; echo $z; ?>
案例:局部和全局變量
<?php $x=5; function Test() { $y=107; echo "<p>測試函數變量:</p>"; echo "$y"; echo "<br>"; echo "$x"; } Test(); echo "$y"; echo "<br>"; echo "$x"; ?>
#global 關鍵字用於函數內訪問全局變量。 #在函數內調用函數外定義的全局變量,我們需要在函數中的變量前加上 global 關鍵字: <?php $x=5; function Test() { global $x; $y=107; echo "<p>測試函數變量:</p>"; echo "$y"; echo "<br>"; echo "$x"; echo "<br>"; } Test(); echo "$y"; echo "<br>"; echo "$x"; ?>
輸出函數echo和print的區別
echo 和 print 區別:
- echo - 可以輸出一個或多個字符串
- print - 只允許輸出一個字符串
提示:echo 輸出的速度比 print 快, echo 沒有返回值,print有返回值1。
#下面的實例演示瞭如何使用 echo 命令輸出字符串(字符串可以包含 HTML 標籤):
<?php
echo "<h1>這是php第一頁</h1>";
echo "hello world<br>";
echo "hello","world","nihao","漢字";
#echo - 可以輸出一個或多個字符串
print "<h1>這是php第一頁</h1>";
print "hello world<br>";
print "hello";
#print - 只允許輸出一個字符串
?>
<?php
$x="學習 php";
$y="caichuanqi.comp";
$z=array("cai","chuan","qi");
echo $x;
echo "<br>";
echo "在 $y 學習 PHP ";
echo "<br>";
echo "輸出值 $z[1]<br>";
print $x;
print "<br>";
print "在 $y 學習 PHP ";
print "<br>";
print "輸出值 {$z[2]}";
?>
數據類型
String(字符串), Integer(整型), Float(浮點型), Boolean(布爾型), Array(數組), NULL(空值)。
var_dump() 方法,判斷一個變量的類型與長度,並輸出變量的數值,如果變量有值,則輸出是變量的值,並返回數據類型。顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。
注意:保證 var_dump 中的變量必須是存在的,如果變量不存在則返回 NULL。該函數有輸出的功能,因此不必加其它的輸出函數。
字符串
#你可以將任何文本放在單引號和雙引號中:
<?php
$x = "Hello world!";
echo $x;
echo "<br>";
$x = "123";
echo $x;
echo "<br>";
$y = 'Hello world!';
echo $x;
echo "<br>";
var_dump($y)
?>
整型
#整數是沒有小數點的
#整數可以是正數或負數
#整型可以用三種格式來指定:十進制, 十六進制( 以 0x 爲前綴)或八進制(前綴爲 0)。
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // 負數
var_dump($x);
echo "<br>";
$x = 0x8C; // 十六進制數
var_dump($x);
echo "<br>";
$x = 047; // 八進制數
var_dump($x);
?>
浮點型
<?php
$x = 10.365;
var_dump($x);
?>
布爾型
<?php
$x=true;
$y=false;
var_dump($y);
?>
數組
<?php
$a=array("cai","chuan","奇");
var_dump($a);
echo "<br>";
echo "$a[1]";
?>
空值
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
類型比較
參考:https://www.runoob.com/php/php-types-comparisons.html
比較操作符可以讓您比較兩個值:
運算符 | 名稱 | 描述 | 實例 |
---|---|---|---|
x == y | 等於 | 如果 x 等於 y,則返回 true | 5==8 返回 false |
x === y | 絕對等於 | 如果 x 等於 y,且它們類型相同,則返回 true | 5==="5" 返回 false |
x != y | 不等於 | 如果 x 不等於 y,則返回 true | 5!=8 返回 true |
x <> y | 不等於 | 如果 x 不等於 y,則返回 true | 5<>8 返回 true |
x !== y | 絕對不等於 | 如果 x 不等於 y,或它們類型不相同,則返回 true | 5!=="5" 返回 true |
x > y | 大於 | 如果 x 大於 y,則返回 true | 5>8 返回 false |
x < y | 小於 | 如果 x 小於 y,則返回 true | 5<8 返回 true |
x >= y | 大於等於 | 如果 x 大於或者等於 y,則返回 true | 5>=8 返回 false |
x <= y | 小於等於 | 如果 x 小於或者等於 y,則返回 true | 5<=8 返回 true |
<?php
if(42 == "42") {
echo '1、值相等';
}
echo PHP_EOL; // 換行符
if(42 === "42") {
echo '2、類型相等';
} else {
echo '3、類型不相等';
}
?>
常量
設置常量,使用 define() 函數,函數語法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
該函數有三個參數:
- name:必選參數,常量名稱,即標誌符。
- value:必選參數,常量的值。
- case_insensitive :可選參數,如果設置爲 TRUE,該常量則大小寫不敏感。默認是大小寫敏感的。
<?php
// 區分大小寫的常量名
define("CAI", "歡迎訪問 caichuanqi.cn");
echo CAI; // 歡迎訪問 caichuanqi.cn"
echo '<br>';
// echo cai; // 輸出 歡迎訪問 caichuanqi.cn"
define("CAI","你好 蔡川奇",true);
echo cai;
echo "<br>";
?>
#使用常量時,不能在常量名前添加$ 符號,不然會將常量轉換成新的未定義變量使用,會導致報錯。
字符串
String 函數:https://www.runoob.com/php/php-ref-string.html
在下面的實例中,我們創建一個名爲 txt 的字符串變量,並賦值爲 "Hello world!" 。然後我們輸出 txt 變量的值:
<?php
$txt="Hello world!";
echo $txt;
?>
PHP 並置運算符
在 PHP 中,只有一個字符串運算符。
並置運算符 (.) 用於把兩個字符串值連接起來。
<?php
$a="hello world!";
$b="what a nice day!";
echo $a." ".$b;
?>
PHP strlen() 函數
strlen() 函數返回字符串的長度(字節數)。
<?php
$a="hello world!";
$b="what a nice day!";
echo $z=$a." ".$b;
echo "<br>";
echo strlen("what a nice day!");
echo "<br>";
echo strlen($a);
echo "<br>";
echo strlen($z);
?>
PHP strpos() 函數
strpos() 函數用於在字符串內查找一個字符或一段指定的文本。
如果在字符串中找到匹配,該函數會返回第一個匹配的字符位置。如果未找到匹配,則返回 FALSE。
<?php
echo strpos("Hello world!","world");
?>
PHP 編碼函數
echo md5("Hello world!");#計算字符串的 MD5 散列。
echo "<br>";
echo str_rot13("Hello world !")#對字符串執行 ROT13 編碼。
echo "<br>";
echo sha1("Hello world !");#計算字符串的 SHA-1 散列。
echo "<br>";
echo crypt("Hello world !");#單向的字符串加密法(hashing)。
邏輯判斷
運算符
運算符
參考:https://www.runoob.com/php/php-operators.html
運算符 | 名稱 | 描述 | 實例 | 結果 |
---|---|---|---|---|
x + y | 加 | x 和 y 的和 | 2 + 2 | 4 |
x - y | 減 | x 和 y 的差 | 5 - 2 | 3 |
x * y | 乘 | x 和 y 的積 | 5 * 2 | 10 |
x / y | 除 | x 和 y 的商 | 15 / 5 | 3 |
x % y | 模(除法的餘數) | x 除以 y 的餘數 | 5 % 2 10 % 8 10 % 2 | 1 2 0 |
- x | 取反 | x 取反 | -2 | |
a . b | 並置 | 連接兩個字符串 | "Hi" . "Ha" | HiHa |
<?php
$x=10;
$y=6;
echo ($x + $y); // 輸出16
echo '<br>'; // 換行
echo ($x - $y); // 輸出4
echo '<br>'; // 換行
echo ($x * $y); // 輸出60
echo '<br>'; // 換行
echo ($x / $y); // 輸出1.6666666666667
echo '<br>'; // 換行
echo ($x % $y); // 輸出4
echo '<br>'; // 換行
echo -$x;
?>
三元運算符
另一個條件運算符是"?:"(或三元)運算符 。
語法格式
(expr1) ? (expr2) : (expr3)
對 expr1 求值爲 TRUE 時的值爲 expr2,在 expr1 求值爲 FALSE 時的值爲 expr3。
自 PHP 5.3 起,可以省略三元運算符中間那部分。表達式 expr1 ?: expr3 在 expr1 求值爲 TRUE 時返回 expr1,否則返回 expr3。
<?php
$test = '0';
// 普通寫法
$username = isset($test) ? $test : 'nobody';#isset() 函數用於檢測變量是否已設置並且非 NULL。
echo $username;
echo "<br>";
$username = (1==1) ? $test : 'nobody';
echo $username;
echo "<br>";
// PHP 5.3+ 版本寫法
$username = $test ?: 'nobody';
echo $username;
?>
if 語句
- if 語句 - 在條件成立時執行代碼
- if...else 語句 - 在條件成立時執行一塊代碼,條件不成立時執行另一塊代碼
- if...elseif....else 語句 - 在若干條件之一成立時執行一個代碼塊
if 語句
- 在條件成立時執行代碼
if (條件)
{
條件成立時要執行的代碼;
}
#如果當前時間小於 20,下面的實例將輸出 "Have a good day!":
<?php
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
?>
if...else 語句
在條件成立時執行一塊代碼,條件不成立時執行另一塊代碼
if (條件)
{
條件成立時執行的代碼;
}
else
{
條件不成立時執行的代碼;
}
<?php
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
if...elseif....else 語句
在若干條件之一成立時執行一個代碼塊
if (條件)
{
if 條件成立時執行的代碼;
}
elseif (條件)
{
elseif 條件成立時執行的代碼;
}
else
{
條件不成立時執行的代碼;
}
<?php
$t=date("H");
if ($t<"10")
{
echo "Have a good morning!";
}
elseif ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
Switch 語句
switch 語句用於根據多個不同條件執行不同動作。
<?php
switch (n)
{
case label1:
如果 n=label1,此處代碼將執行;
break;
case label2:
如果 n=label2,此處代碼將執行;
break;
default:
如果 n 既不等於 label1 也不等於 label2,此處代碼將執行;
}
?>
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜歡的顏色是紅色!";
break;
case "blue":
echo "你喜歡的顏色是藍色!";
break;
case "green":
echo "你喜歡的顏色是綠色!";
break;
default:
echo "你喜歡的顏色不是 紅, 藍, 或綠色!";
}
?>
循環
- while - 只要指定的條件成立,則循環執行代碼塊
- do...while - 首先執行一次代碼塊,然後在指定的條件成立時重複這個循環
- for - 循環執行代碼塊指定的次數
while 循環
while 循環將重複執行代碼塊,直到指定的條件不成立。
while (條件)
{
要執行的代碼;
}
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
</body>
</html>
do...while 語句
do...while 語句會至少執行一次代碼,然後檢查條件,只要條件成立,就會重複進行循環。
do
{
要執行的代碼;
}
while (條件);
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>
For 循環
循環執行代碼塊指定的次數,或者當指定的條件爲真時循環執行代碼塊。
for (初始值; 條件; 增量)
{
要執行的代碼;
}
參數:
- 初始值:主要是初始化一個變量值,用於設置一個計數器(但可以是任何在循環的開始被執行一次的代碼)。
- 條件:循環執行的限制條件。如果爲 TRUE,則循環繼續。如果爲 FALSE,則循環結束。
- 增量:主要用於遞增計數器(但可以是任何在循環的結束被執行的代碼)。
註釋:上面的初始值和增量參數可爲空,或者有多個表達式(用逗號分隔)。
<?php
for ($i=1; $i<=5; $i++)
{
echo "數字爲 " . $i . "<br>";
}
?>
php函數
PHP 的真正威力源自於它的函數。
在 PHP 中,提供了超過 1000 個內建的函數。
phpinfo();
創建 PHP 函數
函數是通過調用函數來執行的。
<?php
function functionName()
{
// 要執行的代碼
}
functionName();
?>
<?php
function writeName()
{
echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
?>
案例
爲了給函數添加更多的功能,我們可以添加參數,參數類似變量。
參數就在函數名稱後面的一個括號內指定。
#下面的實例將輸出不同的名字,但姓是相同的:
<?php
function writeName($fname)
{
echo $fname."<br>";
}
echo "我的名字是: ";
writeName("Kai Jim");
echo "我姐姐的名字是: ";
writeName("Hege");
echo "我哥哥的名字是: ";
writeName("Stale");
?>
<?php
function abc($i){
for ($i; $i <10 ; $i=$i+2) {
echo "這個數是:";
echo $i;
echo "嗎?<br>";
}
}
abc(-88);
echo "<br>hello world<br>";
abc(3);
echo "<br>hello world<br>";
abc(6);
?>
PHP 魔術常量
參考:https://www.runoob.com/php/php-magic-constant.html
PHP 向它運行的任何腳本提供了大量的預定義常量。
不過很多常量都是由不同的擴展庫定義的,只有在加載了這些擴展庫時纔會出現,或者動態加載後,或者在編譯時已經包括進去了。
有八個魔術常量它們的值隨着它們在代碼中的位置改變而改變。
例如 LINE 的值就依賴於它在腳本中所處的行來決定。這些特殊的常量不區分大小寫,如下:
LINE
文件中的當前行號
<?php
echo '這是第 " ' . __LINE__ . ' " 行';
echo __LINE__
?>
FILE
文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。
自 PHP 4.0.2 起,FILE 總是包含一個絕對路徑(如果是符號連接,則是解析後的絕對路徑),而在此之前的版本有時會包含一個相對路徑。
<?php
echo '該文件位於 " ' . __FILE__ . ' " ';
echo __FILE__;
?>
DIR
文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。
它等價於 dirname(FILE)。除非是根目錄,否則目錄中名不包括末尾的斜槓。(PHP 5.3.0中新增)
<?php
echo '該文件位於 " ' . __DIR__ . ' " ';
?>
FUNCTION
函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。
<?php
function test() {
echo '函數名爲:' . __FUNCTION__ ;
}
test();
?>
PHP 面向對象
在面向對象的程序設計(英語:Object-oriented programming,縮寫:OOP)中,對象是一個由信息及對信息進行處理的描述所組成的整體,是對現實世界的抽象。
在現實世界裏我們所面對的事情都是對象,如計算機、電視機、自行車等。
對象的主要三個特性:
- 對象的行爲:可以對 對象施加那些操作,開燈,關燈就是行爲。
- 對象的形態:當施加那些方法是對象如何響應,顏色,尺寸,外型。
- 對象的表示:對象的表示就相當於身份證,具體區分在相同的行爲與狀態下有什麼不同。
面向對象內容
- 類 − 定義了一件事物的抽象特點。類的定義包含了數據的形式以及對數據的操作。
- 對象 − 是類的實例。
- 成員變量 − 定義在類內部的變量。該變量的值對外是不可見的,但是可以通過成員函數訪問,在類被實例化爲對象後,該變量即可稱爲對象的屬性。
- 成員函數 − 定義在類的內部,可用於訪問對象的數據。
- 繼承 − 繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關係。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作爲自己的內容,並加入若干新的內容。
- 父類 − 一個類被其他類繼承,可將該類稱爲父類,或基類,或超類。
- 子類 − 一個類繼承其他類稱爲子類,也可稱爲派生類。
- 多態 − 多態性是指相同的函數或方法可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一消息可以產生不同的結果,這種現象稱爲多態性。
- 重載 − 簡單說,就是函數或者方法有同樣的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之爲重載函數或者方法。
- 抽象性 − 抽象性是指將具有一致的數據結構(屬性)和行爲(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。
- 封裝 − 封裝是指將現實世界中存在的某個客體的屬性與行爲綁定在一起,並放置在一個邏輯單元內。
- 構造函數 − 主要用來在創建對象時初始化對象, 即爲對象成員變量賦初始值,總與new運算符一起使用在創建對象的語句中。
- 析構函數 − 析構函數(destructor) 與構造函數相反,當對象結束其生命週期時(例如對象所在的函數已調用完畢),系統自動執行析構函數。析構函數往往用來做"清理善後" 的工作(例如在建立對象時用new開闢了一片內存空間,應在退出前在析構函數中用delete釋放)。
PHP 類定義
PHP 定義類通常語法格式如下:
<?php
class phpClass {
var $var1;
var $var2 = "constant string";
function myfunc ($arg1, $arg2) {
[..]
}
[..]
}
?>
解析如下:
- 類使用 class 關鍵字後加上類名定義。
- 類名後的一對大括號({})內可以定義變量和方法。
- 類的變量使用 var 來聲明, 變量也可以初始化值。
- 函數定義類似 PHP 函數的定義,但函數只能通過該類及其實例化的對象訪問。
實例
<?php
class Site {
/* 成員變量 */
var $url;
var $title;
/* 成員函數 */
function setUrl($par){
$this->url = $par;
}
function getUrl(){
echo $this->url . PHP_EOL;
}
function setTitle($par){
$this->title = $par;
}
function getTitle(){
echo $this->title . PHP_EOL;
}
}
?>
變量 $this 代表自身的對象。
PHP_EOL 爲換行符。
PHP 中創建對象
類創建後,我們可以使用 new 運算符來實例化該類的對象:
$runoob = new Site;
$taobao = new Site;
$google = new Site;
以上代碼我們創建了三個對象,三個對象各自都是獨立的,接下來我們來看看如何訪問成員方法與成員變量。
調用成員方法
在實例化對象後,我們可以使用該對象調用成員方法,該對象的成員方法只能操作該對象的成員變量:
// 調用成員函數,設置標題和URL
$runoob->setTitle( "菜鳥教程" );
$taobao->setTitle( "淘寶" );
$google->setTitle( "Google 搜索" );
$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );
// 調用成員函數,獲取標題和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
完整代碼如下:
實例
<?php
class Site {
/* 成員變量 */
var $url;
var $title;
/* 成員函數 */
function setUrl($par){
$this->url = $par;
}
function getUrl(){
echo $this->url . PHP_EOL;
}
function setTitle($par){
$this->title = $par;
}
function getTitle(){
echo $this->title . PHP_EOL;
}
}
$runoob = new Site;
$taobao = new Site;
$google = new Site;
// 調用成員函數,設置標題和URL
$runoob->setTitle( "菜鳥教程" );
$taobao->setTitle( "淘寶" );
$google->setTitle( "Google 搜索" );
$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );
// 調用成員函數,獲取標題和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
?>
PHP的使用
PHP 表單
回顧一下HTML的表單
HTML 表單
表單是一個包含表單元素的區域。
表單元素是允許用戶在表單中輸入內容,比如:文本域(textarea)、下拉列表、單選框(radio-buttons)、複選框(checkboxes)等等。
表單使用表單標籤