久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

詳談PHP中public,private,protected,abstract等關(guān)鍵字的用

下面小編就為大家分享一篇詳談PHP中public,private,protected,abstract等關(guān)鍵字的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

PHP中常用的關(guān)鍵字

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

變量與方法的關(guān)鍵字public,private,protected

public的權(quán)限最大,既可以讓子類使用,也可以支持實(shí)例化之后的調(diào)用,

protected表示的是受保護(hù)的,訪問(wèn)的權(quán)限是只有在子類和本類中才可以被訪問(wèn)到

private 表示的是私有,只能夠是在當(dāng)前的類中可以被訪問(wèn)到


<?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; // 這行能被正常執(zhí)行
//echo $obj->protected; // 這行會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤
//echo $obj->private; // 這行也會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤
$obj->printHello(); // 輸出 Public、Protected 和 Private
$obj->pro_test();//直接報(bào)錯(cuò)
?>

變量與方法的關(guān)鍵字static

static的作用就是能夠?qū)崿F(xiàn)值或者方法在類中不需實(shí)例化的情況下調(diào)用,同時(shí)static修飾的變量具有與值存儲(chǔ)的功能,例如我們不使用static運(yùn)行的結(jié)果如下:


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

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


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

這里可能不能夠體會(huì)到PHP這樣做的好處,那么我們就先來(lái)假設(shè)一下讀者也熟悉JS,在JS中是沒(méi)有static這個(gè)關(guān)鍵字的,所以如果我們要來(lái)實(shí)現(xiàn)一個(gè)具有能夠保存每一次程序運(yùn)算結(jié)果作為下一次運(yùn)算的依據(jù)的一個(gè)程序我們需要這樣來(lái)寫(xiě)。


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

這樣就會(huì)把glo泄漏到全局變量中,如果生成的變量比較多,就會(huì)導(dǎo)致內(nèi)存泄露(內(nèi)存泄漏所指代的就是變量占用過(guò)多的內(nèi)存空間沒(méi)有別釋放)


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

所以相比于在沒(méi)有定義static的語(yǔ)言中,它具有一個(gè)優(yōu)勢(shì)是保持變量,不泄露內(nèi)存,也不容易導(dǎo)致全局變量被誤用(因?yàn)樽饔糜虿辉谌郑?/p>


$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與方法的關(guān)鍵字final

final只能夠用來(lái)修飾class與function,使用了final之后就不能夠被繼承,例如如下的代碼就會(huì)直接報(bào)錯(cuò)


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";
 }
}

特殊關(guān)鍵字interface,abstract

interface的意義在于規(guī)范編程的風(fēng)格,設(shè)想一下就是如果是實(shí)現(xiàn)了一個(gè)接口那么我們?cè)谑褂眠@個(gè)接口類的時(shí)候就必須要實(shí)現(xiàn)里面的方法,起到了統(tǒng)一命名的作用。

class是可以多繼承接口的,接口與接口之間的單繼承是通過(guò)extends來(lái)實(shí)現(xiàn)的,class與接口之間的關(guān)系確立是通過(guò)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其實(shí)是一樣的,但是在interface中所有的方法都是必須要實(shí)現(xiàn)的,但是在abstract修飾的類中,可以有一個(gè)或者是多個(gè)的abstract修飾方法,所以我們可以這樣理解,interface就是abstract的一種特殊情況(當(dāng)所有的方法都是抽象方法,都是必須要實(shí)現(xiàn)的)。abstract有以下的這些特征:

1. 只要類中有至少一個(gè)方法使用了abstract關(guān)鍵字,那么這個(gè)類是abstract,要加上相應(yīng)的關(guān)鍵字

2. 抽象方法,只有方法的聲明部分,沒(méi)有方法體。

但是在我看來(lái),abstract在實(shí)際的應(yīng)用中有這樣的幾種場(chǎng)景

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

2. 實(shí)現(xiàn)不讓父級(jí)直接實(shí)例化使用

樣式代碼如下:


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

以上這篇詳談PHP中public,private,protected,abstract等關(guān)鍵字的用法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持編程學(xué)習(xí)網(wǎng)。

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

相關(guān)文檔推薦

本文講述了php中json_encode處理gbk與gb2312中文亂碼問(wèn)題的解決方法,具體方法如下: 1.json_encode()中文在gbk/gb2312中對(duì)中文返回為null $arr = array (??array (?? ?'catid' = '4',?? ?'catname' = 'www.gen
php中求三個(gè)數(shù)中最大值的實(shí)例代碼如下,希望能夠幫到需要的朋友 ?php//求三個(gè)數(shù)中的最大值function maxNum($x,$y,$z){ return $x$y ? ( $x$z ? $x : $z ) : ($y$z ?$y :$z);}echo maxNum(35,26,118);? 也可以通過(guò)下面
下面小編就為大家分享一篇解決PHP字符串長(zhǎng)度不一致的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
下面小編就為大家分享一篇PHP讓數(shù)組中有相同值的組成新的數(shù)組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
這篇文章主要給大家介紹了關(guān)于php中通用的excel導(dǎo)出方法的相關(guān)資料,通過(guò)文中介紹的方法對(duì)大家學(xué)習(xí)或者使用php具有一定的參考學(xué)學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)
這篇文章主要給大家介紹了關(guān)于利用PHP如何實(shí)現(xiàn)訂單的延時(shí)處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨
主站蜘蛛池模板: 亚洲电影一区二区三区 | 在线观看av中文字幕 | 一区二区三区成人 | 欧美日韩一区二区三区在线观看 | 国产精品揄拍一区二区 | 国产在线精品一区二区 | 妞干网视频 | 日韩视频中文字幕 | 欧美日韩久久久久 | 欧区一欧区二欧区三免费 | 色吊丝2| 国产激情免费视频 | 国产9999精品 | 午夜免费福利影院 | 日韩高清中文字幕 | 国产清纯白嫩初高生视频在线观看 | 精品久久国产 | 亚洲高清视频一区二区 | 在线观看国产 | 久久久久一区 | 国产不卡一 | 亚洲精品一区二区三区 | 成人国产免费视频 | 国产激情视频在线观看 | 日韩欧美三区 | 我想看一级黄色毛片 | 国产福利在线小视频 | 中文字幕第一页在线 | 亚洲国产精品一区二区第一页 | 亚洲精品久久久久中文字幕欢迎你 | 日一区二区 | 久久久成人网 | 免费高潮视频95在线观看网站 | 久草视频在线播放 | 欧美三级三级三级爽爽爽 | 国产精品久久久久一区二区三区 | 天天干狠狠操 | 一区视频 | 久久99精品久久久久久国产越南 | 亚洲欧美日韩中文在线 | 成人精品一区二区 |