導航:首頁 > 編程語言 > php靜態方法繼承

php靜態方法繼承

發布時間:2022-08-31 09:27:17

php static 方法有什麼好處

  1. 靜態方法不需要所在類被實例化就可以直接使用。

  2. 靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。

  3. 靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。

⑵ php父類如何調用子類的靜態方法或變數

<?php
classA{
staticpublic$m=1;
staticpublicfunctionm(){
echostatic::$m,'<br/>';
}
staticpublicfunctionn(){
static::n();
}
}
classBextendsA{
staticpublic$m=111;
staticpublicfunctionm(){
parent::m();
}
staticpublicfunctionn(){
echoparent::$m,'<br/>';
}
}
B::m();
B::n();

⑶ php 什麼時候 靜態方法

當一個方法被執行時才占內存,執行完畢就釋放了,靜態函數載入時會放到靜態區,暫時不佔內存

⑷ php 靜態方法 是什麼意思

<?php
header('content-type:text/html;charset=utf-8');
/*
普通方法,存放類內,只有一份
靜態方法,也是存放於類內,只有一份
區別在於:普通方法需要對象去調用,需要綁定$this
即,普通方法,必須要有對象,然後讓對象來調用
而靜態方法,不屬於哪一個對象,因此不需要綁定$this
即,不需要對象也可以調用
*/
class Human{
static public $head=1;
public function easyeat(){
echo '普通方法吃飯<br />';
}
static public function eat(){
echo '靜態方法吃飯<br />';
}
public function intro(){
echo $this->name;
}
}
Error_reporting(E_ALL|E_STRICT);
//此時沒有對象!方法可以執行
Human::eat();
/*
以下方法easyeat是一個非靜態方法,就由對象來調用,但,用類來調用此方法來也可以執行,而嚴格狀態下,此方法會執行,同時報錯,
Strict Standards: Non-static method Human::easyeat() should not be called statically in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 32
*/
Human::easyeat();
/*
接上,從邏輯來理解,如果用類名靜態調用非靜態(普通)方法
比如:intro()
那麼,這個$this是指哪個對象呢??
因此會報錯,因為找不到對象!
Fatal error: Using $this when not in object context in D:\application\PHPnow-1.5.6\htdocs\yan18\types\staticfun.php on line 23
*/
Human::intro();
/*
如上分析,其實,非靜態方法,是不能由類名靜態調用的,但目前,php中的面向對象檢測不夠嚴格,只要靜態方法中沒有$this關鍵字,就會轉化成靜態方法來處理!
*/
$li=new Human();
$li->eat();
/*
總結:
類》訪問->靜態方法(類的方法)->可以
類》訪問->普通方法(對象的方法)->不可以(雖然方法里不用$this關鍵字時,可以!但不支持這種寫法)
對象》訪問》靜態方法(類的方法)->可以
對象》訪問》普通方法(對象的方法)->可以
*/
?>

⑸ 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中靜態類的繼承

樓主這個問題跟靜態沒有多大關系,主要是繼承的概念沒有搞清楚,繼承一個類是將子類擁有了調用父類的方法和屬性的權利,並不是說將父類的方法復制到了子類中self方法相當於當前類的指針,你那樣調用相當於寫了
public static function test() {
parent::who();
}
這樣的代碼,所以才會出現那樣的結果

⑺ 靜態方法 有什麼優缺點 PHP中靜態方法(s

static方法是類中的一個成員方法,屬於整個類,即使不用創建任何對象也可以直接調用!
靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。
靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。
C++中,若類的方法前加了static關鍵字,則該方法稱為靜態方法,反之為實例方法。靜態方法為類所有,可以通過對象來使用,也可以通過類來使用。但一般提倡通過類名來使用,因為靜態方法只要定義了類,不必建立類的實例就可使用。靜態方法只能用類的靜態成員。

⑻ php c c++等編程語言中 靜態方法public private protected 類和方法的理解。

在本類中,protected與private是相同的,但protected可以被繼承,而private卻不行。
只有公有成員才能在類的外部訪問。如class A{private:int a;public:int b;protected:int c;};A ca;ca.a //error
ca.b // ok
ca.c //error
cb.c //error。雖然c也是B的成員,但c在被繼承的時候變成私有或者受保護的成員了。

⑼ php 繼承時,方法可見性只能更高,即對於同一方法,父類為protected ,子類只能是protected 或者 public.

一個語言一種規矩,沒必要較真去比較,如果都一樣了,那就不是php了,php還是單繼承呢,你怎麼不去較真,php是5.0以後引用的面向對象,5.0之前照樣能實現工作,你怎麼不說java非要用面向對象去寫呢,一個道理,別較真

⑽ php繼承中方法重載(覆蓋)的應用場合

本文實例分析了php繼承中方法重載(覆蓋)的應用場合。分享給大家供大家參考。具體分析如下:
方法重載(override)/覆蓋——在什麼情況下使用:當父類知道所有的子類都需要用到一個方法,但父類不知道怎麼去寫這個方法時,就需要用到方法的重載。這時候,可以讓子類去重寫,來覆蓋這個方法。
通俗實例——父類(動物)知道其子類(貓和狗)都會叫,但它們的叫法都不一樣,所以父類沒法去寫這個方法,只能讓子類(貓和狗)去定義。代碼如下:
<?php
class
Animal{
public
$name;
protected
$price;
function
cry(){
echo
"不知道動物怎麼叫";
}
}
class
Dog
extends
Animal{
function
cry(){
echo
"汪汪...";
}
}
class
Pig
extends
Animal{
function
cry(){
echo
"哼哼..."
}
}
?>
方法重載/覆蓋的要點與細節(讀起來有點呦口):
1、要求子類的方法,其方法名稱、參數列表與父類方法一模一樣。如例子中cry(),不能添加參數,改成cry($naaa)等。注意:這里並不要求參數名一樣,只是要求參數的個數是一樣的。
2、所謂的重載或覆蓋,並不是將父類的方法覆蓋。也可以這么理解:如果子類有調用該方法時,如果在自己類里找不到這個方法,那麼它會去找父類里,看有沒有這個方法。這也是多態的理解
3、如果子類里某個方法,要把父類里相同名稱方法里的內容繼承下來,可以使用
parent::方法名

父類名::方法名
繼承。在子類定義的方法內使用。
4、訪問許可權問題,子類的訪問范圍>=父類的訪問范圍,即如果父類是protected
function
cry(),子類則只能是protected或public。
希望本文所述對大家的php程序設計有所幫助。

閱讀全文

與php靜態方法繼承相關的資料

熱點內容
常用cmd網路命令 瀏覽:676
hashmap7源碼分析 瀏覽:896
搜索引擎原理技術與系統pdf 瀏覽:359
運動估計演算法python 瀏覽:858
java正則1 瀏覽:536
redhatlinux最新 瀏覽:177
python字典編程詞彙 瀏覽:144
微信和伺服器如何通訊 瀏覽:10
百家號伺服器配置有什麼用 瀏覽:598
怎麼為電腦加密 瀏覽:58
伺服器出現差錯是什麼意思 瀏覽:616
蘋果app移到商店裡怎麼刪掉 瀏覽:254
phpjsphtml 瀏覽:63
吃雞手機國際服伺服器超時怎麼辦 瀏覽:68
努比亞Z5無命令 瀏覽:642
展示網站雲伺服器 瀏覽:872
代碼混淆器php 瀏覽:367
貝恩pdf 瀏覽:209
丙烯pdf 瀏覽:368
雲伺服器華碩 瀏覽:713