PHP 變量做用域
變量的做用域是腳本中變量可被引用/使用的部分。
PHP 有四種不一樣的變量做用域:
- local
- global
- static
- parameter
變量:內部函數變量訪問全局變量的時候須要添加global:
例子:
<?php
$x=10;
$y=23;
function add(){
global $x,$y;
$y=$x+$y;
}
add();
echo $y;
?>
Static 做用域
當一個函數完成時,它的全部變量一般都會被刪除。然而,有時候您但願某個局部變量不要被刪除。
要作到這一點,請在您第一次聲明變量時使用 static 關鍵字:
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
而後,每次調用該函數時,該變量將會保留着函數前一次被調用時的值。
註釋:該變量仍然是函數的局部變量。
PHP echo 和 print 語句
echo 和 print 區別:
- echo - 能夠輸出一個或多個字符串
- print - 只容許輸出一個字符串,返回值總爲 1
提示:echo 輸出的速度比 print 快, echo 沒有返回值,print有返回值1。
PHP 5 數據類型
string(字符) integer(整型) float(浮點型) boolean(布爾值) array(數組) object(對象) null(空值)
數組:
<?php
$array=array("zzh",'gavin','henry');
var_dump($array);
var_dump() 函數返回數組的數據類型和值:
?>
PHP 5 常量
常量值被定義後,在腳本的其餘任何地方都不能被改變。
設置 PHP 常量
設置常量,使用 define() 函數,函數語法以下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
該函數有三個參數:
- name:必選參數,常量名稱,即標誌符。
- value:必選參數,常量的值。
- case_insensitive :可選參數,若是設置爲 TRUE,該常量則大小寫不敏感。默認是大小寫敏感的。
<?php
define("gavin","welcome to here",true);
echo GAVIN;
?>
參數說明:1:常量的名稱是gavin 2:常量的值是 welcome to here 3:最後一個值是用來設置需不須要區分大小寫,若是不填寫就是區分,填寫true的話就是不區分。
注意:常量是全局變量,在函數內能夠直接訪問變量。
PHP 並置運算符
在 PHP 中,只有一個字符串運算符。
並置運算符 (.) 用於把兩個字符串值鏈接起來。
下面的實例演示瞭如何將兩個字符串變量鏈接在一塊兒:
<?php
$text1="hello";
$text2="word";
echo $text1.$text2;
?>
兩個字符串類型的變量,拼接到一塊兒,使用「.」進行拼接。
PHP strlen() 函數
有時知道字符串值的長度是頗有用的。
strlen() 函數返回字符串的長度(字符數)。
$text="thanks fot you coming here.";
echo strlen("$text");
PHP strpos() 函數
strpos() 函數用於在字符串內查找一個字符或一段指定的文本。
若是在字符串中找到匹配,該函數會返回第一個匹配的字符位置。若是未找到匹配,則返回 FALSE。
echo strpos("hello word","ttt");
若是找到文本里有的就會返回他在文本中的位置,若是沒有的話就返回false。
PHP 邏輯運算符
x and y 與 x or y 或 x xor y 非
x && y 與 x||y 或 !x 非
PHP 數組運算符
x <> y |
不相等 |
若是 x 不等於 y,則返回 true |
//三元運算符
//$a=10;
//echo $a==3?"sure":"not";
獲取數組的長度 - count() 函數
$array=array("h","e","l","l","o");
echo count($array);
PHP 關聯數組 key=》value
$age=array("gavin"=>"23","ivy"=>"30","alex"=>"14");
echo $age['gavin'];
遍歷數組:
$age=array("gavin"=>"23","ivy"=>"30","alex"=>"14");
//echo $age['gavin'];
foreach($age as $x=>$x_value){
echo "name".$x.""."age".$x_value;
echo "</br>";
}
原理:有一個數組a 裏面有不少數據,都是以鍵=》值得形式存貯,咱們能夠利用foreach循環進行遍歷,方式寫法以下。
foreach(定義的數組 as $x=>$x_value){
輸出值的形式$x =>值 $x_value;
}
PHP - 數組排序函數
- sort() - 對數組進行升序排列
- rsort() - 對數組進行降序排列
- asort() - 根據關聯數組的值,對數組進行升序排列
- ksort() - 根據關聯數組的鍵,對數組進行升序排列
- arsort() - 根據關聯數組的值,對數組進行降序排列
- krsort() - 根據關聯數組的鍵,對數組進行降序排列
PHP 超級全局變量
PHP中預約義了幾個超級全局變量(superglobals) ,這意味着它們在一個腳本的所有做用域中均可用。 你不須要特別說明,就能夠在函數及類中使用。
PHP 超級全局變量列表:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
PHP $_SERVER
$_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由 Web 服務器建立。不能保證每一個服務器都提供所有項目;服務器可能會忽略一些,或者提供一些沒有在這裏列舉出來的項目。
如下實例中展現瞭如何使用$_SERVER中的元素:
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
$_SERVER['PHP_SELF'] |
當前執行腳本的文件名,與 document root 有關。例如,在地址爲 http://example.com/test.php/foo.bar 的腳本中使用 $_SERVER['PHP_SELF'] 將獲得 /test.php/foo.bar。__FILE__ 常量包含當前(例如包含)文件的完整路徑和文件名。 從 PHP 4.3.0 版本開始,若是 PHP 以命令行模式運行,這個變量將包含腳本名。以前的版本該變量不可用。 |
$_SERVER['GATEWAY_INTERFACE'] |
服務器使用的 CGI 規範的版本;例如,"CGI/1.1"。 |
$_SERVER['SERVER_ADDR'] |
當前運行腳本所在的服務器的 IP 地址。 |
$_SERVER['SERVER_NAME'] |
當前運行腳本所在的服務器的主機名。若是腳本運行於虛擬主機中,該名稱是由那個虛擬主機所設置的值決定。(如: www.runoob.com) |
$_SERVER['SERVER_SOFTWARE'] |
服務器標識字符串,在響應請求時的頭信息中給出。 (如:Apache/2.2.24) |
$_SERVER['SERVER_PROTOCOL'] |
請求頁面時通訊協議的名稱和版本。例如,"HTTP/1.0"。 |
$_SERVER['REQUEST_METHOD'] |
訪問頁面使用的請求方法;例如,"GET", "HEAD","POST","PUT"。 |
$_SERVER['REQUEST_TIME'] |
請求開始時的時間戳。從 PHP 5.1.0 起可用。 (如:1377687496) |
$_SERVER['QUERY_STRING'] |
query string(查詢字符串),若是有的話,經過它進行頁面訪問。 |
$_SERVER['HTTP_ACCEPT'] |
當前請求頭中 Accept: 項的內容,若是存在的話。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] |
當前請求頭中 Accept-Charset: 項的內容,若是存在的話。例如:"iso-8859-1,*,utf-8"。 |
$_SERVER['HTTP_HOST'] |
當前請求頭中 Host: 項的內容,若是存在的話。 |
$_SERVER['HTTP_REFERER'] |
引導用戶代理到當前頁的前一頁的地址(若是存在)。由 user agent 設置決定。並非全部的用戶代理都會設置該項,有的還提供了修改 HTTP_REFERER 的功能。簡言之,該值並不可信。) |
$_SERVER['HTTPS'] |
若是腳本是經過 HTTPS 協議被訪問,則被設爲一個非空的值。 |
$_SERVER['REMOTE_ADDR'] |
瀏覽當前頁面的用戶的 IP 地址。 |
$_SERVER['REMOTE_HOST'] |
瀏覽當前頁面的用戶的主機名。DNS 反向解析不依賴於用戶的 REMOTE_ADDR。 |
$_SERVER['REMOTE_PORT'] |
用戶機器上鍊接到 Web 服務器所使用的端口號。 |
$_SERVER['SCRIPT_FILENAME'] |
當前執行腳本的絕對路徑。 |
$_SERVER['SERVER_ADMIN'] |
該值指明瞭 Apache 服務器配置文件中的 SERVER_ADMIN 參數。若是腳本運行在一個虛擬主機上,則該值是那個虛擬主機的值。(如:someone@runoob.com) |
$_SERVER['SERVER_PORT'] |
Web 服務器使用的端口。默認值爲 "80"。若是使用 SSL 安全鏈接,則這個值爲用戶設置的 HTTP 端口。 |
$_SERVER['SERVER_SIGNATURE'] |
包含了服務器版本和虛擬主機名的字符串。 |
$_SERVER['PATH_TRANSLATED'] |
當前腳本所在文件系統(非文檔根目錄)的基本路徑。這是在服務器進行虛擬到真實路徑的映像後的結果。 |
$_SERVER['SCRIPT_NAME'] |
包含當前腳本的路徑。這在頁面須要指向本身時很是有用。__FILE__ 常量包含當前腳本(例如包含文件)的完整路徑和文件名。 |
$_SERVER['SCRIPT_URI'] |
URI 用來指定要訪問的頁面。例如 "/index.html"。 |
PHP $_REQUEST
PHP $_REQUEST 用於收集HTML表單提交的數據。
如下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶經過點擊 "Submit" 按鈕提交表單數據時, 表單數據將發送至<form>標籤中 action 屬性中指定的腳本文件。 在這個實例中,咱們指定文件來處理表單數據。若是你但願其餘的PHP文件來處理該數據,你能夠修改該指定的腳本文件名。 而後,咱們可使用超級全局變量 $_REQUEST 來收集表單中的 input 字段數據:
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<meta lang="zh">
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
if($name==""){
echo "你沒有填寫數據";
}else{
echo $name;
}
?>
</body>
</html>
PHP $_POST
PHP $_POST 被普遍應用於收集表單數據,在HTML form標籤的指定該屬性:"method="post"。
如下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶經過點擊 "Submit" 按鈕提交表單數據時, 表單數據將發送至<form>標籤中 action 屬性中指定的腳本文件。 在這個實例中,咱們指定文件來處理表單數據。若是你但願其餘的PHP文件來處理該數據,你能夠修改該指定的腳本文件名。 而後,咱們可使用超級全局變量 $_POST 來收集表單中的 input 字段數據:
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<meta lang="zh">
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="info">
<input type="submit">
</form>
<?php
$name = $_POST['info'];
echo $name;
?>
</body>
</html>
PHP 命名空間(namespace)
PHP 命名空間(namespace)是在PHP 5.3中加入的,若是你學過C#和Java,那命名空間就不算什麼新事物。 不過在PHP當中仍是有着至關重要的意義。
PHP 命名空間能夠解決如下兩類問題:
- 用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字衝突。
- 爲很長的標識符名稱(一般是爲了緩解第一類問題而定義的)建立一個別名(或簡短)的名稱,提升源代碼的可讀性。
理解:和閉包差很少,就是把本身的東西裝進本身的口袋,有不少我的,你要是想用別人口袋裏的東西,你就要先找到這我的,而後再借他口袋裏的東西。
命名空間使用
PHP 命名空間中的類名能夠經過三種方式引用:
- 非限定名稱,或不包含前綴的類名稱,例如 $a=new foo(); 或 foo::staticmethod();。若是當前命名空間是 currentnamespace,foo 將被解析爲 currentnamespace\foo。若是使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,則 foo 會被解析爲foo。 警告:若是命名空間中的函數或常量未定義,則該非限定的函數名稱或常量名稱會被解析爲全局函數名稱或常量名稱。
- 限定名稱,或包含前綴的名稱,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。若是當前的命名空間是 currentnamespace,則 foo 會被解析爲 currentnamespace\subnamespace\foo。若是使用 foo 的代碼是全局的,不包含在任何命名空間中的代碼,foo 會被解析爲subnamespace\foo。
- 徹底限定名稱,或包含了全局前綴操做符的名稱,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在這種狀況下,foo 老是被解析爲代碼中的文字名(literal name)currentnamespace\foo。
PHP 面向對象
在面向對象的程序設計(英語:Object-oriented programming,縮寫:OOP)中,對象是一個由信息及對信息進行處理的描述所組成的總體,是對現實世界的抽象。
在現實世界裏咱們所面對的事情都是對象,如計算機、電視機、自行車等。
對象的主要三個特性:
- 對象的行爲:能夠對 對象施加那些操做,開燈,關燈就是行爲。
- 對象的形態:當施加那些方法是對象如何響應,顏色,尺寸,外型。
- 對象的表示:對象的表示就至關於身份證,具體區分在相同的行爲與狀態下有什麼不一樣。
class car
{//建立了一個汽車的類
var $name;
var $speed;
var $money;
function setName($n)
{
$this->name = $n;
}
function getName()
{
return $this->name . PHP_EOL;
}
function setSpeed($s)
{
$this->speed = $s;
}
function getSpeed()
{
return $this->speed . PHP_EOL;
}
function setMoney($m)
{
$this->money = $m;
}
function getMoney()
{
return $this->money . PHP_EOL;
}
}
//實例化類也叫建立對象
$golf = new car();
$golf->setName("golf");
$golf->setSpeed("400cc");
$golf->setMoney("150k");
echo "這輛車叫" . $golf->getName() . " " . "最高時速是" . $golf->getSpeed() . " " . "市場價格是" . $golf->getMoney();
PHP 構造函數
構造函數 ,是一種特殊的方法。主要用來在建立對象時初始化對象, 即爲對象成員變量賦初始值,總與new運算符一塊兒使用在建立對象的語句中。
//構造函數
public function __construct($name,$speed,$money)
{
$this->name=$name;
$this->speed=$speed;
$this->money=$money;
}
echo "asd";//字符串
echo "ads$c";//字符串+變量
echo 'ads$c';//字符串 asd$c $c不是變量
echo "sd"."vs";
echo "sd","vs";
echo $a;
echo $a.$b;
echo $a,$b;
echo $a.$b.$c;
echo $a,$b,$c;
echo "kaskd{$c}asd";
echo "kakskd{$arr['lo']}";
echo "kakskd{$obj->a}";
echo "kaskd".$c."kasd";
echo "kaskd".$arr['lo']."kasd";
echo "kaskd".$obj->a."kasd";
echo "kaskd".func($c)."kasd";
echo "kaksk".($a+1)."dkkasd";
echo $c."jaksd";
echo $c,"jaksd";
//php多行輸出方法
echo <<<END
This uses the "here document" syntax to output
END;
//輸出簡寫
<?php echo $a;?> <?=$a?>
關於php錯誤報告的相關技巧
<?php
//禁用錯誤報告
error_reporting(0);
//報告運行時錯誤
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//報告全部錯誤
error_reporting(E_ALL);
?>
PHP可變函數:
function say($name){
if($name==null){
echo "you have to input you name";
}else{
echo $name;
}
}
$funs='say';
$funs();
思路就是讓一個動態的變量來對應函數的名稱,而後就能夠動態的利用這個函數的名稱來調用相應的函數。