pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

詳談PHP中public,private,protected,abstract等關鍵字的用

下面小編就為大家分享一篇詳談PHP中public,private,protected,abstract等關鍵字的用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

PHP中常用的關鍵字

在PHP中包含了很多對函數和類進行限制的關鍵字,常用的通常有abstract,final,interface,public,protected,private,static等等,下面我們就將對這些進行分析整理各個的用法。

變量與方法的關鍵字public,private,protected

public的權限最大,既可以讓子類使用,也可以支持實例化之后的調用,

protected表示的是受保護的,訪問的權限是只有在子類和本類中才可以被訪問到

private 表示的是私有,只能夠是在當前的類中可以被訪問到


<?php
//
/**
* Define MyClass
*/
class MyClass
{
 public $public = 'Public';
 protected $protected = 'Protected';
 private $private = 'Private';
 public function printHello()
 {
 echo $this->public;
 echo $this->protected;
 echo $this->private;
 }
 protected function pro_test(){
 var_dump(1);
 }
}
$obj = new MyClass();
echo $obj->public; // 這行能被正常執行
//echo $obj->protected; // 這行會產生一個致命錯誤
//echo $obj->private; // 這行也會產生一個致命錯誤
$obj->printHello(); // 輸出 Public、Protected 和 Private
$obj->pro_test();//直接報錯
?>

變量與方法的關鍵字static

static的作用就是能夠實現值或者方法在類中不需實例化的情況下調用,同時static修飾的變量具有與值存儲的功能,例如我們不使用static運行的結果如下:


<?php
function test(){
 $var=1;
 echo $var."</br>";
 $var++;
}
test();// 1
test();// 1
test();// 1
?>

如果我們給變量加上static那么就會變成這樣


<?php
function test(){
 static $var=1;
 echo $var."</br>";
 $var++;
}
test();// 1
test();// 2
test();// 3
?>

這里可能不能夠體會到PHP這樣做的好處,那么我們就先來假設一下讀者也熟悉JS,在JS中是沒有static這個關鍵字的,所以如果我們要來實現一個具有能夠保存每一次程序運算結果作為下一次運算的依據的一個程序我們需要這樣來寫。


var glo=0;
 function test(){
 glo++;
 document.writeln(glo);
 }
 test();
 test();
 test();

這樣就會把glo泄漏到全局變量中,如果生成的變量比較多,就會導致內存泄露(內存泄漏所指代的就是變量占用過多的內存空間沒有別釋放)


<script>
 var glo=0;
 function test(){
 glo++;
 document.writeln(glo);
 }
 test();// 1
 test();// 2
 test();// 3 
</script>

所以相比于在沒有定義static的語言中,它具有一個優勢是保持變量,不泄露內存,也不容易導致全局變量被誤用(因為作用域不在全局)


$age=0;
$age++;
function test1() {
 static $age = 100;
 $age++;
 echo $age."</br>";
}
function test2() {
 static $age = 1000;
 $age++;
 echo $age."</br>";
}
test1(); // 101
test2(); // 1001

class與方法的關鍵字final

final只能夠用來修飾class與function,使用了final之后就不能夠被繼承,例如如下的代碼就會直接報錯


class BaseClass {
 public $public = 'Public';
 function test() {
 echo "BaseClass::test() called\n";
 }
 final public function moreTesting() {
 echo "BaseClass::moreTesting() called\n";
 }
}
class ChildClass extends BaseClass {
 public function moreTesting() {
 echo "ChildClass::moreTesting() called\n";
 }
}

特殊關鍵字interface,abstract

interface的意義在于規范編程的風格,設想一下就是如果是實現了一個接口那么我們在使用這個接口類的時候就必須要實現里面的方法,起到了統一命名的作用。

class是可以多繼承接口的,接口與接口之間的單繼承是通過extends來實現的,class與接口之間的關系確立是通過implements

示例代碼:


<?php
interface testA{
 function funcA();
}
interface testB{
 function funcB();
}
interface testC extends testA {
 function funcC();
}
class run implements testC ,testB {
 public function funcA()
 {
 // TODO: Implement funcA() method.
 }
 public function funcB()
 {
 // TODO: Implement funcB() method.
 }
 public function funcC()
 {
 // TODO: Implement funcC() method.
 }
}
?>

abstract的作用跟interface其實是一樣的,但是在interface中所有的方法都是必須要實現的,但是在abstract修飾的類中,可以有一個或者是多個的abstract修飾方法,所以我們可以這樣理解,interface就是abstract的一種特殊情況(當所有的方法都是抽象方法,都是必須要實現的)。abstract有以下的這些特征:

1. 只要類中有至少一個方法使用了abstract關鍵字,那么這個類是abstract,要加上相應的關鍵字

2. 抽象方法,只有方法的聲明部分,沒有方法體。

但是在我看來,abstract在實際的應用中有這樣的幾種場景

1. 多人編程的時候規范公共部分的命名規則(不做任何說明,原理跟interface一樣)

2. 實現不讓父級直接實例化使用

樣式代碼如下:


<?php
abstract class shopping
{
 public function buy()
 {
 echo "buy";
 }
 public function loan()
 {
 echo "loan";
 }
}
class leslieBuy extends shopping
{
}
//$test1=new shopping;//直接語法錯誤
$leslieSie = new leslieBuy;
$leslieSie->loan();//打印出loan
?>

以上這篇詳談PHP中public,private,protected,abstract等關鍵字的用法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持編程學習網。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

本文講述了php中json_encode處理gbk與gb2312中文亂碼問題的解決方法,具體方法如下: 1.json_encode()中文在gbk/gb2312中對中文返回為null $arr = array (??array (?? ?'catid' = '4',?? ?'catname' = 'www.gen
php中求三個數中最大值的實例代碼如下,希望能夠幫到需要的朋友 ?php//求三個數中的最大值function maxNum($x,$y,$z){ return $x$y ? ( $x$z ? $x : $z ) : ($y$z ?$y :$z);}echo maxNum(35,26,118);? 也可以通過下面
下面小編就為大家分享一篇解決PHP字符串長度不一致的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP讓數組中有相同值的組成新的數組實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了關于php中通用的excel導出方法的相關資料,通過文中介紹的方法對大家學習或者使用php具有一定的參考學學習價值,需要的朋友們下面隨著小編來一起學習學習
這篇文章主要給大家介紹了關于利用PHP如何實現訂單的延時處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨
主站蜘蛛池模板: 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 创客匠人-让IP变现不走弯路| 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 氧化铁红厂家-淄博宗昂化工| 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 挤出机_橡胶挤出机_塑料挤出机_胶片冷却机-河北伟源橡塑设备有限公司 | 合同书格式和范文_合同书样本模板_电子版合同,找范文吧 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 杭州双螺杆挤出机-百科| 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 博医通医疗器械互联网供应链服务平台_博医通 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 上海佳武自动化科技有限公司 | 线材成型机,线材折弯机,线材成型机厂家,贝朗自动化设备有限公司1 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 氢氧化钾厂家直销批发-济南金昊化工有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 手板-手板模型-手板厂-手板加工-生产厂家,[东莞创域模型] | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 手板-手板模型-手板厂-手板加工-生产厂家,[东莞创域模型] | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 土壤有机碳消解器-石油|表层油类分析采水器-青岛溯源环保设备有限公司 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 炒货机-炒菜机-炒酱机-炒米机@霍氏机械 |