經常看到有人說:PHP 是世界上最好的語言。
雖然是以半開玩笑半認真的語氣說出,但也反映了PHP 的重要性與其功能之強大。
php中的 :: 是調用類中的靜態方法或者常量,屬性的符號
位置
PHP 腳本可以放在文檔中的任何位置。
PHP 腳本以 <?php 開始,以 ?> 結束:
<?php
// PHP 代碼
?>
變量
變量以 $ 開始,後面接變量名稱,調用變量也需要帶上 $
PHP 是一門弱類型語言
聲明變量時不需要聲明該變量的數據類型,PHP 會根據變量的值,自動把變量轉換爲正確的數據類型。
局部和全局作用域
一般學過一兩門語言都知道局部和全局作用域了
global 關鍵字 global 關鍵字用於函數內訪問全局變量。
函數體內引用全局變量,必須在函數內部使用“global”關鍵字
Static 作用域 當一個函數完成時,它的所有變量通常都會被刪除。然而,有時候您希望某個局部變量不要被刪除。要做到這一點,需要在第一次聲明變量時使用 static 關鍵字,然後,每次調用該函數時,該變量將會保留着函數前一次被調用時的值。
輸出
在 PHP 中有兩個基本的輸出方式: echo 和 print。
區別:
· echo - 可以輸出一個或多個字符串
· print - 只允許輸出一個字符串,返回值總爲 1
提示:echo 輸出的速度比 print 快, echo 沒有返回值,print有返回值1。
語法很簡單,就是
echo "...";
print "...";
如果輸出變量,不需要加 " "
我覺得最厲害的地方是輸出語句可以輸出 HTML 標籤,這樣就可以很方便的進行web 與 mysql 的交互
定界符EOF
PHP EOF(heredoc)是一種在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序語言(像Perl、PHP、Python和Ruby)裏定義一個字符串的方法。
- 必須後接分號,否則編譯通不過。
- 開始標記和結束標記相同,比如常用大寫的 EOT、EOD、EOF 來表示,但是不只限於那幾個(也可以用:JSON、HTML等),只要保證開始標記和結束標記不在正文中出現即可
- 結束標識必須頂格獨自佔一行(即必須從行首開始,前後不能銜接任何空白和字符)。
- 開始標識可以不帶引號或帶單雙引號,不帶引號與帶雙引號效果一致,解釋內嵌的變量和轉義符號,帶單引號則不解釋內嵌的變量和轉義符號。
- 當內容需要內嵌引號(單引號或雙引號)時,不需要加轉義符,本身對單雙引號轉義,此處相當與q和qq的用法。
- 位於開始標記和結束標記之間的變量可以被正常解析,但是函數則不可以。在 heredoc 中,變量不需要用連接符 . 或 , 來拼接,HTML標籤也可以被解析
輸出:
但是如果裏面包含了界定符就會出錯:
數據類型
String(字符串), Integer(整型), Float(浮點型), Boolean(布爾型), Array(數組), Object(對象), NULL(空值)。
var_dump() 方法
判斷一個變量的類型與長度,並輸出變量的數值,如果變量有值,則輸出是變量的值,並返回數據類型。
顯示關於一個或多個表達式的結構信息,
php 中數組的定義:
$cars=array("Volvo","BMW","Toyota");
類型比較
鬆散比較:使用兩個等號 == 比較,只比較值,不比較類型。
嚴格比較:用三個等號 === 比較,除了比較值,也比較類型。
0 false null
鬆散比較是相等的,嚴格比較 不相等
<?php
echo '0 == false: ';
var_dump(0 == false);
echo '0 === false: ';
var_dump(0 === false);
echo PHP_EOL;
echo '0 == null: ';
var_dump(0 == null);
echo '0 === null: ';
var_dump(0 === null);
echo PHP_EOL;
echo 'false == null: ';
var_dump(false == null);
echo 'false === null: ';
var_dump(false === null);
echo PHP_EOL;
echo '"0" == false: ';
var_dump("0" == false);
echo '"0" === false: ';
var_dump("0" === false);
echo PHP_EOL;
echo '"0" == null: ';
var_dump("0" == null);
echo '"0" === null: ';
var_dump("0" === null);
echo PHP_EOL;
echo '"" == false: ';
var_dump("" == false);
echo '"" === false: ';
var_dump("" === false);
echo PHP_EOL;
echo '"" == null: ';
var_dump("" == null);
echo '"" === null: ';
var_dump("" === null);
常量
php 中常量的定義方法我覺得很特別
通過define() 函數設置變量
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
name:必選參數,常量名稱,即標誌符。
value:必選參數,常量的值。
case_insensitive :可選參數,如果設置爲 TRUE,該常量則大小寫不敏感。默認是大小寫敏感的。
常量在定義後,默認是全局變量,可以在整個運行的腳本的任何地方使用。
字符串
字符串類型大家都很熟悉了,下面介紹一些字符串中的操作:
PHP 並置運算符
在 PHP 中,只有一個字符串運算符。
並置運算符 . 用於把兩個字符串值連接起來。
PHP strlen() 函數
返回字符串長度
PHP strpos() 函數
strpos() 函數用於在字符串內查找一個字符或一段指定的文本。
如果在字符串中找到匹配,該函數會返回第一個匹配的字符位置。如果未找到匹配,則返回 FALSE。
數組
在 PHP 中,array() 函數用於創建數組:
在 PHP 中,有三種類型的數組:
數值數組 - 帶有數字 ID 鍵的數組
$cars=array("Volvo","BMW","Toyota");
通過下標訪問
獲取數組長度:count()
遍歷數值數組:
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++)
{
echo $cars[$x];
echo "<br>";
}
?>
關聯數組 - 帶有指定的鍵的數組,每個鍵關聯一個值
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
或:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
通過鍵來訪問值
遍歷關聯數組:
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
多維數組 - 包含一個或多個數組的數組
一個數組中的值可以是另一個數組,另一個數組的值也可以是一個數組。依照這種方式,我們可以創建二維或者三維數組
數組排序:
sort() - 對數組進行升序排列
rsort() - 對數組進行降序排列
asort() - 根據關聯數組的值,對數組進行升序排列
ksort() - 根據關聯數組的鍵,對數組進行升序排列
arsort() - 根據關聯數組的值,對數組進行降序排列
krsort() - 根據關聯數組的鍵,對數組進行降序排列
添加元素
添加數組元素通過array_push()
array_push(array,value1,value2...)
但是這隻能添加值,無法指定指定關聯數組的鍵值對。如果想添加關聯數組怎麼辦呢?
1)直接通過指定鍵來添加值:
$arr["hi"] = "hello";
2)通過數組相加來添加元素
$arr = array("hi"=>"hello") + $arr;
3)使用array_merge方法
$arr = array_merge(array("你好"=>"hello"), $arr);
數組的更多操作請參考:
https://www.runoob.com/php/php-ref-array.html
循環
while循環:
while - 只要指定的條件成立,則循環執行代碼塊
do…while - 首先執行一次代碼塊,然後在指定的條件成立時重複這個循環
for循環
普通for循環,大家都知道
foreach 循環
foreach 循環用於遍歷數組。每種語言的寫法可能大同小異
foreach ($array as $value)
{
要執行代碼;
}
函數
PHP 的真正威力源自於它的函數。
在 PHP 中,提供了超過 1000 個內建的函數。
基礎的語法和其他語言差不多
php 使用 function 來創建php 函數
PHP 中類的對象調用類中方法使用
->
Static 關鍵字
聲明類屬性或方法爲 static(靜態),就可以不實例化類而直接訪問。
靜態屬性不能通過一個類已實例化的對象來訪問(但靜態方法可以)。
由於靜態方法不需要通過對象即可調用,所以僞變量 $this 在靜態方法中不可用。
靜態屬性不可以由對象通過 -> 操作符來訪問。
php中的 :: 是調用類中的靜態方法或者常量,屬性的符號
<?php
class Foo {
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
print Foo::$my_static . PHP_EOL;
$foo = new Foo();
print $foo->staticValue() . PHP_EOL;
?>
Final 關鍵字
PHP 5 新增了一個 final 關鍵字。如果父類中的方法被聲明爲 final,則子類無法覆蓋該方法。如果一個類被聲明爲 final,則不能被繼承。
$_GET 變量
在 PHP 中,預定義的 $_GET 變量用於收集來自 method=“get” 的表單中的值。
預定義的 $_GET 變量用於收集來自 method=“get” 的表單中的值。
從帶有 GET 方法的表單發送的信息,對任何人都是可見的(會顯示在瀏覽器的地址欄),並且對發送信息的量也有限制。
何時使用 method=“get”?
在 HTML 表單中使用 method=“get” 時,所有的變量名和值都會顯示在 URL 中。
註釋:所以在發送密碼或其他敏感信息時,不應該使用這個方法!
然而,正因爲變量顯示在 URL 中,因此可以在收藏夾中收藏該頁面。在某些情況下,這是很有用的。
註釋:HTTP GET 方法不適合大型的變量值。它的值是不能超過 2000 個字符的。
$_POST 變量
在 PHP 中,預定義的 $_POST 變量用於收集來自 method=“post” 的表單中的值。
預定義的 $_POST 變量用於收集來自 method=“post” 的表單中的值。
從帶有 POST 方法的表單發送的信息,對任何人都是不可見的(不會顯示在瀏覽器的地址欄),並且對發送信息的量也沒有限制。
註釋:然而,默認情況下,POST 方法的發送信息的量最大值爲 8 MB(可通過設置 php.ini 文件中的 post_max_size 進行更改)。
何時使用 method=“post”?
從帶有 POST 方法的表單發送的信息,對任何人都是不可見的,並且對發送信息的量也沒有限制。
然而,由於變量不顯示在 URL 中,所以無法把頁面加入書籤。
$_REQUEST 變量
預定義的 $_REQUEST 變量包含了 $ _GET、$_POST 和 $_COOKIE 的內容。
$_REQUEST 變量可用來收集通過 GET 和 POST 方法發送的表單數據。
實例
你可以將 “welcome.php” 文件修改爲如下代碼,它可以接受 $ _GET、$_POST等數據。
歡迎 <?php echo $_REQUEST["fname"]; ?>!<br>
你的年齡是 <?php echo $_REQUEST["age"]; ?> 歲。
包含
include 和 require 語句用於在執行流中插入寫在其他文件中的有用的代碼。
include 和 require 除了處理錯誤的方式不同之外,在其他方面都是相同的:
· require 生成一個致命錯誤(E_COMPILE_ERROR),在錯誤發生後腳本會停止執行。
· include 生成一個警告(E_WARNING),在錯誤發生後腳本會繼續執行。
注意:
require 一般放在 PHP 文件的最前面,程序在執行前就會先導入要引用的文件;
include 一般放在程序的流程控制中,當程序執行時碰到纔會引用,簡化程序的執行流程。
文件操作
fopen() 函數用於在 PHP 中打開文件。
此函數的第一個參數含有要打開的文件的名稱,第二個參數規定了使用哪種模式來打開文件:
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>
檢測文件末尾(EOF)
feof() 函數檢測是否已到達文件末尾(EOF)。
在循環遍歷未知長度的數據時,feof() 函數很有用。
註釋:在 w 、a 和 x 模式下,您無法讀取打開的文件!
if (feof($file)) echo “文件結尾”;
逐行讀取文件
fgets() 函數用於從文件中逐行讀取文件。
註釋:在調用該函數之後,文件指針會移動到下一行。
下面的實例逐行讀取文件,直到文件末尾爲止:
<?php
$file = fopen("welcome.txt", "r") or exit("無法打開文件!");
// 讀取文件每一行,直到文件結尾
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
?>
逐字符讀取文件
fgetc() 函數用於從文件中逐字符地讀取文件。
註釋:在調用該函數之後,文件指針會移動到下一個字符。
下面的實例逐字符地讀取文件,直到文件末尾爲止:
<?php
$file=fopen("welcome.txt","r") or exit("無法打開文件!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
注意:
如果打開一個文件,文件名爲中文,如果系統編碼和當前文檔編碼不一致,會導致文件找不到無法打開,解決方法是用 iconv 函數編碼轉換成一致,如下:
$fpath=iconv('UTF-8','GB2312',"題庫.csv");
$file=fopen($fpath,"r") or exit("無法打開文件!");
//此處省略相關操作
fclose($file);
用相對路徑打不開子目錄中的文件時,可用絕對路徑打開,如下:
$file=fopen(dirname(__FILE__).'\\files\\tk.csv',"r") or exit("無法打開文件!");
//此處省略相關操作
fclose($file);