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