php 面向物件:this 關鍵字
阿新 • • 發佈:2018-11-25
PHP5中為解決變數的命名衝突和不確定性問題,引入關鍵字“$this”代表其所在當前物件。
$this在建構函式中指該建構函式所建立的新物件。
在類中使用當前物件的屬性和方法,必須使用$this->取值。
方法內的區域性變數,不屬於物件,不使用$this關鍵字取值。
區域性變數和全域性變數與 $this 關鍵字
使用當前物件的屬性必須使用$this關鍵字。
區域性變數的只在當前物件的方法內有效,所以直接使用。
注意:區域性變數和屬性可以同名,但用法不一樣。在使用中,要儘量避免這樣使用,以免混淆。
1 <?php 2 class A{ 3 private$a = 99; 4 //這裡寫一個列印引數的方法. 5 public function printInt($a){ 6 echo "這裡的 \$a 是傳遞的引數 $a "; 7 echo "<br>"; 8 echo "這裡的 \$this->a 是屬性 $this->a"; 9 } 10 } 11 12 $a = new A(); // 這裡的$a 可不是類中的任何一個變量了. 13 $a->printInt(88);
列印結果是
這裡的 $a 是傳遞的引數 88
這裡的 $this->a 是屬性 99
用$this呼叫物件中的其它方法
1 <?php 2 //寫一個類,讓他自動完成最大值的換算 3 class Math{ 4 //兩個數值比較大小. 5 public function Max($a,$b){ 6 return $a>$b?$a:$b; 7 } 8 //三個數值比較大小. 9 public function Max3($a,$b,$c){ 10 //呼叫類中的其它方法. 11 $a = $this->Max($a,$b); 12 return$this->Max($a,$c); 13 } 14 } 15 $math = new Math(); 16 echo "最大值是 ".$math->Max3(99,100,88);
列印結果是:
最大值是 100
使用$this呼叫建構函式
呼叫建構函式和解構函式的方法一致。
1 <?php 2 class A{ 3 private $a = 0; 4 public function __construct(){ 5 $this->a = $this->a + 1 ; 6 } 7 8 public function doSomeThing(){ 9 $this->__construct(); 10 return $this->a; 11 } 12 } 13 $a = new A(); // 這裡的$a 可不是類中的任何一個變量了. 14 echo "現在 \$a 的值是" . $a->doSomeThing();
列印結果是:
現在 $a 的值是2
$this 到底指的什麼?
$this 就是指當前物件,我們甚至可以返回這個物件使用 $this
1 <?php 2 class A{ 3 public function getASelf(){ 4 return $this; 5 } 6 public function __toString(){ 7 return "這是類A的例項."; 8 } 9 } 10 $a = new A(); // 建立A的例項; 11 $b = $a->getASelf(); //呼叫方法返回當前例項. 12 echo $a; //列印物件會呼叫它的__toString方法.
列印結果是:
這是類A的例項.
通過 $this 傳遞物件
1 <!-- 通過$this 傳遞物件 2 在這個例子中,我們寫一個根據不同的年齡發不同工資的類. 3 我們設定處理年齡和工資的業務模型為一個獨立的類. 4 --> 5 <?php 6 class User{ 7 private $age ; 8 private $sal ; 9 private $payoff ; //宣告全域性屬性. 10 11 //建構函式,中建立Payoff的物件. 12 public function __construct(){ 13 $this->payoff = new Payoff(); 14 } 15 public function getAge(){ 16 return $this->age; 17 } 18 public function setAge($age){ 19 $this->age = $age; 20 } 21 // 獲得工資. 22 public function getSal(){ 23 $this->sal = $this->payoff->figure($this); 24 return $this->sal; 25 } 26 } 27 //這是對應工資與年齡關係的類. 28 class Payoff{ 29 public function figure($a){ 30 $sal =0; 31 $age = $a->getAge(); 32 if($age >80 || $age <16 ){ 33 $sal = 0; 34 }elseif ($age > 50){ 35 $sal = 1000; 36 }else{ 37 $sal = 800; 38 } 39 return $sal; 40 } 41 } 42 //例項化User 43 $user = new User(); 44 45 $user->setAge(55); 46 echo $user->getAge()."age ,his sal is " . $user->getSal(); 47 echo "<br>"; 48 49 $user->setAge(20); 50 echo $user->getAge()."age , his sal is " . $user->getSal(); 51 echo "<br>"; 52 53 $user->setAge(-20); 54 echo $user->getAge()."age , his sal is " . $user->getSal(); 55 echo "<br>"; 56 57 $user->setAge(150); 58 echo $user->getAge()."age , his sal is " . $user->getSal();
列印結果是:
55age ,his sal is 1000
20age , his sal is 800
-20age , his sal is 0
150age , his sal is 0
轉載:http://www.nowamagic.net/php/php_KeywordThis.php