1. 程式人生 > >二、PHP基礎

二、PHP基礎

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新增運算子:
  1. intdiv(x,y)–> x 除以y的商的整數部分,如intdiv(10,3)的值為3
  2. 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
  • 變數作用域
  1. 全域性變數、區域性變數
  2. php中有4種不同的變數作用域:local、global、static、parameter
  3. 一般來說,函式內部的是區域性變數,且函式內部不能訪問外部的全域性變數;同理,外部也不能訪問函式內部的區域性變數。若是要在函式內部訪問,則要使用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();	
?>
  1. 當一個函式完成後,它的所有變數通常都會被刪除,如果想要讓函式執行完畢後函式內的區域性變數保留,可以使用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	
?>
  1. 引數作用域傳遞給函式的引數:
<?php	
	function my($area){
		if($area>250)				
			echo "我家房子的面積是多少?".$area."m^2";
		else
			echo "輸入有誤!";
	}
	my(273);	
?>
  1. 可變變數允許動態地改變一個變數的名稱:
    原理分析: $$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
?>

注意:

  1. 常量前面沒有$符號
  2. 常量只能使用defineconst定義
  3. 常量的作用域是全域性的,即在任何地方都能使用定義好的常量
  4. 常量不能被修改
  5. 常量的值是標量(不是向量)
  • 預定義常量(魔術常量)
    PHP中有許多預定義常量,也稱為魔術常量,其中很多是由不同的擴充套件庫定義的,只有在載入了這些庫時才會出現
魔術常量(常見) 描述
_LINE_ 檔案中的當前行號
_FILE_ 檔案的完整路徑和檔名
_DIR_ 檔案所在的目錄
_FUNCTION_ 函式名稱
_CLASS_ 類的名稱
_TRAIT_ trait的名字
_METHOD_ 類的方法名
_NAMESPACE_ 當前名稱空間的名稱

5.流程控制

  • 條件控制
ifswitch
  • 迴圈控制
whiledo...whilefor
  • 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是對陣列的複製操作!!!

  • 跳轉語句
breakcontinue
  • 包含語句
  1. include
include "a.php";
  1. include_once確保在執行期間,被包含的檔案只生效一次,防止重複定義
include_once 'a.php';
  1. require、require_once的作用相當於include、include_once

6.函式

  • 基本形式
<?PHP
	function add($sum1,$sum2){
		return $sum1+$sum2;
	}
	echo add(7,3); //10
?>
  • 引數
  1. 按值傳遞:
    傳入函式的是引數的備份,即引數不會被改變!
<?PHP
	function add($sum){
		$sum +=2;
		echo $sum;
	}
	$a=3;
	add($a); //5
	echo $a; //3
?>
  1. 通過引用傳遞:
    引數的值會隨著函式而改變:
<?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
?>