基於菜鳥教程的 php 學習總結

PHP 超級全局變量php

  • $GLOBALS

在函數內調用函數外定義的全局變量,咱們須要在函數中的變量前加上 global 關鍵字:html

<?php
$x=5;
$y=10;

function myTest(){
    global $x,$y;
    $y=$x+$y;
}
 
myTest();
echo $y; // 輸出 15
?>

PHP 將全部全局變量存儲在一個名爲 $GLOBALS[index] 的數組中。 index 保存變量的名稱。這個數組能夠在函數內部訪問,也能夠直接用來更新全局變量。mysql

上面的實例能夠寫成這樣:sql

function myTest(){
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}

訪問: http://www.runoob.com/php/php-superglobals.html數據庫

常見輸出語句express

echo(): 能夠一次輸出多個值,多個值之間用逗號分隔。echo是語言結構(language construct),而並非真正的函數,所以不能做爲表達式的一部分使用,能夠不加括號。輸出的速度比 print 快。數組

print(): 函數print()打印一個值(它的參數),若是字符串成功顯示則返回true,不然返回false。能夠不加括號。服務器

print_r(): 能夠把字符串和數字簡單地打印出來,而數組則以括起來的鍵和值得列表形式顯示,並以Array開頭。但print_r()輸出布爾值和NULL的結果沒有意義,由於都是打印"\n"。所以用var_dump()函數更適合調試。cookie

var_dump(): 判斷一個變量的類型與長度,並輸出變量的數值,若是變量有值輸的是變量的值並回返數據類型。此函數顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,經過縮進顯示其結構。session

數據類型

String(字符串), Integer(整型), Float(浮點型), Boolean(布爾型), Array(數組), Object(對象), NULL(空值)。

PHP 常量

一個常量由英文字母、下劃線、和數字組成,但數字不能做爲首字母出現。 (常量名不須要加 $ 修飾符)。

注意: 常量在整個腳本中均可以使用。

設置常量,使用 define() 函數,函數語法以下:

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

該函數有三個參數:

  • name:必選參數,常量名稱,即標誌符。
  • value:必選參數,常量的值。
  • case_insensitive :可選參數,若是設置爲 TRUE,該常量則大小寫不敏感。默認大小寫敏感。

也能夠用

const constant = '常量值';

const 和 define 定義常量的區別
     使用const使得代碼簡單易讀,const自己就是一個語言結構,而define是一個函數。另外const在編譯時要比define快不少。

  1. const用於類成員變量的定義,一經定義,不可修改。Define不能夠用於類成員變量的定義,可用於全局常量。
  2. Const可在類中使用,define不能
  3. Const不能再條件語句中定義常量

PHP 字符串相關

  • 並置運算符 (.) 用於把兩個字符串值鏈接起來。
  • strlen() 函數返回字符串的長度(字符數)。 注意:
    echo strlen("中文字符");   // 輸出 12
    輸出結果爲 12,由於一箇中文佔 3 個字符數。 能夠使用 mb_strlen 設置指定編碼輸出中文字符個數:
    echo mb_strlen("中文字符",'utf-8');  // 輸出 4
  • strpos() 函數用於在字符串內查找一個字符或一段指定的文本。若是在字符串中找到匹配,該函數會返回第一個匹配的字符位置。若是未找到匹配,則返回 FALSE。
  • mb_substr()  比 substr 多一個參數,用來指定字符串編碼。可實現截取中文字符串無亂碼
    mb_substr($str, 0, 1, 'gbk'); //

     

更多string 函數訪問:http://www.runoob.com/php/php-ref-string.html

PHP 關聯數組

兩種建立關聯數組的方法:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

or:

$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

遍歷並打印關聯數組中的全部值,能夠使用 foreach 循環

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value){
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

foreach 兩種語法格式

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

數組參考手冊:http://www.runoob.com/php/php-ref-array.html

魔術變量

  • __LINE__( 文件中的當前行號。 )
  • __FILE__ ( 文件的完整路徑和文件名。若是用在被包含文件中,則返回被包含的文件名。)
  • __DIR__ ( 文件所在的目錄。若是用在被包括文件中,則返回被包括的文件所在的目錄。 )
  • __FUNCTION__
  • __CLASS__
  • __METHOD__
  • __ NAMESPACE __
  • __TRAIT__( 實現了代碼複用的一個方法 )
<?php
class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
 
trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
 
class MyHelloWorld extends Base {
    use SayWorld;
}
 
$o = new MyHelloWorld();
$o->sayHello();
?>

以上例程會輸出:

Hello World!

從基類繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆蓋。其行爲 MyHelloWorld 類中定義的方法一致。優先順序是當前類中的方法會覆蓋 trait 方法,而 trait 方法又覆蓋了基類中的方法。

PHP 命名空間

能夠解決如下兩類問題:

  1. 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。
  2. 爲很長的標識符名稱(一般是爲了緩解第一類問題而定義的)建立一個別名(或簡短)的名稱,提升源代碼的可讀性。

建議使用下面的大括號形式的語法

<?php
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}

namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>

訪問: http://www.runoob.com/php/php-namespace.html

PHP 面向對象

主要三個特性: 封裝, 繼承,多態  

定義:

class Site {
  /* 成員變量 */
  var $url;
  var $title;
  
  /* 構造函數 */
  function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
  }

  /* 成員函數 */
  function setUrl($par){
     $this->url = $par;
  }
  
  /* 析構函數 */
  function __destruct() {
     print "銷燬 " . $this->name . "\n";
  }
}

調用

$runoob = new Site;
$runoob->setUrl( 'www.runoob.com' );
// 或者
$runoob = new Site('www.runoob.com', '菜鳥教程');

繼承: PHP 使用關鍵字 extends 來繼承一個類,PHP 不支持多繼承

注意: 若是子類重寫了父類的公有方法,並定義爲私有,則會報錯

           若是子類重寫了父類的私有方法,並定義爲公有,則可正常運行

Final 關鍵字

PHP 5 新增了一個 final 關鍵字。若是父類中的方法被聲明爲 final,則子類沒法覆蓋該方法。若是一個類被聲明爲 final,則不能被繼承。

調用父類構造方法

PHP 不會在子類的構造方法中自動的調用父類的構造方法。要執行父類的構造方法,須要在子類的構造方法中調用 parent::__construct()

class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();  // 子類構造方法不能自動調用父類的構造方法
       print "SubClass 類中構造方法" . PHP_EOL;
   }
}

PHP 重載

php是弱類型語言,並無像JAVA這種強類型語言同樣有重載。
重載通常來講就是擁有相同的函數名或方法名,可是參數列表卻不一樣(包括參數個數和參數類型)。 可是沒有並不意味着不能實現。php 有四種機制能夠實現重載。

參考: http://blog.csdn.net/whd526/article/details/70239791

官網參考: http://php.net/manual/zh/language.oop5.overloading.php

PHP 包含文件

include 和 require 除了處理錯誤的方式不一樣以外,在其餘方面都是相同的:

  • require 生成一個致命錯誤(E_COMPILE_ERROR),在錯誤發生後腳本會中止執行。
  • include 生成一個警告(E_WARNING),在錯誤發生後腳本會繼續執行。

COOKIE 和 SESSION

Session 的工做機制是:爲每一個訪客建立一個惟一的 id (UID),並基於這個 UID 來存儲變量。UID 存儲在 cookie 中,或者經過 URL 進行傳導。

在生成的 COOKIE 中會存在 key 爲 PHPSESSID 的值,該值與 session_id() 一致,可經過該 cookie 值獲取相關 session。

$sessionId = $_COOKIE['PHPSESSID'];
 session_id($sessionId);
 session_start();
 var_dump($_SESSION);

HTTP 狀態碼

常見的HTTP狀態碼:

  • 200 - 請求成功
  • 301 - 資源(網頁等)被永久轉移到其它URL
  • 404 - 請求的資源(網頁等)不存在
  • 500 - 內部服務器錯誤

更多: http://www.runoob.com/http/http-status-codes.html

@ 運算符屏蔽錯誤提示

 經常使用函數

        mysqli_select_db($con,"test");        // 選擇數據庫         mysqli_set_charset($con, "utf8");     // 設置編碼,防止中文亂碼         isset()函數 通常用來檢測變量是否設置

相關文章
相關標籤/搜索