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

來源:互聯網
上載者:User
下面小編就為大家分享一篇詳談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啟動並執行結果如下:

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

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

<?phpfunction test(){ static $var=1; echo $var."</br>"; $var++;}test();// 1test();// 2test();// 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(); // 101test2(); // 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

範例程式碼:

<?phpinterface 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. 實現不讓父級直接執行個體化使用

樣式代碼如下:

<?phpabstract 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中文網。

您可能感興趣的文章:

PHP讓數組中有相同值的組成新的數組執行個體講解

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

命令列執行php指令碼中的$argv和$argc配置方法_php執行個體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.