程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP快速教程,PHP教程

PHP快速教程,PHP教程

編輯:關於PHP編程

PHP快速教程,PHP教程


1.本文主要針對有C語言(或其他編程語言)基礎的人快速學習PHP的,所以不會對一些基礎知識作過多解釋,比如“=”是賦值不是等於。
2.本文適合已學過一門編程語言,想要快速入門PHP的人。
3.基本上看完本文即可入門,可以動手實踐或是進階。


簡介

PHP是Hypertext Preprocessor(超文本預處理器)的遞歸縮寫。
這是一種特別適合網頁開發的服務器端腳本語言。
它是運行在服務器上的腳本,因此不能直接用浏覽器打開.php腳本,需要服務器解析後發送給浏覽器才能查看網頁內容。因此要在浏覽器裡輸入地址訪問.php文件,然後服務器解析後發送給浏覽器解析後的Html,才能查看網頁內容。
如果要在自己電腦上運行.php文件,需要先搭建配置服務器環境,初學者可以使用集成服務器組件,比如XAMPP,下載地址:https://www.apachefriends.org/zh_cn/index.html
這部分不作過多介紹,大家可以去百度。

語法

標記

PHP可以內嵌在Html文檔中的任何位置。
PHP 腳本以<?php 開頭,以 ?> 結尾。
例:

<!DOCTYPE html>
<html>
<body>

<h1>我的第一張 PHP 頁面</h1>

<?php
echo 'Hello World!';  // 輸出 Hello World!
?>

</body>
</html>

注釋

PHP支持C、C++、Perl三種風格的注釋:

<?php
    echo 'This is a test'; // This is a one-line c++ style comment
    /* This is a multi line comment
       yet another line of comment */
    echo 'This is yet another test';
    echo 'One Final Test'; # This is a one-line shell-style comment
?>

大小寫敏感

PHP只有變量大小寫敏感。
所有用戶定義的函數、類和關鍵詞(例如 if、else、echo 等等)都對大小寫不敏感。

變量

  • PHP變量以$符號開頭。

  • PHP是弱類型語言,無需聲明類型。

  • PHP變量名稱大小寫敏感。

作用域

  • 函數之外聲明的變量擁有 Global 作用域,只能在函數以外進行訪問

  • 函數內部聲明的變量擁有 LOCAL 作用域,只能在函數內部進行訪問。
    例:

<?php
$x=5; // 全局作用域

function myTest() {
  $y=10; // 局部作用域
  echo "<p>測試函數內部的變量:</p>";
  echo "變量 x 是:$x";    // 輸出 變量x是:
  echo "<br>";
  echo "變量 y 是:$y";    // 輸出 變量y是:10
} 

myTest();

echo "<p>測試函數之外的變量:</p>";
echo "變量 x 是:$x";      // 輸出 變量x是:5
echo "<br>";
echo "變量 y 是:$y";      // 輸出 變量y是:
?>
  • 在函數內訪問Global變量使用global關鍵字。
    例:

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

function myTest() {
  global $x,$y;
  $y=$x+$y;
}

myTest();
echo $y; // 輸出 15
?>
  • 也可以使用$GLOBALS超全局變量訪問全局變量:
    例:

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

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

myTest();
echo $y; // 輸出 15
?>
  • static關鍵字聲明靜態變量。
    當函數完成/執行後,不會刪除靜態變量。

超全局變量

超全局變量 在 PHP 4.1.0 中引入,是在全部作用域中始終可用的內置變量。在函數或方法中無需執行 global $variable; 就可以訪問它們。

$GLOBALS— 引用全局作用域中可用的全部變量
$_SERVER— 服務器和執行環境信息
$_REQUEST— HTTP Request 變量
$_POST— HTTP POST 變量
$_GET— HTTP GET 變量
$_FILES— HTTP 文件上傳變量
$_ENV— 環境變量
$_COOKIE— HTTP Cookies
$_SESSION— Session 變量

官方文檔

可變變量

可變變量是一種獨特的變量,它允許動態改變一個變量名稱。其工作原理是,該變量的名稱由另外一個變量的值來確定。
例:

<?php
$a = 'hello';
$$a = 'world';
?>

以上代碼定義了兩個變量,$a='hello',$hello='world'。
官方文檔

輸出

在 PHP 中,有兩種基本的輸出方法:echo 和 print。

  • echo - 能夠輸出一個以上的字符串

  • print - 只能輸出一個字符串,並始終返回 1

  • echo 比 print 稍快,因為它不返回任何值

echo & print

  • echo 是一個語言結構,有無括號均可使用:echo 或 echo()。

  • print 也是語言結構,有無括號均可使用:print 或 print()。

數據類型

字符串、整數、浮點數、布爾、數組、對象、NULL。

字符串

  • PHP字符串可以用單引號也可以用雙引號。

  • 單引號和雙引號的區別是:雙引號會解析裡面的變量和轉義字符,而單引號不會,單引號裡的字符僅僅只有\(反斜槓)和'(單引號本身)需要轉義:


$str='Hello';
echo 'I\'ll say $str\n';
// 輸出 I'll say $str\n
echo "I\'ll say $str\n";
// 輸出 I'll say Hello 

?>
  • 建議使用單引號表示字符串,除非需要解析裡面的變量。

heredoc & nowdoc
需要表示特別長的字符串的時候,可以使用heredoc和nowdoc語法,heredoc和nowdoc語法的區別相當於雙引號和單引號的區別。


/*heredoc 語法
 1. 由<<<標記名......標記名包圍組成
 2. 開始標記和結束標記名稱要一致
 3. 結束標記必須頂格寫
 4. 主體部分,會自動解析變量和轉義字符
 5. 但是函數、操作符和引號則不會被解析
*/
$str = 'hello world';
echo <<
    
    
    Hello World
    
    
        $str
    
             
HTML;
 
?>
<?php 
/*nowdoc 語法
 1. 區別就是開始標記名要加單引號,但結束標記名不要加單引號
 2. 主體部分的變量和轉義字符不會被解析
*/
echo <<<'HTML'
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
        <p>hello world</p>
    </body>
    </html>     
HTML;
 
?>
  • heredoc和nowdoc特別適合輸出很長的HTML文檔,比直接以字符串的形式輸出要容易閱讀得多。

數組

PHP數組其實一組鍵值對(key/value)。
創建數組:

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

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

也可以不指定鍵值(key),那麼默認的索引就是從0開始的有序數字:

$cars=array("Volvo","BMW","SAAB",6=>"Audi","Daewoo");

相當於:

$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";
$cars[6]="Audi";
$cars[7]="Daewoo";

遍歷數組:

<?php
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");

foreach($age as $x=>$x_value) {
  echo "Key=" . $x . ", Value=" . $x_value;
  echo "<br>";
}
?>

當然也可以用for循環,count()返回數組元素個數:

<?php
$cars = array("Volvo", "BMW", "Toyota");
$arrlength = count($cars);

for($x = 0; $x < $arrlength; $x++) {
    echo $cars[$x];
    echo "<br>";
}
?>

常量

常量是一個固定值的標識符。
有效的常量名以字符或下劃線開頭(常量名稱前面沒有 $ 符號)。
常量默認是大小寫敏感的。
通常,常量全部使用大寫字母。
與變量不同,常量貫穿整個腳本是自動全局的。
使用 define() 函數設置常量:

<?php
define("FOO","something");
echo FOO;
?>

運算符

加減乘除取余,自加自減和C語言一樣。
連接兩個字符串用“.”。

$str='and';
$str='something'.$str;  // somethingand

比較運算符

和C語言基本相同,不同之處:


// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
 
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
 
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
 
// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
 
// Objects
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 0
 
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; // -1
 
$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1
 
// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 1
?>

邏輯運算符

基本和C語言一樣,不同之處:

流程控制

函數

和弱類型語言JavaScript語法差不多,以function關鍵字開頭,執行可以在定義的前面:

function function_name(){
// TODO:
}
  • 參數可以有默認值


function setHeight($minheight=50) {
  echo "The height is : $minheight ";
}

setHeight(350);
setHeight(); // 將使用默認值 50
setHeight(135);
setHeight(80);
?>
  • 參數可以使用引用傳遞,從而形參和實參指向同一塊內存:


$x=1;
$y=2;
function exchange(&$x,&$y){
    $temp=$x;
    $x=$y;
    $y=$temp;
}
exchange($x,$y);
// $x,$y的值被交換了
// 調用函數的時候參數前面不要加&
?>
  • 函數可以返回引用,如果要返回引用,函數聲明時要加&,將返回的引用賦值給一個變量時也要加&:


function &test()
{
    static $b=0;//申明一個靜態變量
    $b=$b+1;
    echo $b;
    return $b;
}

$a=test();//這條語句會輸出 $b的值 為1
$a=5;
$a=test();//這條語句會輸出 $b的值 為2

$a=&test();//這條語句會輸出 $b的值 為3
$a=5;
$a=test();//這條語句會輸出 $b的值 為6
?>

文件包含

requireinclude可以將 PHP 文件的內容插入另一個 PHP 文件(在服務器執行它之前)。
包含可用於創建可在多個頁面重復使用的函數、頁眉、頁腳或元素。
語法,加上文件名即可,或者加上括號:

require 'file.php';
require ('file.txt');
include 'file.txt';
include ('file.php');

區別:

  • 錯誤處理不同,require 會生成致命錯誤(E_COMPILE_ERROR)並停止腳本,include 只生成警告(E_WARNING),並且腳本會繼續

  • 使用彈性不同,require通常放在PHP程序的最前面,PHP程序在執行前會先讀入require所指定引入的檔案,使它變成程序網頁的一部分;include通常放在流程控制處理中,PHP程序讀到include的檔案時,才將它讀進來。

require_once()和include_once()

和require、include的區別就是:如果該文件中的代碼已經被包括了,則不會再次包括。

面向對象


class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>
  • 類使用 class 關鍵字後加上類名定義。

  • 類名後的一對大括號({})內可以定義變量和方法。

  • 類的變量使用 var 來聲明, 變量也可以初始化值。

  • 函數定義類似 PHP 函數的定義,但函數只能通過該類及其實例化的對象訪問。
    栗子:


/**
 * Define MyClass
 */
class MyClass
{
    // 聲明一個公有的構造函數
    public function __construct() { }

    // 聲明一個公有的方法
    public function MyPublic() { }

    // 聲明一個受保護的方法
    protected function MyProtected() { }

    // 聲明一個私有的方法
    private function MyPrivate() { }

    // 此方法為公有
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 這行能被正常執行
$myclass->MyProtected(); // 這行會產生一個致命錯誤
$myclass->MyPrivate(); // 這行會產生一個致命錯誤
$myclass->Foo(); // 公有,受保護,私有都可以執行


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 此方法為公有
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 這行會產生一個致命錯誤
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 這行能被正常執行
$myclass2->Foo2(); // 公有的和受保護的都可執行,但私有的不行

class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }

    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}

class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>
  • 構造函數是名為__construct的函數,它有兩個下劃線

  • 析構函數是名為__destruct的函數,它有兩個下劃線

  • 默認訪問權限是public。

  • 使用->訪問類的成員。

  • parent關鍵字表示父類。

  • final關鍵字表示該函數不能重載。

  • static修飾的方法和屬性可以不實例化就訪問。

  • abstract關鍵字修飾抽象類,抽象類不能實例化。

實戰與提高

這部分以後再寫吧。
讀到這裡語法基本就已掌握,可以進行一些實戰了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved