欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

self、static、parent關(guān)鍵字怎么在PHP中使用-創(chuàng)新互聯(lián)

self、static、parent關(guān)鍵字怎么在PHP中使用?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、玉泉街道網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)購物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為玉泉街道等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

不存在繼承的時(shí)候


不存在繼承的意思就是,就書寫一個(gè)單獨(dú)的類來使用的時(shí)候。self和static在范圍解析操作符 (::) 的使用上,并無區(qū)別。

  • 在靜態(tài)函數(shù)中,self和static可以調(diào)用靜態(tài)屬性和靜態(tài)函數(shù)(沒有實(shí)例化類,因此不能調(diào)用非靜態(tài)的屬性和函數(shù))。

  • 在非靜態(tài)函數(shù)中,self和static可以調(diào)用靜態(tài)屬性和靜態(tài)函數(shù)以及非靜態(tài)函數(shù)

此時(shí),self和static的表現(xiàn)是一樣的,可以替換為該類名::的方式調(diào)用。

<?php
class Demo{
 public static $static;
 public $Nostatic; 
 public function __construct(){
  self::$static = "static";
  $this->Nostatic = "Nostatic";
 }
 public static function get(){
  return __CLASS__;
 }
 public function show(){
  return "this is function show with ".$this->Nostatic;
 }
 public function test(){
  echo Demo::$static."<br/>"; //使用類名調(diào)用靜態(tài)屬性
  echo Demo::get()."<br/>"; //使用類名調(diào)用靜態(tài)屬性
  echo Demo::show()."<br/>"; //使用類名調(diào)用靜態(tài)屬性
  echo self::$static."<br/>"; //self調(diào)用靜態(tài)屬性
  echo self::show()."<br/>"; //self調(diào)用非靜態(tài)方法
  echo self::get()."<br/>"; //self調(diào)用靜態(tài)方法
  echo static::$static."<br/>";//static調(diào)用靜態(tài)屬性
  echo static::show()."<br/>";//static調(diào)用非靜態(tài)方法
  echo static::get()."<br/>"; //static調(diào)用靜態(tài)方法
 }
}
$obj = new Demo();
$obj->test();

輸出結(jié)果:

static
Demo
this is function show with Nostatic
static
this is function show with Nostatic
Demo
static
this is function show with Nostatic
Demo

繼承的時(shí)候

在繼承時(shí),self和static在范圍解析操作符 (::) 的使用上有差別。parent也是在繼承的時(shí)候使用的。

<?php
class A{
 static function getClassName(){
  return "this is class A";
 }
 static function testSelf(){
  echo self::getClassName();
 }
 static function testStatic(){
  echo static::getClassName();
 }
}
class B extends A{
 static function getClassName(){
  return "this is class B";
 }
}
B::testSelf();
echo "<br/>";
B::testStatic();

輸出結(jié)果:

this is class A
this is class B

self調(diào)用的靜態(tài)方法或?qū)傩允冀K表示其在使用的時(shí)候的當(dāng)前類(A)的方法或?qū)傩裕梢蕴鎿Q為其類名,但是在類名很長或者有可能變化的情況下,使用self::的方式無疑是更好的選擇。

static調(diào)用的靜態(tài)方法或?qū)傩詴诶^承中被其子類重寫覆蓋,應(yīng)該替換為對應(yīng)的子類名(B)。

parent關(guān)鍵字用于調(diào)用父類的方法和屬性。在靜態(tài)方法中,可以調(diào)用父類的靜態(tài)方法和屬性;在非靜態(tài)方法中,可以調(diào)用父類的方法和屬性。

<?php
class A{
 public static $static;
 public $Nostatic; 
 public function __construct(){
  self::$static = "static";
  $this->Nostatic = "Nostatic";
 }
 public static function staticFun(){
  return self::$static;
 }
 public function noStaticFun(){
  return "this is function show with ".$this->Nostatic;
 }
}
class B extends A{
 static function testS(){
  echo parent::staticFun();
 }
 function testNoS(){
  echo parent::noStaticFun();
 }
}
$obj = new B();
$obj->testS();
echo "<br/>";
$obj->testNoS();

輸出結(jié)果

static
this is function show with Nostatic

在文章的最后,我們分析一個(gè)手冊上的例子

<?php
class A {
 public static function foo() {
  static::who();
 }
 public static function who() {
  echo __CLASS__."\n";
 }
}
class B extends A {
 public static function test() {
  A::foo();
  parent::foo();
  self::foo();
 }
 public static function who() {
  echo __CLASS__."\n";
 }
}
class C extends B {
 public static function who() {
  echo __CLASS__."\n";
 }
}
C::test();
?>

輸出結(jié)果

A
C
C

我們單獨(dú)拿出test方法進(jìn)行分析:

public static function test() {
  A::foo();
  parent::foo();
  self::foo();
}

1)A::foo();這個(gè)語句是可以在任何地方執(zhí)行的,它表示使用A去調(diào)用靜態(tài)方法foo()得到'A'。

2)parent::foo();C的parent是B,B的parent是A,回溯找到了A的foo方法;static::who();語句中的static::調(diào)用的方法會被子類覆蓋,所以優(yōu)先調(diào)用C的who()方法,如果C的who方法不存在會調(diào)用B的who方法,如果B的who方法不存在會調(diào)用A的who方法。所以,輸出結(jié)果是'C'。[注1]

3)self::foo();這個(gè)self::是在B中使用的,所以self::等價(jià)于B::,但是B沒有實(shí)現(xiàn)foo方法,B又繼承自A,所以我們實(shí)際上調(diào)用了A::foo()這個(gè)方法。foo方法使用了static::who()語句,導(dǎo)致我們又調(diào)用了C的who函數(shù)。[注2]

注1:補(bǔ)充解釋上面的(2)

<?php
class A {
 public static function foo() {
  static::who();
 }
 public static function who() {
  echo __CLASS__."\n";
 }
}
class B extends A {
 public static function test() {
  A::foo();
  parent::foo();
  self::foo();
 }
 public static function who() {
  echo __CLASS__."\n";
 }
}
class C extends B {
 // public static function who() {
 //  echo __CLASS__."\n";
 // }
}
C::test();
?>

輸出結(jié)果:

A B B

注2:補(bǔ)充解釋上面的(3)

<?php
class A {
 public static function foo() {
  static::who();
 }
 public static function who() {
  echo __CLASS__."\n";
 }
}
class B extends A {
 public static function test() {
  A::foo();
  parent::foo();
  self::foo();
 }
 public static function foo() {
  echo "fooB"."\n";
 }
 public static function who() {
  echo __CLASS__."\n";
 }
}
class C extends B {
 public static function foo() {
  echo "fooC"."\n";
 }
 public static function who() {
  echo __CLASS__."\n";
 }
}
C::test();
?>

輸出結(jié)果:

A C fooB

關(guān)于self、static、parent關(guān)鍵字怎么在PHP中使用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

文章名稱:self、static、parent關(guān)鍵字怎么在PHP中使用-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://www.chinadenli.net/article26/docscg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)ChatGPT虛擬主機(jī)關(guān)鍵詞優(yōu)化域名注冊外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)