本文章來給各位同學介紹在php類中我們會常用到this 關鍵字了,下面我簡單的分析一下在php面向對象 $this關鍵字用法希望此教程對各位同學會有所幫助呀。
在前面我們知道,在對象外部訪問對象成員屬性和方法,使用對象的引用來完成,而在對象內部中,成員方法訪問自己對象中的其它成員屬性或者成員方法,要使用特殊的對象引用"$this->值"的形式來訪問,成員屬于哪個對象,$this引用就代表哪個對象,并且只能在對象的成員方法中使用。
為了解決php類和對象中變量與屬性的命名沖突和不確定性問題,引入了”$this”關鍵字來調用當前的對象。
在類中調用當前對象的屬性和方法,必須使用”$this->”關鍵字;$this在構造函數中指該構造函數所創建的新對象;方法內的局部變量不屬于對象,不使用$this關鍵字取值。使用$this關鍵字,我們可以在類中調用對象屬性或者方法。
1、調用變量
實例代碼如下:
- <?php
- class user{
- private $n;
- function __construct(){
- $name="Mike";
- echo $this->n=$name;
- }
- }
- $p=new user();
- ?>
2、調用方法
實例代碼如下:
- <?php
- class cal{
- public function sum($a,$b){
- return $a+$b;
- }
- public function prt($a,$c){
- return $a*$c;
- }
- public function result($a,$b,$c){
- $a=$this->sum($a,$b);
- return $this->prt($a,$c);
- }
- }
- $c=new cal();
- echo "(2+3)*10= " .$c->result('2','3','10');
- ?>
我們來看一下下面的例子,$this在做了什么?實例代碼如下:
- <?php
- class Person{
- //下面是人的成員屬性
- var $name; //人的名子
- var $sex; //人的性別
- var $age; //人的年齡
- //定義一個構造方法參數為屬性姓名$name、性別$sex和年齡$age進行賦值
- function __construct($name="", $sex="", $age=""){
- $this->name=$name;
- $this->sex=$sex;
- $this->age=$age;
- }
- //這個人可以說話的方法, 說出自己的屬性
- function say() {
- echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
- }
- //對象克隆時自動調用的方法, 如果想在克隆后改變原對象的內容,需要在__clone()中重寫原本
- 的屬性和方法
- function __clone(){
- //$this指的復本p2, 而$that是指向原本p1,這樣就在本方法里,改變了復本的屬性。
- $this->name="我是假的$that->name";
- $this->age=30;
- }
- }
- $p1=new Person("張三", "男", 20);
- $p2=clone $p1;
- $p1->say();
- $p2->say();
- ?>
上例輸出:
執行結果
我的名子叫:張三性別:男我的年齡是:20
我的名子叫:我是假的張三性別:男我的年齡是:30
我們來看一下上面的代碼中$this做了什么:
1、訪問對象內部的成員,如$this->name
2、訪問對象的其它方法,如在say()方法內部訪問了其之外的$this->run()和$this->eat("apple")方法。
另外還有一點值得注意的是,局部變量和成員屬性可以同名,但作用范圍和訪問方式不一樣,如在eat()方法體內的$name相當于局部變量,其作用范圍只限于eat方法內部,而Person的成員屬性聲明部分的 $name,則相當于全局變量,可以其它方法中使用$this->name的形式訪問。
實例代碼如下:
- <?php
- class UserName
- {
- //定義屬性
- private $name;
- //定義構造函數
- function __construct( $name )
- {
- $this->name = $name;
- //這里已經使用了this指針
- }
- //析構函數
- function __destruct(){}
- //打印用戶名成員函數
- function printName()
- {
- print( $this->name );
- //又使用了PHP關鍵字this指針
- }
- }
- //實例化對象
- $nameObject = new UserName
- ( "heiyeluren" );
- //執行打印
- $nameObject->printName();
- //輸出: heiyeluren
- //第二次實例化對象
- $nameObject2 = new UserName( "PHP5" );
- //執行打印
- $nameObject2->printName(); //輸出:PHP5
- ?>
新聞熱點
疑難解答