本文目錄一覽:
php中This關鍵字我不明白的地方
注意php是弱類語言。。
他不需要事先定義變數的類型也不須事先聲明才可以用。
所以$this-b=12 相當於你var $b=12。然後直接調用像你寫的echo $this-b;
你的例子裡面var $a=13; 就定義了a的值是13。在類裡面你用
$this-a就表明你調用$a這個值;
其實$this就是在本類中直接調用屬性。千萬不能在後面加$符號;
不知道我的理解對你是否有幫助。。我學PHP也不久。。
搞java其實不錯; java的面向對象這塊很完善。而php則是在php5後才更進一步,並沒有java的強
php中this的含義
下面定義了一個Cart類
?php
class Cart
{
var $items; // 購物車中的項目
// 把 $num 個 $artnr 放入車中
function add_item ($artnr, $num)
{
$this-items[$artnr] += $num;
}
// 把 $num 個 $artnr 從車中取出
function remove_item ($artnr, $num)
{
if ($this-items[$artnr] $num) {
$this-items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?
以一段代碼說明問題,在一個類的定義內部,你無法得知使用何種名稱的對象是可以訪問的:在編寫 Cart 類時,並不知道之後對象的名稱將會命名為 $cart 或者 $another_cart。因而你不能在類中使用 $cart-items。然而為了類定義的內部訪問自身的函數和變數,可以使用偽變數 $this 來達到這個目的。$this 變數可以理解為「我自己的」或者「當前對象」。因而 ‘$this-items[$artnr] += $num’ 可以理解為「我自己的物品數組的 $artnr 計數器加 $num」或者「在當前對象的物品數組的 $artnr 計數器加 $num」。
PHP繼承的問題,調用父類的方法this指向問題。
我來說一說:
【一】…………public(僅有)屬性和方法的繼承…………
class a{
public $var = ‘var a br/’;
public function m(){
echo ‘fun a br/’;
}
public function run(){
echo $this-var;
$this-m();
}
}
class b extends a{
public $var = ‘var b br/’;
public function m(){
echo ‘fun b br/’;
}
}
$li = new b();
$li-run();
echo ‘hr’;
var_dump($li);
輸出:
var b
fun b
————————————————————————————
object(b)[1]
public ‘var’ = string ‘var b br/’ (length=11)
在這段代碼中所表示的,是我們常見的一種繼承方式,同為公有屬性的$var 和公有方法m()
在這裡,$var和m()都被繼承並覆寫,實例化過後,內存中只有一個$var實例,通過var_dump($li);我們可以看到它。
【二】…………private(私有)屬性和方法的繼承…………
class a{
private $var = ‘var a br/’;
private function m(){
echo ‘fun a br/’;
}
public function run(){
echo $this-var;
$this-m();
var_dump($this);
echo ‘br/br/’;
}
}
class b extends a{
private $var = ‘var b br/’;
private function m(){
echo ‘fun b br/’;
}
public function run(){
echo $this-var;
$this-m();
var_dump($this);
echo ‘br/br/’;
parent::run();
}
}
$li = new b();
$li-run();
echo ‘hr’;
var_dump($li);
輸出:
var b
fun b
object(b)[1]
private ‘var’ = string ‘var b br/’ (length=11)
private ‘var’ (a) = string ‘var a br/’ (length=11)
.
.
var a
fun a
object(b)[1]
private ‘var’ = string ‘var b br/’ (length=11)
private ‘var’ (a) = string ‘var a br/’ (length=11)
.
————————————————————————————————
object(b)[1]
private ‘var’ = string ‘var b br/’ (length=11)
private ‘var’ (a) = string ‘var a br/’ (length=11)
這個時候,我們可以看到,在調用run方法時,首先它會調用到b類的私有屬性$var 和私有方法m(),隨後,又使用parent::run()調用父類的run()方法,我們可以看到,父類的run()方法調用後,它所調用的屬性和方法,都是a類的兩個私有屬性和方法,這種形式,和你的問題一致;
而它與$this指向無關,我們可以在這裡看到,兩個$this都是指向b類。
而最有意思的是,在$li句柄中,我們卻看到了兩個屬性!一個是b類的屬性,一個是a類的屬性,這兩個屬性同時存在著,那麼,私有方法也自然是同時存在著。
【三】…………私有屬性和方法能不能被繼承…………
class a{
private $var = ‘var a br/’;
private function m(){
echo ‘fun a br/’;
}
}
class b extends a{
public function run(){
echo $this-var;
$this-m();
}
}
$li = new b();
$li-run();
輸出:
Notice: Undefined property: b::$var in E: … on Line 9
Fatal error: Call to private method a::m() from context ‘b’ in E: … on Line 10
這可以證明,私有屬性和方法,無法被繼承,所以,你的代碼示例中所說,將a類的m()方法更改為private後,會顯示aa的屬性,也就可以理解明白了。
php代碼中的this什麼作用
$this-變數名或方法名,指向類中的定義的變數或方法。你這裡的var應該是一個變數,但是我們一般不用這個做變數名,因為var在php4中是關鍵字,php5之後用public代替var來申明一個公共變數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245023.html