亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言

PHP中如何定義類及其成員屬性與操作

時間:2024-09-23 05:09:47 php語言 我要投稿
  • 相關(guān)推薦

PHP中如何定義類及其成員屬性與操作

類是具有相同屬性和操作的一組對象的集合。它為屬于該類的所有對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和操作兩個主要部分。在面向?qū)ο蟮木幊陶Z言中,類是一個獨立的程序單位,它應(yīng)該有一個類名并包括屬性說明和操作說明兩個主要部分。下面是小編為大家?guī)淼腜HP中如何定義類及其成員屬性與操作的知識,歡迎閱讀。

  1、類的定義:

  i. 類的關(guān)鍵字定義使用class

  1.定義一個空類

  Class Person{};

  2.定義一個有成員屬性和操作的類

  Class Person{

  成員屬性........

  操    作........

  }

  3.定義一個不能被繼承的類,使用final關(guān)鍵字

  Final class Person{

  成員屬性........

  操    作........

  }

  4.注意:final關(guān)鍵字不能用來修飾成員屬性 ,只能修飾類和方法(final方法后面介紹)

  5.這里舉一個帶有final的class

  定義一個final的類FinalClass,包含一個公共函數(shù)

  final class FinalClass {

  public function ffun() {

  echo “本類為final類”;

  }

  }

  定義一個類ChildFinalClass 并繼承FinalClass 類

  class ChildFinalClass extends FinalClass {

  public function fchildfun() {

  echo ‘本類繼承final類FinalClass ’;

  }

  }

  這樣當(dāng)執(zhí)行以上命令的時候系統(tǒng)會提示

  Fatal error: Class ChildFinalClass may not inherit from final class (FinalClass)

  證明由final關(guān)鍵字定義的class是不可以被子類繼承的

  2、類中成員屬性的定義

  i. 成員屬性就是對該類定義的一些變量屬性,那人作為一個類來說,人都有一對眼睛(正常的啊,二郎神除外),一張嘴,兩個耳朵,等這樣的一些固定的用來描述或表現(xiàn)某種事物的專有名詞稱為成員屬性

  ii. 類中成員屬性的聲明使用的關(guān)鍵字

  iii. 常見成員屬性聲明是由關(guān)以下鍵字

  public,var,protected,private開頭的,然后跟一個變量來組成的。還有一些成員屬性包括,靜態(tài)static,常量const.

  Public: 表示全局的,類內(nèi)部外部子類都可以訪問

  Var:     php 5 版本中會認(rèn)為這個成員屬性為public類型的屬性

  protected 表示受保護(hù)的,只有本類或子類或父類中可以訪問

  private

  表示私有的,只有本類內(nèi)部可以使用

  Static:    1)靜態(tài)的屬性,

  2)用static修飾的成員屬性可以被同一個類的所有對象共享

  3) 靜態(tài)的數(shù)據(jù)是在類第一次被加載的時候就存在了內(nèi)存中的數(shù)據(jù)段中(初始化靜態(tài)段)

  4)類中使用self::成員屬性名

  5)類外  類名::成員屬性名

  Const:   1)類中常量屬性,在類中聲明常量必須使用const

  2)類中使用  self::成員屬性名

  3)類外使用  類名::成員屬性名

  注意:屬性中的變量可以初始化,但是初始化的值必須是常數(shù),這里的常數(shù)是指php腳本在編譯階段時就為常數(shù),而不是在編譯階段之后在運行階段運算出的常數(shù)。例如,不能包含任何運算符,不能是任何變量,不能是一個函數(shù)等。

  iv. 成員屬性的調(diào)用方式:

  在類的成員方法里面,可以通過 $this->property(property是屬性名字)這種方式來訪問類的屬性、 方法,但是要訪問類的靜態(tài)屬性或者在靜態(tài)方法里面卻不能使用,而是使用 self::$property。 在類的非靜態(tài)方法里面可以使用偽變量 $this,這個偽變量是調(diào)用該方法的實例化對象引用。

  接下來用代碼對上面的內(nèi)容做一下解釋:

  class FinalClass {

  //static $a = strTolower();

  //這種寫法錯誤

  //const  A = 1+2;              //這種寫法錯誤

  //public $name = 123+456;

  //這種寫法錯誤

  static $a = '$a';

  const  A = 'A';

  public $name = '鳳姐';

  protected $sex = '男+女';

  private $age = 23;

  }

  class ChildFinalClass extends FinalClass{

  public function fchildfun(){

  echo 'ChildFinalClass類中ChildFinalClass::$a->'.ChildFinalClass::$a."<hr>";

  Echo 'ChildFinalClass類中ChildFinalClass::A->'.ChildFinalClass::A."<hr>";

  echo '大家好,我叫'.$this->name."<hr>";

  echo '我是:'.$this->sex.'生<hr>';

  echo '我今年:'.$this->age.'<hr>';

  //由于age是私有的成員屬性,所以在這里將不會被調(diào)用,將提示沒有定義此屬性在ChildFinalClass類中。

  }

  }

  $obj = new ChildFinalClass();

  $obj->fchildfun();

  3、類中操作的定義

  i. 我本人一般喜歡叫操作為成員方法,以下我會叫操作為方法其實都是一樣的

  ii. 成員方法的定義:成員方法就是對該類定義的一些函數(shù)方法,比如拿這個類來例句例子,人能吃飯,能跑步,能敲代碼,這就是成員方法。也就是可以做一些可執(zhí)行性的動作我們理解為成員方法

  iii. 成員方法的訪問和成員屬性一樣可以參照上面成員屬性的訪問介紹。

  iv. 成員方法和成員屬性一樣也包括public,protected,private,static,final并且作用域也是一樣的,接下來舉一些例子供大家參考和理解。

  v. 靜態(tài)的成員方法只能訪問靜態(tài)的成員屬性和成員方法,并且類內(nèi)部訪問靜態(tài)方法可以使用self::靜態(tài)方法(),  類外部訪問使用類名::靜態(tài)方法()

  1. 自定義方法:

  class FinalClass {

  static $a = '$a';

  const  A = 'A';

  public $name = '鳳姐';

  protected $sex = '男+女';

  private $age = 23;

  //定義一個公共方法

  public function publickfun(){

  echo 'FinalClass類中self::$a->'.self::$a."<hr>";

  echo "FinalClass類中self::A->".self::A."<hr>";

  echo '大家好,我叫:'.$this->name."<hr>";

  echo '我是:'.$this->sex.'生<hr>';

  echo '我今年:'.$this->age.'<hr>';

  }

  //定義一個受保護(hù)的方法

  protected function protectedfun(){

  echo 'FinalClass類中self::$a->'.self::$a."<hr>";

  echo "FinalClass類中self::A->".self::A."<hr>";

  echo '大家好,我叫:'.$this->name."<hr>";

  echo '我是:'.$this->sex.'生<hr>';

  echo '我今年:'.$this->age.'<hr>';

  }

  //定義一個私用方法

  private function privatefun(){

  echo 'FinalClass類中self::$a->'.self::$a."<hr>";

  echo "FinalClass類中self::A->".self::A."<hr>";

  echo '大家好,我叫:'.$this->name."<hr>";

  echo '我是:'.$this->sex.'生<hr>';

  echo '我今年:'.$this->age.'<hr>';

  }

  }

  class ChildFinalClass extends FinalClass{

  public function fchildfun(){

  echo 'ChildFinalClass類中ChildFinalClass::$a->'.ChildFinalClass::$a."<hr>";

  Echo 'ChildFinalClass類中ChildFinalClass::A->'.ChildFinalClass::A."<hr>";

  echo '我是:'.$this->sex.'生<hr>';

  echo '我今年:'.$this->age.'<hr>';

  //由于age是私有的成員屬性,可以理解為我不想讓別人知道我的年齡,所以在這里將不會被調(diào)用,將提示沒有定義此屬性在ChildFinalClass類中。

  $this->publickfun();

  $this->protectedfun();

  $this->privatefun();

  //由于privatefun是私有的成員方法,所以在這里將不會被調(diào)用。

  }

  }

  $obj = new ChildFinalClass();

  $obj->fchildfun();

  2.魔術(shù)方法

  i. 魔術(shù)方法必須被定義為公共的,所有其他魔術(shù)方法都必須如此

  ii. 從PHP 5以后的版本,PHP中的類就可以使用魔術(shù)方法了。其規(guī)定以兩個下劃線(__)開頭的方法都保留為魔術(shù)方法,所以建議大家函數(shù)名最好不用__開頭,除非是為了重載已有的魔術(shù)方法,接下來列出一些魔術(shù)方法,如果大家想詳細(xì)了解可以針對某一個進(jìn)行查詢了解,這里就不大篇幅的介紹了。

  1、__construct() 構(gòu)造方法

  __destruct()

  析構(gòu)方法

  2、__clone()

  如果想復(fù)制一個對象則需要使用clone方法

  3、__toString()

  方法在將一個對象轉(zhuǎn)化成字符串時自動調(diào)用,比如使用echo打印對象時

  4、__sleep()  串行化的時候用

  __wakeup 反串行化的時候調(diào)用

  5、 __set_state()

  當(dāng)調(diào)用var_export()時,這個靜態(tài) 方法會被調(diào)用(自PHP 5.1.0起有效)

  6、__invoke(PHP 5.3.0以上版本有效)

  當(dāng)嘗試以調(diào)用函數(shù)的方式調(diào)用一個對象時,__invoke 方法會被自動調(diào)用。

  7、__callStatic(PHP 5.3.0以上版本有效) 是為了處理靜態(tài)方法調(diào)用

  8、__get()  當(dāng)調(diào)用一個未定義的屬性時,此方法會被觸發(fā),傳遞的參數(shù)是被訪問的屬性名。

  __set()  給一個未定義的屬性賦值時,此方法會被觸發(fā),傳遞的參數(shù)是被設(shè)置的屬性名和值。 這里的沒有聲明包括當(dāng)使用對象調(diào)用時,訪問控制為proteced,private的屬性(即沒有權(quán)限訪問的屬性)。

  9、__isset() 當(dāng)在一個未定義的屬性上調(diào)用isset()函數(shù)時調(diào)用此方法

  __unset() 當(dāng)在一個未定義的屬性上調(diào)用unset()函數(shù)時調(diào)用此方法

  10、__call( $method, $arg_array )

  當(dāng)調(diào)用一個未定義的方法是調(diào)用此方法

  這里的未定義的方法包括沒有權(quán)限訪問的方法;如果方法不存在就去父類中找這個方法,如果父類中也不存在就去調(diào)用本類的__call()方?法,如果本類中不存在__call()方法就去找父類中的__call()方法。

  11、__autoload() 自動加載魔術(shù)方法


【PHP中如何定義類及其成員屬性與操作】相關(guān)文章:

PHP中MySql操作是什么07-24

php中目錄文件操作詳談09-20

PHP數(shù)據(jù)庫操作類-ezSQL08-19

如何使用php操作redis隊列實例09-15

PHP中多態(tài)如何實現(xiàn)09-04

PHP如何自定義一個函數(shù)09-19

php靜態(tài)成員變量06-22

PHP開發(fā)中關(guān)于文件操作的疑難問答07-22

php如何在一個類中引入另外一個類09-07

從屬性保函的定義09-24