thinkphp 類中this關(guān)鍵字

PHP5中為解決變量的命名沖突和不確定性問題,引入關(guān)鍵字“$this”代表其所在當(dāng)前對(duì)象。
$this在構(gòu)造函數(shù)中指該構(gòu)造函數(shù)所創(chuàng)建的新對(duì)象。
在類中使用當(dāng)前對(duì)象的屬性和方法,必須使用$this->取值。
方法內(nèi)的局部變量,不屬于對(duì)象,不使用$this關(guān)鍵字取值。
局部變量和全局變量與 $this 關(guān)鍵字,使用當(dāng)前對(duì)象的屬性必須使用$this關(guān)鍵字。局部變量的只在當(dāng)前對(duì)象的方法內(nèi)有效,所以直接使用。
注意:局部變量和屬性可以同名,但用法不一樣。在使用中,要盡量避免這樣使用,以免混淆。

<?php
class A
{
    private $a = 99;
    //這里寫一個(gè)打印參數(shù)的方法
    public function printInt($a) {
        echo "/$a是傳遞的參數(shù) $a ";
        echo "<br />";
        echo "/$this->a 是屬性 $this->a";
    }
}
$a = new A();    //這里的$a可不是類中的任何變量
$a->printInt(88);
?>

用$this調(diào)用對(duì)象中的其它方法

<?php
class Math
{
    //兩個(gè)數(shù)值比較大小
    public function Max($a, $b) {
        return $a > $b ? $a : $b;  
    }
    //三個(gè)數(shù)值比較大小
    public function Max3($a, $b, $c) {
        $a = $this->Max($a, $b);     //調(diào)用類中的其它方法
        return $this->Max($a, $c);  
    }
}
$math = new Math();
echo "最大值是 " . $math->Max3(99, 100, 88);
?>

使用$this調(diào)用構(gòu)造函數(shù)

調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的方法一致。

<?php
class A
{
    private $a = 0;
    public function __construct() {
        $this->a = $this->a + 1;
    }
    public function doSomeThing() {
        $this->__construct();
        return $this->a;
    }
}
$a = new A(); // 這里的$a 可不是類中的任何一個(gè)變量了
echo "現(xiàn)在 /$a 的值是" . $a->doSomeThing();
?>

$this 到底指的什么?
$this 就是指當(dāng)前對(duì)象,我們甚至可以返回這個(gè)對(duì)象使用 $this。

<?php
class A
{
    public function  getASelf() {
        return $this;
    }
    public function __toString() {
        return "這是類A的實(shí)例";
    } 
}
$a = new A();    //創(chuàng)建A的實(shí)例
$b = $a->getASelf();    //調(diào)用方法返回當(dāng)前實(shí)例
echo $a;    //打印對(duì)象會(huì)調(diào)用它的__toString方法
?>

通過 $this 傳遞對(duì)象
在這個(gè)例子中,我們寫一個(gè)根據(jù)不同的年齡發(fā)不同工資的類。我們?cè)O(shè)置處理年齡和工資的業(yè)務(wù)模型為一個(gè)獨(dú)立的類。

<?php
class User
{
    private $age ;
    private $sal ;
    private $payoff ;    //聲明全局屬性
    //構(gòu)造函數(shù),中創(chuàng)建Payoff的對(duì)象
    public function __construct() {
        $this->payoff = new Payoff();
    } 
    public function getAge() {
        return $this->age;
    }
    public function setAge($age) {
        $this->age = $age;
    } 
    // 獲得工資
    public function getSal() {
        $this->sal =  $this->payoff->figure($this);
        return $this->sal;
    }
}
//這是對(duì)應(yīng)工資與年齡關(guān)系的類.
class Payoff
{
    public function figure($a) {
          $sal =0;
        $age = $a->getAge();
        if ($age > 80 || $age < 16 ) {
            $sal = 0;
        } elseif ($age > 50) {
            $sal = 1000;
        } else {
            $sal = 800;
        }
        return $sal;
    }
}
//實(shí)例化User
$user = new User();
$user->setAge(55);
echo $user->getAge() . " age, his sal is " . $user->getSal();
echo "<br />";
$user->setAge(20);
echo $user->getAge() . " age, his sal is " . $user->getSal();
echo "<br />";
$user->setAge(-20);
echo $user->getAge() . " age, his sal is " . $user->getSal();
echo "<br />";
$user->setAge(150);
echo $user->getAge() . " age, his sal is " . $user->getSal();
?>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,824評(píng)論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,869評(píng)論 18 399
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,761評(píng)論 9 118
  • JMeter也學(xué)了一陣子了,對(duì)于基本的操作已了解,再回過頭來看看Jmeter的目錄,本篇是對(duì)于它的目錄進(jìn)行一些簡單...
    宇文臭臭閱讀 579評(píng)論 0 0
  • 自從膜拜和OFO等等無樁共享單車出現(xiàn),人們的出行變得越來越方便,不想擠公交又不想打車?掃一輛共享車好了! 年初,街...
    飛花如雪閱讀 442評(píng)論 0 4

友情鏈接更多精彩內(nèi)容