PHP數組
- 索引數組,數組的鍵是整數的數組,并且鍵的整數順序是從0開始
$arr = array("apple","orange","pear");
print_r($arr);//輸出數組建及對應的值
結果為:
Array
(
[0] => apple
[1] => orange
[2] => pear
)
- 關聯數組,數組的鍵是字符串的數組
$arr = array('apple'=>"蘋果",'orange'=>"橘子",'pear'=>"梨子");
print_r($arr);
結果為:
Array
(
[apple] => 蘋果
[orange] => 橘子
[pear] => 梨子
)
創建數組
- 使用
array()
函數
$fruits = array('apple','orange');
- 直接對數組變量賦值
$fruits[]='pear';
如果方括號中沒有指定索引,則取當前最大整數索引值+1。如果當前還沒有整數索引,則鍵名將為0。如果指定的鍵名已經有值了,該值將被覆蓋
- 使用
range()
創建指定范圍單元的數組
$num = range(1,10);
PHP函數
- 定義
- 使用關鍵字
function
開始 -
function
后面跟函數名 - 大括號中編寫函數體
- 使用關鍵字
function say{
echo "hello world"
}
- 調用:函數名加參數
- 判斷函數是否存在
function_exists("fn")
判斷函數fn是否存在
PHP類與面向對象
類是抽象的概念,對象是具體的實例。類通過關鍵字class
定義,通過關鍵字new
來創建一個實例,通過->
訪問對象的屬性和方法
//定義一個類
class Car {
//屬性
public $name = "汽車";
//方法
public function getName(){
//方法內部可以使用$this調用對象的方法和屬性
return $this->name;
}
}
//創建一個對象
$car = new Car();
屬性(方法)聲明是由關鍵字public
,protected
,private
開頭
-
public
公有(默認) -
protected
受保護的 -
private
私有的
受保護的屬性(方法)和私有的屬性(方法)不允許外部調用,在類的成員方法內部可以調用
構造函數和析構函數
- 構造函數
PHP5可以在類中使用__construct()
定義一個構造函數,構造函數會在對象創建時候調用,常用來對象創建時的初始化工作。
class Car{
function __construct(){
...
}
}
$car = new Car();//實例化會調用__construct
子類中定義了__construct
則不會調用父類的__construct
,如果需要調用父類的構造函數,需要使用parent::__construct()
顯示調用
- 析構函數
PHP5中使用_destruct()
,定義,析構函數指的是當某個對象的所有引用被刪除,或者對象被顯示的銷毀時會執行的函數。
class Car{
function __destruct(){
...
}
}
$car = new Car();
unset($car);//銷毀時調用析構函數
Static靜態關鍵字
靜態屬性和方法可以在不實例化類的情況下調用,直接使用類名::方法名
的方式調用,靜態屬性不允許對象使用->
操作符調用
class Car {
static $speed = 10;
}
echo Car::$speed;
靜態方法中不允許使用$this
偽變量。可以使用self
,parent
在內部調用靜態方法與屬性
訪問控制
訪問控制通過public
,protected
,private
關鍵字來實現。公有的類成員可以在任何地方被訪問,受保護的類成員可以被其自身以及其子類和父類訪問,私有的類成員只能被其定義所在的類訪問。
類屬性必須定義為公有、受保護、私有之一。
calss Car{
$speed = 10;//錯誤,屬性必須定義訪問控制
public $name; //定義公有屬性
}
類的方法如果沒有設置這些關鍵字,默認公有
如果構造函數定義成了私有方法,則不允許直接實例化對象,可以通過靜態方法實例化對象
class Car{
private function __construct(){
...
}
private static $_obj = null;
public static function getInstance(){
if(empty(self::$_obj))){
self::$_obj = new Car();
}
return self::$_obj;
}
}
//$car = new Car()//不允許直接實例化
$car = Car::getInstance(); //通過靜態方法獲得一個實例
對象繼承
使用extends
實現類的繼承,共享屬性和方法
class Truck extends Car{
...
}
//定義繼承于Car的Truck類
PHP對象的重載
重載指的是動態的創建屬性和方法。
屬性是通過魔術方法來實現。__set
,__get
,__isset
,__unset
分別實現對不存在的屬性的賦值,讀取,判斷屬性是否設置,銷毀屬性。
class Car {
private $ary = array();
public function __set($key, $val) {
$this->ary[$key] = $val;
}
public function __get($key) {
if (isset($this->ary[$key])) {
return $this->ary[$key];
}
return null;
}
public function __isset($key) {
if (isset($this->ary[$key])) {
return true;
}
return false;
}
public function __unset($key) {
unset($this->ary[$key]);
}
}
$car = new Car();
$car->name = '汽車'; //name屬性動態創建并賦值
echo $car->name;
方法的重載通過__call
來實現,當調用不存在的方法的時候,將會轉為參數調用__call
方法,當調用不存在的靜態方法時會使用__callStatic
重載
class Car {
public $speed = 0;
public function __call($name, $args) {
if ($name == 'speedUp') {
$this->speed += 10;
}
}
}
$car = new Car();
$car->speedUp(); //調用不存在的方法會使用重載
echo $car->speed;