編碼的世界 / 優質文選 / 文明

php 中self,this的區別和實地操作


2021年10月07日
-   

面向對象編程(OOP,Object OrientedProgramming)現已經成為編程人員的一項基本技能。利用OOP的思想進行PHP的高級編程,對於提高PHP編程能力和規劃web開發構架都是很有意義的。
這裏我主要談的是this,self關鍵字之間的區別。從字面上來理解,分別是指這、自己。先初步解釋一下,this是指向當前對象的指針(可以看成C裏面的指針),self是指向當前類的指針。我們這裏頻繁使用指針來描述
因為經常用框架的緣故,所以對php底層的一些運行機制和方法都不會了,所以最近比較喜歡研究這些底層的東西,寫的東西雖然不是很好,但是自己一步步實地操作過來的,理解起來也比較容易,現在網上大多數的資料要麼就是按照手冊抄過來很官方的一些話,要麼就是那些千篇一律的文章,確實有些不好理解,所以只能自己動手來熟悉啦
一. self
.    1.self可以訪問本類中的靜態屬性和靜態方法,可以訪問父類中的靜態屬性和靜態方法。用self時,可以不用實例化的
 class self_test {
static $instance;
public function __construct(){
self::$instance = 'instance';//靜態屬性只能通過self來訪問
}
public function tank(){
return self::$instance;//訪問靜態屬性
}
}
$str = new self_test();
echo $str->tank();

頁面輸出:instance
 class self_test {
static $instance;
public function __construct(){
self::$instance = 'dell';
}
static public function pentium(){
return self::$instance;//靜態方法也可以繼續訪問靜態變量,訪問時需要加$
}
public function tank(){
return self::pentium();//訪問靜態方法pentium()
}
}
$str = new self_test();
echo $str->tank();
頁面輸出:dell
     2.
self可以訪問const定義的常量
 class self_test {
const NAME = 'tancy';
public function tank(){
return self::NAME;
}
}
$str = new self_test();
echo $str->tank();
頁面輸出:tancy
二.this
      1.this可以調用本類中的方法和屬性,也可以調用父類中的可以調的方法和屬性,可以說除過靜態和const常量,基本上其他都可以使用this聯絡
  
 class self_test {
public $public;
private $private;
protected $protected;
public function __construct(){
$this->public = 'public';
$this->private = 'private';
$this->protected = 'protected';
}
public function tank(){
return $this->public;
}
public function dell(){
return $this->private;
}
public function datesrt(){
return $this->protected;
}
}
$str = new self_test();
echo $str->tank();
echo "</br>";
echo $str->dell();
echo "</br>";
echo $str->datesrt();

頁面輸出: public        private        protected
一句話,self是引用靜態類的類名,而$this是引用非靜態類的實例名。

熱門文章