php 類中的用this或self 引用類中的方法

2022-03-04 19:44:51 字數 5765 閱讀 2609

1樓:李雪寧

呼叫非靜態方法,屬性, 用$this最好啊!!!

2樓:本逸春

執行效率與這兩個操作符沒有關係。

呼叫當前類的靜態方法,規範的寫法是使用 self 而非 $this。

因為當你的php版本小於 5.3.0,使用 $this 會讓**出現解析錯誤,而無法執行。

自 php 5.3.0 起,才可以通過變數來引用類。

php中所有以 $ 開頭的都是變數,所以可以知道 $this 其實是乙個變數,而 self 是常量。

常量在**解析階段就可以確定其值,而變數需要解析之後執行才可以確定。

參考

3樓:匿名使用者

$this 可以引用靜態變數? 我還是頭一回聽。

4樓:

都是千分之一毫秒的事,幹嘛呢

在php中self與$this的分別

5樓:大野瘦子

1、意思上的區別

self代表類,$this代表物件(self是引用靜態類的類名,而$this是引用非靜態類的例項名)

2、用法上的區別

能用$this的地方一定使用self,能用self的地方不一定能用$this。

python中self用法詳解

1、以student類為例,在python中,定義類如下:

class student(object):

pass

(object)表示該類從哪個類繼承下來的,object類是所有類都會繼承的類。

2、例項:定義好了類,就可以通過student類建立出student的例項,建立例項是通過類名+()實現:

student = student()

3、由於類起到模板的作用,因此,可以在建立例項的時候,把我們認為必須繫結的屬性強制填寫進去。這裡就用到python當中的乙個內建方法__init__方法,例如在student類時,把name、score等屬性綁上去:

class student(object):

def __init__(self, name, score):

self.name = name

self.score = score

6樓:匿名使用者

預設public下,靜態變數只有使用::方式才可以訪問 ,非靜態變數::方式不能訪問,靜態或者非靜態的方法都可以被->或::方式訪問。

7樓:匿名使用者

一句話,self是引用靜態類的類名,而$this是引用非靜態類的例項名。

8樓:匿名使用者

self在物件中自己呼叫自己使用

$this在例項化後使用$this方法

9樓:剪輯客

$this,self,parent三個關鍵字從字面上比較好理解,分別是指這、自己、父親。

$this 是指向當前物件的指標,$this表示當前所在類物件這個很不明確,$this取決於自己所在方法被呼叫時的執行環境,當前方法在哪個物件環境下執行,該方法的$this就表示該物件,針對還原一層層到最初始的方法的物件,說得更通俗一點,$this是指向當前物件的指標。

self 是指向當前類的指標;self是指向類本身,也就是self是不指向任何已經例項化的物件,一般self使用來指向類中的靜態變數。假如我們使用類裡面靜態(一般用關鍵字static)的成員,我們也必須使用self來呼叫。還要注意使用self來呼叫靜態變數必須使用::

(域運算符號)

parent是指向父類的指標。parent是指向父類的指標,一般我們使用parent來呼叫父類的建構函式。

相關例項請參考

10樓:匿名使用者

在訪問php類中的成員變數或方法時,如果被引用的變數或者方法被宣告成const(定義常量)或者static(宣告靜態),那麼就必須使用操作符::,

反之如果被引用的變數或者方法沒有被宣告成const或者static,那麼就必須使用操作符->。

另外,如果從類的內部訪問const或者static變數或者方法,那麼就必須使用自引用的self,

反之如果從類的內部訪問不為const或者static變數或者方法,那麼就必須使用自引用的$this。

結論 : self與$this的功能極其相似,但二者又不相同。$this不能引用靜態成員和常量。self更像類本事,而$this更像是例項本身。

php中類的屬性在類中呼叫只必須使用$this嗎?

11樓:匿名使用者

在 sd()裡使用變數a只能用$this->a嗎?

是的類中的echo $b;為什麼會報錯呢?

類中只能有成員變數和成員函式, 這不是變數也不是函式,這是乙個執行語句,所以當然會報錯。

12樓:莘贍

成員屬性的呼叫方式:

在類的成員方法裡面,可以通過 $this->property(property是屬性名字)這種方式來訪問類的屬性、 方法,但是要訪問類的靜態屬性或者在靜態方法裡面卻不能使用,而是使用 self::$property。 在類的非靜態方法裡面可以使用偽變數 $this,這個偽變數是呼叫該方法的例項化物件引用。

13樓:匿名使用者

在 sd()裡使用變數a只能用$this->a,$this指的是當前物件,要向在內部呼叫類的元素就必須用$->this

14樓:匿名使用者

不只是php 物件導向的都不能直接用的,你要的答案:必須用$this,才能實現類中的使用。

15樓:海冰

如果不用$this呼叫,程式不知道你要呼叫的是什麼

php class有沒有靜態跟動態都能呼叫的屬性?

16樓:

php使用static關鍵字宣告靜態屬性和靜態方法

php使用static關鍵字宣告靜態屬性和靜態方法

在php中,通過static關鍵字修飾的成員屬性和成員方法被稱為靜態屬性和靜態方法。

靜態屬性和靜態方法不需要在被類例項化的情況下就可以直接使用。

1. 靜態屬性

靜態屬性就是使用static關鍵字修飾的成員屬性,它屬於類本身而不屬於類的任何例項。它相當於儲存在類中的全域性變數,可以在任何位置通過類來訪問。

靜態屬性不能通過乙個類已例項化的物件來訪問。

靜態屬性訪問的語法格式如下:

類名稱::$靜態屬性名稱

其中的符號「::」被稱為範圍解析操作符,用於訪問靜態屬性、靜態方法和常量,還可以用於覆蓋類中的成員和方法。

在靜態屬性的名稱前加上操作符「self::」,即可在類內部的成員方法中訪問靜態屬性。而只使用類名稱::,則可以在類外面呼叫類內部的靜態屬性。

注意:靜態屬性不可以由物件通過->操作符來訪問。

就像其它所有的php靜態變數一樣,靜態屬性只能被初始化為文字或常量,不能使用表示式。所以可以把靜態屬性初始化為整數或陣列,但不能初始化為另乙個變數或函式返回值,也不能指向乙個物件。

2. 靜態方法

靜態方法就是通過static關鍵字修飾的成員方法。由於它不受任何物件的限制,所以可以不通過類的例項化直接引用類中的靜態方法。

靜態方法可以通過乙個類已例項化的物件來訪問。

靜態方法引用的語法格式如下:

類名稱::靜態方法名稱([引數1,引數2,...])

同樣,在靜態方法的名稱前加上操作符「self::」,即可在類內部的成員方法中引用靜態方法。而只使用類名稱::,則可以在類外面呼叫類內部的靜態方法。

注意:在靜態方法中,只能呼叫靜態變數,而不能呼叫普通變數;而普通方法則可以呼叫靜態變數。

用靜態方式呼叫乙個非靜態方法會導致乙個e_strict級別的錯誤。

由於靜態方法不需要通過物件即可呼叫,所以偽變數$this在靜態方法中不可用。

提示使用靜態成員,除了可以不需要例項化物件,另乙個作用就是在物件被銷毀後,仍然儲存被修改的靜態資料,以便下次繼續使用。

為了相容php 4,如果沒有指定為protected或private,靜態屬性和靜態方法則預設為公有public。

自php 5.3.0起,可以用乙個變數來動態呼叫類,但該變數的值不能為關鍵字self、parent或static。

說明靜態成員不用例項化物件,當類第一次被載入時就已經分配了記憶體空間,所以直接呼叫靜態成員的速度要快一些。但如果靜態成員宣告得過多,空間一直被占用,反而會影響系統的功能。這個尺度只能通過實踐積累才能真正把握!

例項<?php

class website

}echo '第一次例項化呼叫:

';$website=new website(); // 例項化物件

$website->visit(); // 呼叫物件$website的visit()方法

$website->visit();

$website->visit();

echo '

第二次例項化呼叫:

';$website2=new website(); // 改變物件控制代碼例項化物件

$website2->visit();

$website2->visit();

$website2->visit();

?>

php this和self的區別

php self為什麼可以訪問非靜態方法?

17樓:匿名使用者

要明確self 與 this的區別,不要把self與this混淆,這一點很重要:

this 的含義是 「當前物件」 或是 「類的當前例項」,而 self 表示 「當前類」 或 「當前物件所屬的類」。

php中this,self和static的區別

18樓:

php支援類和物件導向結構,php的類的靜態函式和變數不與任何特定類的例項相關聯(換句話說,乙個物件)。

相反,靜態函式和變數與類定義本身相關聯。換言之,乙個類的所有例項都共享相同的靜態變數。在乙個類的方法(函式)的上下文中,靜態變數和函式被訪問使用self::

,在乙個類的物件(例項)的上下文中使用其他方法和變數時用this。

靜態函式只能使用靜態變數,靜態函式和變數的引用是通過 self::函式名() 和 self::變數名。

上述例項中,靜態變數的引用是由類名(exampleclass::$foo),或者 self:: (self::

$foo),當在這個類的靜態方法[稱為 靜態函式()]裡使用時。類的正則函式和變數需要乙個物件上下文來引用,他們不能脫離物件上下文而存在。物件上下文由 $this 提供。

在上述函式中,$bar 是乙個正則變數,所以它被 $obj->bar(上下文使用變數obj) 來引用,或者使用 $this->bar(再次在乙個物件的方法裡在乙個物件上下文中) 來引用。

self 不使用前面的 $,因為 self 不意味著是乙個變數而是類結構本身。而 $this 引用乙個特定的變數,所以有前面的 $ 。

php是幹什麼用的,php中, 是幹什麼用的?

php 是一種用來製作動態網頁的伺服器端指令碼語言。你通過php和html建立頁面。當訪問者開啟網頁時,伺服器端便會處理 php 指令,然後把其處理結果送到訪問者的瀏覽器上面,就好像 asp 或者是 coldfusion 一樣。然而,php 跟 asp 或 coldfusion 不一樣的地方在於,它...

php的問題,php中關於 php 的語法問題 。

是陣列成員訪問符號 是物件成員訪問符號 比如 array array site map map.php 定義了乙個陣列,包含乙個陣列成員 鍵名為site map,值為map.php this name value this 在php語言裡是個特定的變數,它代表了類本身,是訪問其類成員的操作符,thi...

php中的中括號什麼意思,PHP中的中括號什麼意思

php 中的中括號一般是用來通過陣列的鍵名來獲取陣列相應的值,是php中的一種符號 例如 array array a b echo array 0 表單post提交 user post user 表單get提交 user get user 讀取session user session user 或者...