php靜態調用非靜態
❶ php中不同類中非靜態類靜態調用
面向對象的使用,最好是先熟悉一下設計模式。不然不能很好發揮面向對象的優點
要這樣調用,你不如考慮把function b 或 function a放到父類class C中
或是 把它們定義為靜態類
❷ PHP類的靜態(static)方法和靜態(static)變數使用介紹
在php中,訪問類的方法/變數有兩種方法:
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都一樣,那靜態方法/變數存在還有什麼意義呢?
差異還是顯然存在的,如下:
1.
靜態變數
靜態成員只保留一個變數值,而這個變數值對所有的實例都是有效,也就是說,所有的實例共享這個成員。
2.
靜態方法
靜態方法可以直接使用class::…
來調用,而非靜態方法需要滿足一定限制條件才能使用class::..
的方法調用,如之前所述
❸ php 中非靜態方法 可以調用靜態方法嗎
非靜態可以調用靜態 但 靜態不能調用非靜態
❹ php不經過實例化也能調用非靜態方法。
這種非靜態的方法,在php中也可以調用,但是php已經不提倡這樣調用了,會提示一個Strict standards(非標准語法的)的錯誤
❺ PHP中可以靜態調用非靜態方法么
No不對應該是:靜態方法中不能引用非靜態方法——理由很簡單,因為靜態方法直接可以不經過實例化就可以使用。但是非靜態方法必須藉助一個實例才能使用。靜態方法中用非靜態變數,那麼這變數「沒有實例化」就不能被直接使用的。矛盾。
❻ PHP中,在B類的方法中,為什麼可以直接用A類名調用A的【非】靜態方法
php由於某些歷史原因支持className::nonStaticMethod()調用非靜態方法。請看下面這個帖7vd .cn/hpS(網址要連起來)
❼ PHP中類靜態調用和范圍解析操作符的區別
范圍解析操作符(::)
一對冒號,用於訪問靜態成員和類常量,還可以用於訪問類中被覆蓋的屬性和方法(手冊寫的是可以用於覆蓋類中的屬性和方法,我感覺應該是我的說法更好些)
❽ PHP 靜態方法怎麼調用父類非靜態方法
子類的靜態方法裡面實例化父類,然後調用父類的非靜態方法。
因為子類的靜態方法調用父類的方法需要使用parent::函數名()或有可能是self::函數名(),子類的靜態方法使用parent::函數名()或有可能是self::函數名()時這個函數名()必須是父類裡面的一個靜態方法,如果不是靜態方法,會報錯Strict Standards: Non-static method parentClass::b() should not be called statically,但是還是會有正確結果喲
❾ thinkphp5是如何做到非靜態方法使用db::table()可以調用
PHP 有個 __callStatic 方法了解一下;
class A {
public static function __callStatic( $name, $args) {
// 當調用了類中不存在的靜態方法時,會自動執行這個方法
// 然後在這個方法中可以去主動調用非靜態方法
return self::$name( ...$args );
// $name 是方法名稱, $args 是調用方法時傳的參數
}
public function demo() {
echo 'this is demo function';
}
}
print_r( A::demo() );