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

jacklove
發布: 2023-04-02 12:24:02
原創
1723 人瀏覽過

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

PHP中常用的關鍵字

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

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

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

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

private 表示的是私有,只能夠是在目前的類別中可以被存取到

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運行的結果如下:

";
 $var++;
}
test();// 1
test();// 1
test();// 1
?>
登入後複製

如果我們給變數加上static那麼就會變成這樣

##

";
 $var++;
}
test();// 1
test();// 2
test();// 3
?>
登入後複製

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

var glo=0;
 function test(){
 glo++;
 document.writeln(glo);
 }
 test();
 test();
 test();
登入後複製

這樣就會把glo洩漏到全域變數中,如果產生的變數比較多,就會導致記憶體外洩(記憶體洩漏所指涉的就是變數佔用過多的記憶體空間沒有別釋放)

登入後複製

#所以比起在沒有定義static的語言中,它有一個優點是保持變量,不洩漏內存,也不容易導致全域變數被誤用(因為作用域不在全域)

$age=0;
$age++;
function test1() {
 static $age = 100;
 $age++;
 echo $age."
"; } function test2() { static $age = 1000; $age++; echo $age."
"; } test1(); // 101 test2(); // 1001
登入後複製

##class與方法的關鍵字finalfinal只能夠用來修飾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

範例程式碼:

登入後複製

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

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

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

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

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

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

樣式程式碼如下:

loan();//打印出loan
?>
登入後複製

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

您可能感興趣的文章:

PHP讓陣列中有相同值的組成新的陣列實例講解


解決PHP字串長度不一致的問題詳解


#命令列執行php腳本中的$argv與$argc設定方法_php實例


#

以上是詳談PHP中public,private,protected,abstract等關鍵字的相關用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!