PHP數(shù)組
- 索引數(shù)組,數(shù)組的鍵是整數(shù)的數(shù)組露懒,并且鍵的整數(shù)順序是從0開始
$arr = array("apple","orange","pear");
print_r($arr);//輸出數(shù)組建及對(duì)應(yīng)的值
結(jié)果為:
Array
(
[0] => apple
[1] => orange
[2] => pear
)
- 關(guān)聯(lián)數(shù)組,數(shù)組的鍵是字符串的數(shù)組
$arr = array('apple'=>"蘋果",'orange'=>"橘子",'pear'=>"梨子");
print_r($arr);
結(jié)果為:
Array
(
[apple] => 蘋果
[orange] => 橘子
[pear] => 梨子
)
創(chuàng)建數(shù)組
- 使用
array()
函數(shù)
$fruits = array('apple','orange');
- 直接對(duì)數(shù)組變量賦值
$fruits[]='pear';
如果方括號(hào)中沒有指定索引砂心,則取當(dāng)前最大整數(shù)索引值+1懈词。如果當(dāng)前還沒有整數(shù)索引,則鍵名將為0辩诞。如果指定的鍵名已經(jīng)有值了坎弯,該值將被覆蓋
- 使用
range()
創(chuàng)建指定范圍單元的數(shù)組
$num = range(1,10);
PHP函數(shù)
- 定義
- 使用關(guān)鍵字
function
開始 -
function
后面跟函數(shù)名 - 大括號(hào)中編寫函數(shù)體
- 使用關(guān)鍵字
function say{
echo "hello world"
}
- 調(diào)用:函數(shù)名加參數(shù)
- 判斷函數(shù)是否存在
function_exists("fn")
判斷函數(shù)fn是否存在
PHP類與面向?qū)ο?/h3>
類是抽象的概念,對(duì)象是具體的實(shí)例译暂。類通過關(guān)鍵字class
定義抠忘,通過關(guān)鍵字new
來創(chuàng)建一個(gè)實(shí)例,通過->
訪問對(duì)象的屬性和方法
//定義一個(gè)類
class Car {
//屬性
public $name = "汽車";
//方法
public function getName(){
//方法內(nèi)部可以使用$this調(diào)用對(duì)象的方法和屬性
return $this->name;
}
}
//創(chuàng)建一個(gè)對(duì)象
$car = new Car();
屬性(方法)聲明是由關(guān)鍵字public
外永,protected
崎脉,private
開頭
-
public
公有(默認(rèn)) -
protected
受保護(hù)的 -
private
私有的
受保護(hù)的屬性(方法)和私有的屬性(方法)不允許外部調(diào)用,在類的成員方法內(nèi)部可以調(diào)用
構(gòu)造函數(shù)和析構(gòu)函數(shù)
- 構(gòu)造函數(shù)
PHP5可以在類中使用__construct()
定義一個(gè)構(gòu)造函數(shù)伯顶,構(gòu)造函數(shù)會(huì)在對(duì)象創(chuàng)建時(shí)候調(diào)用荧嵌,常用來對(duì)象創(chuàng)建時(shí)的初始化工作。
class Car{
function __construct(){
...
}
}
$car = new Car();//實(shí)例化會(huì)調(diào)用__construct
子類中定義了__construct
則不會(huì)調(diào)用父類的__construct
砾淌,如果需要調(diào)用父類的構(gòu)造函數(shù)啦撮,需要使用parent::__construct()
顯示調(diào)用
- 析構(gòu)函數(shù)
PHP5中使用_destruct()
,定義汪厨,析構(gòu)函數(shù)指的是當(dāng)某個(gè)對(duì)象的所有引用被刪除赃春,或者對(duì)象被顯示的銷毀時(shí)會(huì)執(zhí)行的函數(shù)。
class Car{
function __destruct(){
...
}
}
$car = new Car();
unset($car);//銷毀時(shí)調(diào)用析構(gòu)函數(shù)
Static靜態(tài)關(guān)鍵字
靜態(tài)屬性和方法可以在不實(shí)例化類的情況下調(diào)用劫乱,直接使用類名::方法名
的方式調(diào)用织中,靜態(tài)屬性不允許對(duì)象使用->
操作符調(diào)用
class Car {
static $speed = 10;
}
echo Car::$speed;
靜態(tài)方法中不允許使用$this
偽變量锥涕。可以使用self
狭吼,parent
在內(nèi)部調(diào)用靜態(tài)方法與屬性
訪問控制
訪問控制通過public
层坠,protected
,private
關(guān)鍵字來實(shí)現(xiàn)刁笙。公有的類成員可以在任何地方被訪問破花,受保護(hù)的類成員可以被其自身以及其子類和父類訪問,私有的類成員只能被其定義所在的類訪問疲吸。
類屬性必須定義為公有座每、受保護(hù)、私有之一摘悴。
calss Car{
$speed = 10;//錯(cuò)誤峭梳,屬性必須定義訪問控制
public $name; //定義公有屬性
}
類的方法如果沒有設(shè)置這些關(guān)鍵字,默認(rèn)公有
如果構(gòu)造函數(shù)定義成了私有方法蹂喻,則不允許直接實(shí)例化對(duì)象葱椭,可以通過靜態(tài)方法實(shí)例化對(duì)象
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()//不允許直接實(shí)例化
$car = Car::getInstance(); //通過靜態(tài)方法獲得一個(gè)實(shí)例
對(duì)象繼承
使用extends
實(shí)現(xiàn)類的繼承,共享屬性和方法
class Truck extends Car{
...
}
//定義繼承于Car的Truck類
PHP對(duì)象的重載
重載指的是動(dòng)態(tài)的創(chuàng)建屬性和方法口四。
屬性是通過魔術(shù)方法來實(shí)現(xiàn)挫以。__set
,__get
窃祝,__isset
掐松,__unset
分別實(shí)現(xiàn)對(duì)不存在的屬性的賦值,讀取粪小,判斷屬性是否設(shè)置大磺,銷毀屬性。
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屬性動(dòng)態(tài)創(chuàng)建并賦值
echo $car->name;
方法的重載通過__call
來實(shí)現(xiàn)探膊,當(dāng)調(diào)用不存在的方法的時(shí)候杠愧,將會(huì)轉(zhuǎn)為參數(shù)調(diào)用__call
方法,當(dāng)調(diào)用不存在的靜態(tài)方法時(shí)會(huì)使用__callStatic
重載
class Car {
public $speed = 0;
public function __call($name, $args) {
if ($name == 'speedUp') {
$this->speed += 10;
}
}
}
$car = new Car();
$car->speedUp(); //調(diào)用不存在的方法會(huì)使用重載
echo $car->speed;