導航:首頁 > 編程語言 > phpselfstatic

phpselfstatic

發布時間:2023-03-18 01:56:03

1. php中this,self和static的區別

  1. PHP支持類和面向對象結構,PHP的類的靜態函數和變數不與任何特定類的實例相關聯(換句話說,一個對象)。

  2. 相反,靜態函數和變數與類定義本身相關聯。換言之,一個類的所有實例都共享相同的靜態變數。在一個類的方法(函數)的上下文中,靜態變數和函數被訪問使用self::,在一個類的對象(實例)的上下文中使用其他方法和變數時用this。

  3. 靜態函數只能使用靜態變數,靜態函數和變數的引用是通過 self::函數名() 和 self::變數名。上述實例中,靜態變數的引用是由類名(exampleClass::$foo),或者self::(self::$foo),當在這個類的靜態方法[稱為 靜態函數()]里使用時。類的正則函數和變數需要一個對象上下文來引用,他們不能脫離對象上下文而存在。對象上下文由$this提供。在上述函數中,$bar 是一個正則變數,所以它被 $obj->bar(上下文使用變數obj) 來引用,或者使用 $this->bar(再次在一個對象的方法里在一個對象上下文中) 來引用。

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

2. 如何理解php中的後期靜態綁定

使用的保留關鍵字:
static
定義:
static:: 不再被解析為定義當前方法所在的類,而是在實際運行時計算的。也可以稱之為「靜態綁定」,因為它可以用於(但不限於)靜態方法的調用。
self與static的區別:
self調用的就是本身代碼片沖野段這個者坦類,而static調用的是從堆內存中提取出來,訪問的是當前實例化的那個類(即static作用散嫌喊於當前調用的類)
示例一(在靜態環境下)
<?phpclass A { public static function who() { echo __CLASS__;
} public static function test() { static::who(); // 後期靜態綁定從這里開始
}
}class B extends A { public static function who() { echo __CLASS__;
}
}

B::test();?>輸出結果是"B"

3. php中self的真正含義是什麼為什麼可以調用父類 的成員和方法 - PHP進階討論

self對應static$this是非static這兩者總和相當於Java裡面的thisparent相當於Java裡面的super我問你
你要在子類中執行父類的構造器怎麼執行?TankMe
發表於
2009-9-9
16:19[i]self是這個類。this是這個類現在創建的對象。而不是單純的只指靜態非靜態。self從理論上在php里是可以調用帆叢任何東西的。。。php6可以支持直接調用靜態和非靜態。因為他是和::符配合的。。。只要是這個類裡面侍判的任何成員和方法都能調態談櫻用。。。你把php所有錯誤提示關閉。就可以執行。。。我記得我以前測試過一下的。。。php5貌似會拋出一個warring。。我忘記當時測試的結果了。但是從文檔上看到得這理論是可行的

4. PHP代碼,能詳細解釋一下每行的意思么多謝了

php中類操作有幾個關鍵字,$this, self, static, parent

$this很好區別,就是實例化後的對象,所以不能在靜態方法里調用

classtestA{
public$name="name";
publicstaticfunctiontest(){
//出錯!static方法不能使用this
echo$this->name;
}
}

self, static, parent 都是靜態調用,後跟 :: 如果是變數,要加$

classtestA{
//屬性也要定義成靜態的,不然也是訪問不了的
publicstatic$name="name";

public$mobile="";

publicstaticfunctiontest(){
//可以訪問
echostatic::$name;

//不可訪問
echostatic::$mobile
}
}

下面說一下三者區別

self 指代當前定義方法所在的類

static 後期靜態綁定的類 ( 實際調用中是哪個類,就代表哪個類,不一定是方法定義所在的類 )

parent 這個也好區別,就是當前定義類的父類

classA{
publicstaticfunctionwho(){
echo__CLASS__;
}
publicstaticfunctiontest(){
static::who();//後期靜態綁定從這里開始
}
}

classBextendsA{
publicstaticfunctionwho(){
echo__CLASS__;
}
}

B::test();

以上代碼,輸出 B

因為最後調用是從B 這個類調用的

classA{
publicstaticfunctionwho(){
echo__CLASS__;
}
publicstaticfunctiontest(){
self::who();
}
}

classBextendsA{
publicstaticfunctionwho(){
echo__CLASS__;
}
}

B::test();

以上代碼,輸出 A

因為調用who時指定了當前類,不管最終從哪裡調用,都會調用到A里定義的方法

另外 ,這三個關鍵字可跟在new 後面,來實例化代表的類,就不用重復寫類名,方便維護。

參考:php:後期靜態綁定

學php可以多看看官方手冊

下面我再簡單解釋下你發的代碼。

你這個應該是thinkphp的model吧,init靜態方法是model的初始化方法,是一個靜態方法,主要用於勾子處理(事件綁定)。這個調用可以從thinkphp的model類中找到。

一般在定義方法時需要覆蓋父類方法,都會調用一下 parent::method() 用於先執行父類的方法,除非特意屏蔽父類初始方法就不調用。

5. php面向對象編程self和static的區別

在php的面向對象編程中,總會遇到
class test{
public static function test(){
self::func();

static::func();
}

public static function func(){}
}
可你知道self和static的區別么?

其實區別很簡單,只需要寫幾個demo就能懂:

Demo for self:

class Car
{
public static function model(){
self::getModel();
}

protected static function getModel(){
echo "This is a car model";
}
}
Car::model();
Class Taxi extends Car
{
protected static function getModel(){
echo "This is a Taxi model";
}
}
Taxi::model();
得到輸出
This is a car model
This is a car model
可以發現,self在子類中還是會調用父類的方法

Demo for static

class Car
{
public static function model(){
static::getModel();
}

protected static function getModel(){
echo "This is a car model";
}
}

Car::model();

Class Taxi extends Car
{
protected static function getModel(){
echo "This is a Taxi model";
}
}

Taxi::model();
得到輸出
This is a car model
This is a Taxi model
可以看到,在調用static,子類哪怕調用的是父類的方法,但是父類方法中調用的方法還會是子類的方法(好繞嘴。。)

在PHP5.3版本以前,static和self還是有一點區別,具體是什麼,畢竟都是7版本的天下了。就顫消此不去了解了。

總茄迅結呢橋握就是:self只能引用當前類中的方法,而static關鍵字允許函數能夠在運行時動態綁定類中的方法。

6. php 中使用private static 方法名 是什麼意思

private 關鍵字聲名 一個私有的方法或屬性;定義了private的方法或屬性在類的外部不能訪問,只能在本類中使用。
類中使用私有方法:
$this->屬性 或 方法()
static 關鍵字 是創建一個靜態方法或靜態屬性;定義了static 的方法或屬性不需要實例化就可以使用。
訪問靜態變數 類名::$變數名;
訪問靜態方法 類名::方法名();
訪問本類靜態變數 self::$變數名;
訪問本類靜態方法 self::方法名();
訪問父類靜態變數 parent::$變數名;
訪問父類靜態方法 parent::方法名();

7. php靜態方法有什麼好處,什麼時候會用啊

  1. static關鍵字用來修飾屬性、方法,稱這些屬性、方法為靜態屬性、靜態方法。

  2. static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱為「類屬性」或「類方法」,如果訪問控制許可權允許,可不必創建該類對象而直接使用類名加兩個冒號「::」調用。

  3. static關鍵字可以用來修飾變數、方法。

  4. 不經過實例化,就可以直接訪問類中static的屬性和static的方法。

  5. static 的屬性和方法,只能訪問static的屬性和方法,不能類訪問非靜態的屬性和方法。因為靜態屬性和方法被創建時,可能還沒有任何這個類的實例可以被調用。

  6. static的屬性,在內存中只有一份,為所有的實例共用。

  7. 使用self:: 關鍵字訪問當前類的靜態成員。一個類的所有實例,共用類中的靜態屬性。也就是說,在內存中即使有多個實例,靜態的屬性也只有一份。

  8. 靜態屬性直接調用 靜態屬性不需要實例化就可以直接使用,在類還沒有創建時就可以直接使用。

8. php中$this,static,final,const,self 等幾個關鍵字的用法

在類的內部方法訪問已經聲明為const及static的屬性時,使用self::$name的形式。注意的是const屬性的申明格式,const
PI=3.14,而不是const $PI=3.14
你的採納是我前進的動力,
記得好評和採納,互相幫助,
如果你認可我的回答,敬請及時採納.
手機提問的朋友在客戶端右上角評價點【滿意】即可.
如果你認可我的回答,請及時點擊【採納為滿意回答】按鈕!

9. php中self與static的區別是什麼

一個是自己,一個是靜態數據,後期綁定中能體現出來

10. PHP 中 new static 和 new self 的區別

我貼一段代碼 這個問題老外解釋的比較好 = =
class A {
public static function get_self() {
return new self();
}

public static function get_static() {
return new static();
}
}

class B extends A {}

echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A
new self 那麼獲取的是當前代碼段的這個類。 這個在class A 中寫的方法 就算你在class B 中繼承了,調用時返回的還是 class A 中的代碼
new static PHP 5.3新增的方法,有點 $this 的味道,調用對應的 class 就返回 對應 class 的方法。

閱讀全文

與phpselfstatic相關的資料

熱點內容
漢語詞典pdf下載 瀏覽:351
android公網ip 瀏覽:611
要塞1地圖放哪個文件夾 瀏覽:848
凡科建站怎麼弄伺服器 瀏覽:939
蘋果手機怎麼設置app播放 瀏覽:202
下載網站源碼用什麼瀏覽器 瀏覽:241
六線譜pdf 瀏覽:156
linuxmysqlsock 瀏覽:239
人教版數學pdf下載 瀏覽:460
文檔安全加密系統 瀏覽:491
數控銑床編程簡單數字 瀏覽:788
編程電纜如何重啟 瀏覽:121
myqq命令行發消息 瀏覽:365
日產逍客怎麼使用app升窗 瀏覽:503
安卓系統怎麼快速刪除微信內容 瀏覽:653
csharppython 瀏覽:409
程序員脖子按摩儀 瀏覽:563
小米桌面文件夾亂碼怎麼回事 瀏覽:858
點歌台app怎麼連接 瀏覽:318
大學電腦編程學什麼好 瀏覽:348