电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

PHP中類與對象功能、用法實(shí)例解讀

瀏覽:119日期:2022-09-11 08:03:24

本文實(shí)例講述了PHP中類與對象功能、用法。分享給大家供大家參考,具體如下:

1. 類與對象

類是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念,是一類東西的結(jié)構(gòu)描述 , 是一種抽象的概念 . 對象是一類東西的一個具體的實(shí)例 , 是具體事物 .

對象通過new關(guān)鍵字進(jìn)行實(shí)例化:比如汽車可以抽象為一個類,汽車擁有名字、輪胎、速度、重量等屬性,可以有換擋、前進(jìn)、后退等操作方法。

// 定義一個汽車類class Car { $name = ’汽車’; function getName() { return $this->name; }}//對象通過new關(guān)鍵字進(jìn)行實(shí)例化 $car = new Car();echo $car->getName();2. 屬性與對象

在類中定義的變量稱之為屬性。屬性聲明是由關(guān)鍵字 public,protected 或者 private 開頭,后面跟一個普通的變量聲明來組成。屬性的變量可以設(shè)置初始化的默認(rèn)值,默認(rèn)值必須是常量。

方法就是在類中的function,很多時候我們分不清方法與函數(shù)有什么差別,在面向過程的程序設(shè)計(jì)中function叫做函數(shù),在面向?qū)ο笾衒unction則被稱之為方法。

訪問控制的關(guān)鍵字代表的意義為:

public:公開的 , 任何地方都可以訪問 protected:受保護(hù)的 , 類內(nèi)自身 , 其子類和父類可以訪問 private:私有的 , 類內(nèi)自身可訪問

類屬性的訪問控制必須定義 , 即必須寫出關(guān)鍵字 , 定義為三個中的一個類方法不寫關(guān)鍵字 , 則默認(rèn)為公有的

class Car { public $speed = 0; //增加speedUp方法,使speed加10 public function speedUp(){ $this->speed += 10; }}// 創(chuàng)建對象$car = new Car();// 通過對象獲取類屬性與類方法$car->speedUp();echo $car->speed;3. 構(gòu)造函數(shù)與析構(gòu)函數(shù)

PHP5可以在類中使用__construct()定義一個構(gòu)造函數(shù),具有構(gòu)造函數(shù)的類,會在每次對象創(chuàng)建的時候調(diào)用該函數(shù),因此常用來在對象創(chuàng)建的時候進(jìn)行一些初始化工作。

在子類中如果定義了__construct則不會調(diào)用父類的__construct,如果需要同時調(diào)用父類的構(gòu)造函數(shù),需要使用parent::__construct()顯式的調(diào)用。

同樣,PHP5支持析構(gòu)函數(shù),使用__destruct()進(jìn)行定義,析構(gòu)函數(shù)指的是當(dāng)某個對象的所有引用被刪除,或者對象被顯式的銷毀時會執(zhí)行的函數(shù)。

class Car { function __construct() { print '構(gòu)造函數(shù)被調(diào)用 n'; } function __destruct() { print '析構(gòu)函數(shù)被調(diào)用 n'; }}$car = new Car(); //實(shí)例化時會調(diào)用構(gòu)造函數(shù)echo ’使用后,準(zhǔn)備銷毀car對象 n’;unset($car); //銷毀時會調(diào)用析構(gòu)函數(shù)

當(dāng)PHP代碼執(zhí)行完畢以后,會自動回收與銷毀對象,因此一般情況下不需要顯式的去銷毀對象。

4. 靜態(tài)屬性與靜態(tài)方法 靜態(tài)屬性:

public / protected / private static $變量名

不用實(shí)例化類 , 直接調(diào)用 類名 :: $變量名但實(shí)例化后 , 不允許使用 對象 -> $變量名

靜態(tài)方法

public / protected / private static function 方法名()

不用實(shí)例化類 , 直接調(diào)用 類名 :: 方法名()實(shí)例化后 , 對象 -> 方法名()靜態(tài)方法中,$this偽變量不允許使用。可以使用self,parent,static在內(nèi)部調(diào)用靜態(tài)方法與屬性。

class Car { private static $speed = 10; public static function getSpeed() { return self::$speed; } public static function speedUp() { return self::$speed+=10; }}class BigCar extends Car { public static function start() { parent::speedUp(); }}BigCar::start();echo BigCar::getSpeed();

如果構(gòu)造函數(shù)定義成了私有方法,則不允許直接實(shí)例化對象了,這時候一般通過靜態(tài)方法進(jìn)行實(shí)例化,在設(shè)計(jì)模式中會經(jīng)常使用這樣的方法來控制對象的創(chuàng)建,比如單例模式只允許有一個全局唯一的對象。

class Car { private function __construct() { echo ’object create’; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //內(nèi)部方法可以調(diào)用私有方法,因此這里可以創(chuàng)建對象 } return self::$_object; }}$car = new Car(); //這里不允許直接實(shí)例化對象$car = Car::getInstance(); //通過靜態(tài)方法來獲得一個實(shí)例5. 繼承

繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)中常用的一個特性,汽車是一個比較大的類,我們也可以稱之為基類,除此之外,汽車還分為卡車、轎車、東風(fēng)、寶馬等,因?yàn)檫@些子類具有很多相同的屬性和方法,可以采用繼承汽車類來共享這些屬性與方法,實(shí)現(xiàn)代碼的復(fù)用。

class Car { public $speed = 0; //汽車的起始速度是0 public function speedUp() { $this->speed += 10; return $this->speed; }}//建立一個Truck類,擴(kuò)展Car類,并覆蓋speedUp方法,使速度累加50class Truck extends Car{ public function speedUp(){ parent::speedUp(); $this->speed += 50; return $this->speed; }}$car = new Truck();$car->speedUp();echo $car->speed;5. 重載

PHP中的重載指的是動態(tài)的創(chuàng)建屬性與方法,是通過魔術(shù)方法來實(shí)現(xiàn)的。

屬性的重載通過__set,__get,__isset,__unset來分別實(shí)現(xiàn)對不存在屬性的賦值、讀取、判斷屬性是否設(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屬性動態(tài)創(chuàng)建并賦值echo $car->name;if ($car->age){ echo ’有’;}else{ echo ’無’;}unset($car->name);var_dump($car->name); 方法的重載通過__call來實(shí)現(xiàn),當(dāng)調(diào)用不存在的方法的時候,將會轉(zhuǎn)為參數(shù)調(diào)用__call方法,當(dāng)調(diào)用不存在的靜態(tài)方法時會使用__callStatic重載。

class Car { public $speed = 0; public function __call($name, $args) { if ($name == ’speedUp’) { $this->speed += 10; } }}$car = new Car();$car->speedUp(); //調(diào)用不存在的方法會使用重載echo $car->speed;6. 高級特性

對象比較,當(dāng)同一個類的兩個實(shí)例的所有屬性都相等時,可以使用比較運(yùn)算符 == 進(jìn)行判斷,當(dāng)需要判斷兩個變量是否為同一個對象的引用時,可以使用全等運(yùn)算符 === 進(jìn)行判斷。

class Car {}$a = new Car();$b = new Car();if ($a == $b) echo ’==’; //trueif ($a === $b) echo ’===’; //false

對象復(fù)制,在一些特殊情況下,可以通過關(guān)鍵字clone來復(fù)制一個對象,這時__clone方法會被調(diào)用,通過這個魔術(shù)方法來設(shè)置屬性的值。

class Car { public $name = ’car’; public function __clone() { $obj = new Car(); $obj->name = $this->name; }}$a = new Car();$a->name = ’new car’;$b = clone $a;var_dump($b);

對象序列化,可以通過serialize方法將對象序列化為字符串,用于存儲或者傳遞數(shù)據(jù),然后在需要的時候通過unserialize將字符串反序列化成對象進(jìn)行使用。

class Car { public $name = ’car’;}$a = new Car();$str = serialize($a); //對象序列化成字符串echo $str.’<br>’;$b = unserialize($str); //反序列化為對象var_dump($b);

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 浇注料-高铝砖耐火砖-郑州凯瑞得窑炉耐火材料有限公司 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 机床导轨_导轨板_滚轮导轨-上海旻佑精密机械有限公司 | 上海冠顶工业设备有限公司-隧道炉,烘箱,UV固化机,涂装设备,高温炉,工业机器人生产厂家 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 广州小程序开发_APP开发公司_分销商城系统定制_小跑科技 | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | 胀套-锁紧盘-风电锁紧盘-蛇形联轴器「厂家」-瑞安市宝德隆机械配件有限公司 | WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 学习安徽网| 奥因-光触媒除甲醛公司-除甲醛加盟公司十大品牌 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | PE一体化污水处理设备_地埋式生活污水净化槽定制厂家-岩康塑业 | 深圳湾1号房价_深圳湾1号二手房源 | 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 贝壳粉涂料-内墙腻子-外墙腻子-山东巨野七彩贝壳漆业中心 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 自动部分收集器,进口无油隔膜真空泵,SPME固相微萃取头-上海楚定分析仪器有限公司 | 微动开关厂家-东莞市德沃电子科技有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 威廉希尔WilliamHill·足球(中国)体育官方网站 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 特种阀门-调节阀门-高温熔盐阀-镍合金截止阀-钛阀门-高温阀门-高性能蝶阀-蒙乃尔合金阀门-福建捷斯特阀门制造有限公司 |