PHP物件導向開發之類的常用關鍵字

來源:互聯網
上載者:User

類中的常用關鍵字

1.fianl:鎖
2.self:有點類似與this關鍵字
3.static:靜態屬性
4.const:常量關鍵字


1.關鍵字:fianl

用來定義類和方法的一個重要關鍵字,當定義類的時候該類不能被繼承,用來定義方法的時候該方法不能被重載。

1. final不成修飾成員屬性(類中常不是用這個關鍵字)

2. final只能修飾類和方法

作用:

使用final修飾的類 不 能被子類繼承

使用final修飾的方法不能被子類去覆蓋

用來限制類不被繼承,方法不被覆蓋就使用fianl


類使用 final 關鍵字的例子:

final class Person
{
    ......
}

final 定義的類被繼承時會提示如下錯誤:

Fatal error: Class Student may not inherit from final class (Person) in ...

方法使用 final 關鍵字的例子:

class Person
{
    final function say()
    {
        ......
    }
}

Example #1 Final 方法樣本

 代碼如下 複製代碼

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() calledn";
   }
  
   final public function moreTesting() {
       echo "BaseClass::moreTesting() calledn";
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() calledn";
   }
}
// 產生 Fatal error: Cannot override final method BaseClass::moreTesting()
?>

Example #2 Final 類樣本

 代碼如下 複製代碼

<?php
final class BaseClass {
   public function test() {
       echo "BaseClass::test() calledn";
   }
  
   // 這裡無論你是否將方法聲明為final,都沒有關係
   final public function moreTesting() {
       echo "BaseClass::moreTesting() calledn";
   }
}

class ChildClass extends BaseClass {
}
// 產生 Fatal error: Class ChildClass may not inherit from final class (BaseClass)
?>

2.關鍵字:self

在訪問PHP類中的成員變數或方法時,如果被引用的變數或者方法被聲明成const(定義常量)或者static(聲明靜態),那麼就必須使用操作符::,反之如果被引用的變數或者方法沒有被聲明成const或者static,那麼就必須使用操作符->。

另外,如果從類的內部訪問const或者static變數或者方法,那麼就必須使用自引用的self,反之如果從類的內部訪問不為const或者static變數或者方法,那麼就必須使用自引用的$this


格式:

self::類內部成員(屬性或者方法)
|| 等價於
類名::類內部成員(屬性或者方法)

注意:因為沒有數理化類訪問內部屬性或方法是沒有意義的,所以self一般用來訪問類中的:靜態成員,常量,其他定義的內容。

 

3.關鍵字:static

記憶體最佳化,用來定義靜態屬性或方法,可以在類未被執行個體化時就能使用。靜態屬性單獨佔用記憶體,而不會因建立多個對象而重複佔用記憶體。

格式:
class class1 {
static $name;
static function fun1 {
...
}
}

靜態成員的訪問(類內部):
self::靜態成員
類名稱::靜態成員

靜態成員的訪問(類外部):
類名稱::靜態成員


4.關鍵字:const

用來定義類中的常量,只能修飾類當中的成員屬性。
格式:

class class1 { //建議用大寫定義,不使用$符號。
const NAME;
...
}

看個PHP const小例子吧:

 代碼如下 複製代碼

< ?php  
class say_const{  
const CHARSET="中國";  
publice function say_hello()
{  
echo slef::CHARSET;  
}  
}  
$const1=new say_const()  
$const1->say_hello();  
?>  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.