二、PHP基礎
阿新 • • 發佈:2018-11-22
1.資料型別
String,Integer,Float,Boolean,Array(陣列),Object(物件),NULL(空值)
2.PHP語法
- 第一個例項
<?php
$str="Hello world!"; //宣告一個字串變數$str
echo $str; //輸出變數$str
?>
//Hello world!
PHP7中,含有十六進位制字元的字串不再被視為數字,而是普通的字串
- 運算子
+ - * / % ++ -- == === != > < && || (a>b)? c:d += -= << >>
- 字串連線符:
.(英文字元"點")
- PHP7新增運算子:
intdiv(x,y)
–> x 除以y的商的整數部分,如intdiv(10,3)的值為3
x<=>y
--> 如果x和y值相等(不是恆等於),返回0;x>y,返回1;x<y,返回-1
3.變數
- 宣告變數
/*
1.php中變數以$開頭,後面跟著變數名
2.php是弱型別語言,無須宣告變數型別
*/
$a="Yeah!"; //聲明瞭一個字串變數a
$b=123; //聲明瞭數值變數b
$c="123";
var_dump($b==$c); //true
var_dump($b===$c); //false
- 變數作用域
全域性變數、區域性變數
- php中有4種不同的變數作用域:
local、global、static、parameter
- 一般來說,函式內部的是
區域性變數
,且函式內部不能訪問
外部的全域性變數;同理,外部也不能訪問函式內部的區域性變數。若是要在函式內部訪問,則要使用global
關鍵字宣告:
<?php
$x=10; //全域性變數
function my(){
$y=20; //區域性變數
echo "x1=".$x ; //x1=
echo "y1=".$y; //y1=20
}
my(); //呼叫my()
echo "x2=".$x; //x2=10
echo "y2=".$y; //y2=
?>
<?php
$x=10;
function my(){
echo "x=".$x; //x=
global $x; //獲取全域性變數$x
echo "x=".$x; //x=10
}
my();
?>
分析:在php中,全域性變數是儲存在$GLOBALS[index]中,index表示變數名。上面的程式碼也可以這麼寫:
<?php
$x=10;
function my(){
//global $x;
echo "x=".$GLOBALS['x']; //x=10
}
my();
?>
- 當一個函式完成後,它的所有變數通常都會被刪除,如果想要讓函式執行完畢後函式內的區域性變數保留,可以使用
static
關鍵字宣告:
<?php
function my(){
$i=1;
$i++;
echo "i=".$i;
echo "<br>";
}
my(); //i=2
my(); //i=2
?>
<?php
function my(){
static $i=1; //static
$i++;
echo "i=".$i;
echo "<br>";
}
my(); //i=2
my(); //i=3
?>
引數作用域
傳遞給函式的引數:
<?php
function my($area){
if($area>250)
echo "我家房子的面積是多少?".$area."m^2";
else
echo "輸入有誤!";
}
my(273);
?>
可變變數
允許動態地改變一個變數的名稱:
原理分析:$$a ==> $aa ==> bb
<?php
function my(){
$a="aa";
$aa="bb";
echo $$a; //bb
}
my();
?>
可變變數支援多級動態改變:
<?php
function my(){
$a="aa";
$aa="bb";
$bb="ccc";
$ccc="dddd";
$dddd="emmmm";
echo $$$$$a; //emmmm
}
my();
?>
4.常量
- 常量的宣告
(全域性作用域)
使用define(name,value)
定義,也可以使用const
在類定義之外
定義常量:
<?PHP
define("name", "張三");
const age="25";
echo name; //張三
echo age; //25
?>
注意:
- 常量前面沒有
$
符號 - 常量只能使用
define
和const
定義 - 常量的
作用域是全域性的
,即在任何地方都能使用
定義好的常量 - 常量不能被修改
- 常量的值是標量(不是向量)
- 預定義常量
(魔術常量)
PHP中有許多預定義
常量,也稱為魔術常量
,其中很多是由不同的擴充套件庫定義的,只有在載入了這些庫時才會出現
魔術常量(常見) | 描述 |
---|---|
_LINE_ |
檔案中的當前行號 |
_FILE_ |
檔案的完整路徑和檔名 |
_DIR_ |
檔案所在的目錄 |
_FUNCTION_ |
函式名稱 |
_CLASS_ |
類的名稱 |
_TRAIT_ |
trait的名字 |
_METHOD_ |
類的方法名 |
_NAMESPACE_ |
當前名稱空間的名稱 |
5.流程控制
- 條件控制
if、 switch
- 迴圈控制
while、 do...while、 for
- foreach
<?PHP
$arr = [1,2,3];
foreach($arr as $val){ //遍歷陣列
echo $val; // 1 2 3
echo "<br>";
}
foreach ($arr as $key => $value) { //遍歷陣列的鍵和值
echo $key."=>".$value; //0=>1 1=>2 2=>3
echo "<br>";
}
?>
在PHP7中,按照值進行迴圈時,foreach是對陣列的複製操作!!!
- 跳轉語句
break、continue
- 包含語句
include
include "a.php";
include_once
確保在執行期間,被包含的檔案只生效一次,防止重複定義
include_once 'a.php';
require、require_once
的作用相當於include、include_once
6.函式
- 基本形式
<?PHP
function add($sum1,$sum2){
return $sum1+$sum2;
}
echo add(7,3); //10
?>
- 引數
- 按值傳遞:
傳入函式的是引數的備份,即引數不會被改變!
<?PHP
function add($sum){
$sum +=2;
echo $sum;
}
$a=3;
add($a); //5
echo $a; //3
?>
- 通過引用傳遞:
引數的值會隨著函式而改變:
<?PHP
function add(&$sum){
$sum +=2;
echo $sum;
}
$a=3;
add($a); //5
echo $a; //5
?>
注意:
引用傳遞的引數必須是一個變數!!! 如下程式碼則會報錯:
<?PHP
function add(&$sum){
$sum +=2;
echo $sum;
}
//$a=3;
//add($a); //正確寫法
add(3); //引用傳遞的引數必須是一個變數
?>
- 預設引數
function add($arr=array('zhangsan','lisi'),$str='girl'){}
- 指定引數型別
function add(int $a,string $b){}
- 可變引數數量
在PHP5.6以後,引數可包含...
來表示函式可接受一個可變數量的引數,可變引數將會被當作一個陣列
傳遞給函式
<?PHP
function add(...$num){
$sum=0;
foreach ($num as $key => $value) {
$sum+=$value;
}
echo $sum;
//return $sum;
}
add(1,2,3); //6
add(1,2,3,4,5); //15
?>
- 閉包函式(匿名函式)
<?PHP
$m=function($name){
echo "Hello $name";
}; //特別注意,這裡要加上";"
$m("PHP");
?>
- 閉包函式從父作用域繼承變數,需要使用關鍵字
use
<?PHP
$message='hello';
//沒有use
$example=function(){
var_dump($message);
};
echo $example(); //null
//繼承$message
$example=function() use($message){
var_dump($message);
};
echo $example(); //hello
//當函式被定義的時候就繼承了作用域中變數的值,而不是在呼叫時才繼承
//此時改變$message的值對繼承沒有影響
$message='world';
echo $example(); //hello
//重置$message的值為"hello"
$message='hello';
//繼承引用
$example=function() use(&$message){
var_dump($message);
};
echo $example(); //hello
//父作用域中$message的值被改變,當函式被呼叫時$message的值發生改變
//當前是繼承引用,注意與非繼承引用的區別:
$message='world';
echo $example(); //world
//閉包也可以接收引數
$example=function($arg) use($message){
var_dump($arg.' '.$message);
};
$example("hello"); //hello world
?>