萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php面向對象 $this關鍵字用法詳解

php面向對象 $this關鍵字用法詳解

本文章來給各位同學介紹在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在做了什麼?

 代碼如下 復制代碼 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 
?>

copyright © 萬盛學電腦網 all rights reserved