當前位置:首頁 » 密碼管理 » 如何訪問靜態成員php

如何訪問靜態成員php

發布時間: 2024-09-21 22:14:22

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

php父類中怎麼調用子類的的靜態屬性了,Oh,my god,如果被面試官問道這種問題,你一定會說shit,fucky question。你會說我很少這么做,況且php對於靜態的操作太隨意了,php在父類調用子類的靜態屬性是一件麻煩的事情。我們知道子類中調用父類的靜態屬性,可以用self::的形式。但是父類調用子類如果用self::就只能調用到父類的靜態屬性。那麼,怎麼辦了?php是不是無法做到了?答案當然是否定的,php中還可以使用在父類中用子類的類名來調用的方法。
不過,這當中仍然存在一個問題,就是如果我有多個類繼承了同一個父類,而且父類的某個函數要用到各個子類的靜態屬性的話,就想當trouble了。這里有個php的朋友提供了一種思路,採用在子類中重載父類的方法使父類得到靜態屬性。父類中使用了get_class函數得到類名,get_class()是父類名,get_class($this)是子類名。好了得到這個再用eval函數做下執行語句就OK啦。例子:
//父類class A {
public function __con(){
//這里主要為讓大家看清楚,所以列印出來類名,供大家學習
echo(get_class($this)).'/';
echo(get_class()).'/';
eval(\$ab = . get_class($this) . ::\$table;);echo $ab;}}//子類Bclass B extends A {
static $table = 'b table';
function __construct(){
$this-__con();}}//子類Cclass C extends A{
static $table = 'c table';
function cc(){
$this-__con();}}//調用
new B; //輸出結果 B A b table
$c = new C;
上面就是php父類調用子類靜態成員的方法,在子類重載父類的方法還是相當不錯的 ,當時聽朋友提起這個時,就異常激動。父類我們也叫做基類,或者底層類。一般都是最先設計,子類就是根據各個需要來設計,所以我們子類修改的可能性比較大,操作靈活性也比較大。

② php中::是什麼意思

PHP中的『::』是一種內置的語法解析符號,中文名叫做「范圍解析操作符」。:: 符號是用來幫助PHP中的語法結構「類」來實現對其成員的訪問,通常我們只允許訪問靜態成員,具體代碼如下:

① 類正常訪問靜態成員

class Heima{
//靜態屬性
public static $heima = '黑馬';
//靜態方法
public static function getHeima(){
//內部使用::
echo self::$heima; //self代表Heima類,同Heima::$heima
}
}

//外部訪問
echo Heima::$heima; //訪問靜態屬性,輸出黑馬
Heima::getHeima(); //訪問靜態方法,輸出黑馬
② 類訪問普通方法(系統不建議,有風險,風險原因網頁鏈接)

class Heima{
//普通方法
public function show(){
echo __CLASS__; //輸出當前所屬類類名
}
}

//正常應該是對象訪問 $h = new Heima();$h->show();
//靜態訪問
Heima::show(); //系統會提示點什麼,但是可以訪問
//其實對象也可以利用::符號訪問
$h = new Heima();
$h::show(); //效果也能達成,但是我們通常不建議這么使用
有關這類的基礎知識,到黑馬程序員論壇裡面去看基礎知識的視頻吧。還有筆記。不然這么問,耽誤自學時間
?

③ php 靜態方法為什麼不能調用this

static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱為「類屬性」或「類方法」。
2. 靜態變數的調用方法:只能使用slef:: 或者 類名:: 訪問,不能使用$this訪問;反之,類的成員變數未聲明為const及static時,只能使用$this訪問,不能用::訪問。

④ PHP高級程序設計:模式、框架與測試目錄

PHP 高級程序設計:模式、框架與測試目錄

第一部分:OOP 和模式

深入探討面向對象編程(OOP)的核心概念及其在 PHP 中的應用。了解抽象類、介面和契約式編程的基本原理和實踐。

第1章:抽象類、介面和契約式編程

- 探索抽象類的定義和實現,學習如何通過抽象類提供通用代碼和行為的藍圖。
- 了解介面的用途,掌握如何定義和實現介面以確保類遵循特定的行為規范。
- 熟悉 `instanceof` 操作符的用法,用於檢查對象是否符合特定類或介面。
- 掌握契約式編程的技巧,確保代碼的可預測性和可維護性。

第2章:靜態變數、成員和方法

- 理解靜態變數的特性,學習如何在類中聲明和使用靜態變數。
- 掌握靜態成員的使用,了解它們與普通成員的區別。
- 介紹雙冒號(paamayim nekudotayim)符號,以及它在 PHP 中如何用於訪問靜態成員。
- 探討靜態方法的定義和調用,理解它們的作用和優勢。
- 討論「靜態」特性的爭議點,評估靜態屬性和方法在不同場景下的適用性。

第3章:單例模式和工廠模式

- 分析職責和單例模式的概念,了解如何設計單例類以確保全局資源的唯一實例。
- 學習工廠模式的原理,掌握如何創建和管理對象的實例。
- 通過具體示例(如圖像對象工廠和可移植的資料庫)展示工廠模式在實際應用中的作用。

隨著深入學習這些設計模式和面向對象編程原則,您將能夠構建更高效、更易於維護的 PHP 應用程序。理解這些模式的基礎知識,將有助於在項目中實現更好的代碼組織、解耦和可擴展性。

⑤ 說說php面向對象編程時static,public,private,protected 各有什麼意義

staticpublic與publicstatic是等價的,這兩者只是兩個修飾符的順序不同。根據oracle.com教材中第八章的描述,如果兩個或兩個以上的(不同的)欄位修飾符出現在欄位聲明,它們出現的順序需與FieldModifier一致,這只是習慣,但不是必需的。部分修飾符說明:public是訪問許可權修飾符,用於控制外界對類內部成員的訪問,聲明為public的對象成員是完全共有的,外界可以隨意訪問,除此之外還有private,protected和默認。static控制類成員變化的修飾符。static是靜態成員修飾符,其修飾的靜態變數脫離具體對象獨立存在,在內存中之後一份拷貝,所有的對象都公用這一個存儲空間,所以對static修飾的靜態變數進行的修改對該類的所有對象都起作用。static修飾的靜態函數代表所有對象的統一操作,只能調用靜態變數。static是針對面向對象中的「多態」而提出來的,static修飾的靜態成員不存在多態性。附:FieldModifier順序

⑥ 關於 php 類 關鍵字 public static 連用的問題

static是靜態成員的聲明關鍵字,跟public不沖突
static控製成員的存在周期,public控製成員的訪問許可權

public static聲明這個變數為public就是可以公共訪問的,且是靜態變數
class test{
public static $name="myname";
}
$testOne = new test();
echo test::$name;//輸出myname

但是如果將以上是public,改成private,將提示錯誤

⑦ php中static靜態類與static 靜態變數用法區別

static 是定義一個靜態對象或靜態變數,關於static 定義的變數或類方法有什麼特性我們看完本文章的相關實例後就見分曉了。
1. 創建對象$object = new Class(),然後使用」->」調用:$object->attribute/function,前提是該變數/方法可訪問。
2. 直接調用類方法/變數:class::attribute/function,無論是靜態/非靜態都可以。但是有前提條件:
A. 如果是變數,需要該變數可訪問。
B. 如果是方法,除了該方法可訪問外,還需要滿足:
b1) 如果是靜態方法,沒有特殊條件;
b2) 如果是非靜態方法,需要改方法中沒有使用$this,即沒有調用非靜態的變數/方法,當然,調用靜態的變數/方法沒有問題。
然後我們再看一下使用$object->… 和使用class::… 都有什麼區別:
1. 使用$object->… ,需要執行構造函數創建對象;
2. 使用class::… 調用靜態方法/變數,不需要執行構造函數創建對象;
3. 使用class::… 調用非靜態方法/變數,也不需要執行構造函數創建對象。
然後奇怪的地方就出來了,既然2和3都一樣,那靜態方法/變數存在還有什麼意義呢?
靜態 static
聲明類成員或方法為 static ,就可以不實例化類而直接訪問,不能通過一個對象來訪問其中的靜態成員(靜態方法除外)。靜態成員屬於類,不屬於任何對象實例,但類的對象實例都能共享。

熱點內容
喵解壓碼 發布:2024-09-22 01:23:05 瀏覽:878
fgo安卓怎麼登錄 發布:2024-09-22 01:18:41 瀏覽:910
資料庫字元轉換 發布:2024-09-22 01:18:06 瀏覽:603
密碼箱旁邊的鑰匙孔干什麼用的 發布:2024-09-22 01:10:48 瀏覽:887
沒有u盤怎麼引導安卓iso鏡像 發布:2024-09-22 01:09:41 瀏覽:747
安卓怎麼變成10系統 發布:2024-09-22 01:05:29 瀏覽:153
繪本解壓 發布:2024-09-22 01:04:04 瀏覽:806
為什麼電腦我的世界進不了伺服器 發布:2024-09-22 01:02:17 瀏覽:698
為什麼緩存不了柯南 發布:2024-09-22 01:01:34 瀏覽:819
蘋果手機怎麼修改無線網密碼 發布:2024-09-22 01:01:34 瀏覽:464