Ⅰ php靜態方法和非靜態方法的區別
靜態方法必須使用static關鍵字聲明,面向對象編程中我們通常通過類的實例(而不是類的本身)來調用類,類其實是對象的模板,但是靜態方法區別於普通類,它不僅可以通過類的實例來調用,還可以通過類來訪問他們,比如 Game::getGame(); 使用類調用的時候使用::,在當前類調用還可以使用self關鍵字,比如 self::getGame(); 靜態方法是以類為作用域,不能訪問類中的普通屬性,因為他們屬於一個對象,但可以訪問靜態屬性。不知道你明白了沒有
Ⅱ php中為什麼$this不能調用靜態變數卻能調用靜態方法
因為靜態變數是所有實例所共用的。$this代表的是實例化後的對象。你可以用self::來調用靜態變數。
Ⅲ php 使用靜態方法的幾個注意事項說明
1.即使類中的方法並未用static聲明,但其未使用到可改變的類成員變數,在外部仍可用操作符::來調用;
2.以靜態方式(用::操作符)調用的方法中$this的取值是由調用時的上下文決定的!而不是定義他的類!!
例如以下的代碼:
<?php
classTestClass1
{
public$normal_v='normal_vfromTestClass1';
publicstatic$STATIC_V='STATIC_VfromTestClass1';
publicfunctiontest_func1()
{
echo$this->normal_v.'<br/>'.self::$STATIC_V;
}
}
classTestClass2
{
public$normal_v='normal_vfromTestClass2';
publicstatic$STATIC_V='STATIC_VfromTestClass2';
publicfunctiontest_func2()
{
TestClass1::test_func1();
}
}
$t2=newTestClass2();
$t2->test_func2();
這段代碼是輸出會是什麼呢,我原以為會是normal_v from TestClass1 <br /> STATIC_V from TestClass1,測試發現其實我錯了,正確的輸出是:
normal_v from TestClass2
STATIC_V from TestClass1
說明:test_func1()雖然是在TestClass1中定義的,但卻是在TestClass2中調用的,其內部的$this變數則是由TestClass2決定的!
其實這兩個類的關系應該屬於"雙向關聯".
Ⅳ php直接用類名調用靜態方法會不會觸發類的構造函數
調用靜態方法與觸發類的構造函數沒有必然關系。但是靜態方法可以實例化類本身,這時候會觸發構造函數,而且可以傳參數。如:
classclassname{
privatefunction__construct($a){
$this->a=$a;
exit($this->a);//列印一下
}
publicstaticfunctionstaticfun($a){
newself($a);
}
}
//usecaseasfollow:
$a='測試123';
classname::staticfun($a);
Ⅳ 靜態方法 有什麼優缺點 PHP中靜態方法(s
static方法是類中的一個成員方法,屬於整個類,即使不用創建任何對象也可以直接調用!
靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。
靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。
C++中,若類的方法前加了static關鍵字,則該方法稱為靜態方法,反之為實例方法。靜態方法為類所有,可以通過對象來使用,也可以通過類來使用。但一般提倡通過類名來使用,因為靜態方法只要定義了類,不必建立類的實例就可使用。靜態方法只能用類的靜態成員。
Ⅵ php 靜態方法為什麼不能調用this
static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱為「類屬性」或「類方法」。
2. 靜態變數的調用方法:只能使用slef:: 或者 類名:: 訪問,不能使用$this訪問;反之,類的成員變數未聲明為const及static時,只能使用$this訪問,不能用::訪問。
Ⅶ php中怎麼調用方法中的靜態變數
看看下面的實例:
<?php
function Test()
{
$w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
本函數每次調用時都會將 $w3sky 的值設為 0 並輸出 "0"。將變數加一的 $w3sky++ 沒有其到效果,因為一旦退出本函數則變數 $w3sky 就不存在了。
要寫一個不會丟失本次計數值的計數函數,要將變數 $w3sky 定義為靜態(static)的:
如下:
<?php
function Test()
{
static $w3sky = 0;
echo $w3sky;
$w3sky++;
}
?>
Ⅷ php直接用類名調用靜態方法會不會觸發類的構造函數
不會呀,只有實例化對象時,才會自動調用構造函數。