在前面我們知道,在對象外部訪問對象成員屬性和方法,使用對象的引用來完成。而在對象內部中,成員方法訪問自己對象中的其它成員屬性或者成員方法,要使用特殊的對象引用"$this->值"的形式來訪問,成員屬於哪個對象,$this引用就代表哪個對象,並且只能在對象的成員方法中使用。
為了解決php類和對象中變量與屬性的命名沖突和不確定性問題,引入了”$this”關鍵字來調用當前的對象。
在類中調用當前對象的屬性和方法,必須使用”$this->”關鍵字;$this在構造函數中指該構造函數所創建的新對象;方法內的局部變量不屬於對象,不使用$this關鍵字取值。使用$this關鍵字,我們可以在類中調用對象屬性或者方法。
1、調用變量
實例:
代碼如下 復制代碼 <?php2、調用方法
實例:
代碼如下 復制代碼<?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在做了什麼?
上例輸出:
執行結果
我的名子叫:張三性別:男我的年齡是: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
?>