天天看點

PHP自學筆記php自學筆記

php自學筆記

#1.初識

PHP是一種類似Python的弱類型語言,是一門伺服器端的語言。全稱:PHP:Hypertext Preprocessor,超文本預處理器,PHP檔案可包含HTML,js代碼。在伺服器端執行傳回純HTML給浏覽器。

#2.變量

必須以$開始,不用聲明變量,在第一次指派的時候建立變量,這點和Python很像,這可能就是這種弱語言類型的特點。作用域這點也要注意,在PHP代碼中,函數外部定義的變量為全局變量,相應的,函數内定義的就是局部變量。外部的全局變量隻能外部調用,函數内定義的隻能函數内調用,(函數内調用全局變量用global關鍵字)

像這樣:$GLOBALS[’ 全局變量 ']

<?php
$x=5;
$y=10;
 
function myTest()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 
 
myTest();
echo $y;
?>
           

此外,還有超級全局變量,顧名思義就是其作用域特别的大,有以下:

  • $GLOBALS

    超級全局變量組,所有變量都被它所包括,正如上面的示例。

  • $_SERVER

    $_SERVER 是一個包含了諸如頭資訊(header)、路徑(path)、以及腳本位置(script locations)等等

    資訊的數組。這個數組中的項目由 Web 伺服器建立。請求的一些資訊都在這裡。

  • $_REQUEST

    用于收集HTML表單送出的資料。

<html>
<body>
 //action指定form送出的資料到哪裡
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
 
<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>
 
</body>
</html>
           
  • $_POST

    與request類似,隻不過它是這樣描述的:廣泛用于搜集HTML表單資訊,“method=post”。

  • $_GET

    這個也是和post差不多,隻不過指定的方法是:“method=get”。可接受url上傳過來的參數。

  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

#3.兩種輸出方式(echo,print)

後者print我還是比較熟悉的,前者是我新見。兩者主要的差別:echo 輸出的速度比 print 快, echo 沒有傳回值,print有傳回值1。

#4.EOF說明

EOF(heredoc)是一種在指令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程式語言(像Perl、PHP、Python和Ruby)裡定義一個字元串的方法。以 <<<EOF 開始标記開始,以 EOF 結束标記結束, 必須後接分号。結束辨別必須頂格獨自占一行(即必須從行首開始,前後不能銜接任何空白和字元)。

像這樣:

<?php
echo <<<EOF
        <h1>我的第一個标題</h1>
        <p>我的第一個段落。</p>
EOF;
// 結束需要獨立一行且前後不能空格
?>
           

結果是把裡面内容“原封不動”的儲存,不解析裡面任何的文法,隻當成一個純字元串。

#5.資料類型

String(字元串), Integer(整型), Float(浮點型), Boolean(布爾型), Array(數組), Object(對象), NULL(空值)。這些都是許多語言都有的,可以說是程式設計語言的基石。我們隻來看一下不一樣的即可。var_dump() 函數可傳回變量的資料類型和值。

像這樣:var_dump()不僅會把數組解析出類型和值,連數組裡面的都可以解析。

<?php 
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
           

結果:有點像字典,鍵值對的形式。

array(3) {
  [0]=>
  string(5) "Volvo"
  [1]=>
  string(3) "BMW"
  [2]=>
  string(6) "Toyota"
}
           

#6.類型比較

雖然是弱語言吧,但還是要差別比較。松散比較(),嚴格比較(=),松散隻比數值,嚴格既比數值,也比類型。

#7.常量

常量是全局的,它不像變量那樣作用域明顯,它可被函數内調用。

使用define()函數,例如define(“HELLO”,“world”),此時echo HELLO,就會輸出world

像這樣:這是對大小寫敏感的。

<?php
// 區分大小寫的常量名
define("GREETING", "歡迎通路 Runoob.com");
echo GREETING;    // 輸出 "歡迎通路 Runoob.com"
echo '<br>';
echo greeting;   // 輸出 "greeting"
?>
           

#8.字元串

并置運算符其實就是一個小數點,用于連接配接字元串。strlen()求字元串長度,strpos()查找第一個比對的字元串位置,這倆是常用的,更多的可以看PHP文檔。

#9.運算符

具備大多數語言所共有的,也有自加自減之些的運算符。比較運算符中 <>和!= 都是不相等的意思,!==是絕對不相等。三元運算符,自 PHP 5.3 起,可以省略三元運算符中間那部分。表達式 expr1 ?: expr3 在 expr1 求值為 TRUE 時傳回 expr1,否則傳回 expr3。

**注意:**PHP_EOL 是一個換行符,相容更大平台。

<?php
// 如果 $_GET['user'] 不存在傳回 'nobody',否則傳回 $_GET['user'] 的值
$username = $_GET['user'] ?? 'nobody';
// 類似的三元運算符
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
?>

           

還有一個太空梭操作符 <=> ,可能是長得像吧,哈哈,學名叫組合比較符,通過傳回的數來判斷大小。

  • 如果 $a > b ∗ ∗ , 則 ∗ ∗ b**, 則 ** b∗∗,則∗∗c 的值為 1。
  • 如果 $a == b ∗ ∗ , 則 ∗ ∗ b**, 則 ** b∗∗,則∗∗c 的值為 0。
  • 如果 $a < b ∗ ∗ , 則 ∗ ∗ b**, 則 ** b∗∗,則∗∗c 的值為 -1。

#.10if與else,switch

條件判斷嘛,就是不同的條件來執行不同的功能。

<?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!";
}
?>
           

輸出為have a good day,說明H大于等于10,小于20.

switch語句也很簡單,就是比一般的if,else語句更具體,但有一點還是比較特别的。

像這樣:

<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
    echo "你喜歡的顔色是紅色!";
    break;
case "blue":
    echo "你喜歡的顔色是藍色!";
    break;
case "green":
    echo "你喜歡的顔色是綠色!";
    break;
default:
    echo "你喜歡的顔色不是 紅, 藍, 或綠色!";
}
?
           

上面的例子,答案很顯而易見,會輸出“你喜歡的顔色是紅色”,然後就結束了,這是因為有break在起作用,若去掉break,則會一直向下運作直到遇見break才停下來。

#11.數組

數組是一個能在單個變量中存儲多個值的特殊變量。count()可獲得數組長度。

  • 數值數組 - 帶有數字 ID 鍵的數組
  • 關聯數組 - 帶有指定的鍵的數組,每個鍵關聯一個值,有點像字典
  • 多元數組 - 包含一個或多個數組的數組

周遊一般數組:循環下标取出。

<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
 
for($x=0;$x<$arrlength;$x++)
{
    echo $cars[$x];
    echo "<br>";
}
?>
           

周遊關聯數組(字典):友善的取出 鍵 與 值。

<?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() - 根據關聯數組的鍵,對數組進行降序排列

#12.循環

  • while - 隻要指定的條件成立,則循環執行代碼塊
  • do…while - 首先執行一次代碼塊,然後在指定的條件成立時重複這個循環
  • for - 循環執行代碼塊指定的次數
  • foreach - 根據數組中每個元素來循環代碼塊

#13.強大的函數

PHP真正的威力在于它的函數,超過1000個函數供你使用。有參數,也有傳回值。

  • 函數的名稱應該提示出它的功能
  • 函數名稱以字母或下劃線開頭(不能以數字開頭)

#14.魔術常量

雖說是常量,但他們的值是随着他們的位置改變的。

LINE 檔案中的目前行号。
FILE 檔案的完整路徑和檔案名。
DIR 檔案所在目錄。
FUNCTION 傳回該函數被定義時的名字(區分大小寫)。
CLASS 傳回類的名字。
TRAIT Trait 的名字,優先順序是目前類中的方法會覆寫 trait 方法,而 trait 方法又覆寫了基類中的方法。
METHOD 類的方法名。
NAMESPACE 目前命名空間的名稱(區分大小寫)。

#15.命名空間

PHP 命名空間可以解決以下兩類問題:

  1. 使用者編寫的代碼與PHP内部的類/函數/常量或第三方類/函數/常量之間的名字沖突。
  2. 為很長的辨別符名稱(通常是為了緩解第一類問題而定義的)建立一個别名(或簡短)的名稱,提高源代碼的可讀性。下面的例子就能展現這一點。
<?php 
//建立空間Blog
namespace Blog;
class Comment { }
//非限定名稱,表示目前Blog空間
//這個調用将被解析成 Blog\Comment();
$blog_comment = new Comment();


//限定名稱,表示相對于Blog空間
//這個調用将被解析成 Blog\Article\Comment();
$article_comment = new Article\Comment(); //類前面沒有反斜杆\


//完全限定名稱,表示絕對于Blog空間
//這個調用将被解析成 Blog\Comment();
$article_comment = new \Blog\Comment(); //類前面有反斜杆\

//完全限定名稱,表示絕對于Blog空間
//這個調用将被解析成 Blog\Article\Comment();
$article_comment = new \Blog\Article\Comment(); //類前面有反斜杆\

//建立Blog的子空間Article
namespace Blog\Article;
class Comment { }
?>
           

#16.對象

在oop(object-oriented programming 面向對象程式設計)中,對象是一個類的執行個體化,類中的屬性和方法,都在執行個體化後賦予了對象。這裡面的多态,繼承,封裝什麼的,和Java一馍馍一樣。析構函數與構造函數的功能正好相反,他是用來處理“清理善後”的工作。

這些就是PHP最基礎的了,其實我感覺至少有三分之一,甚至更多,都是和java,c,py相似的,是以學下來也不是很難,當然,也可能是我學的不精,嘿嘿,接下來還有

PHP表單,PHPMysql,進階,PHP與ajax,其他擴充。

先來看看PHP表單吧!

php