php靜態方法的調用方法
A. php 靜態方法怎麼調用父類非靜態方法
子類的靜態方法裡面實例化父類,然後調用父類的非靜態方法。
因為子類的靜態方法調用父類的方法需要使用parent::函數名()或有可能是self::函數名(),子類的靜態方法使用parent::函數名()或有可能是self::函數名()時這個函數名()必須是父類裡面的一個靜態方法,如果不是靜態方法,會報錯Strict Standards: Non-static method parentClass::b() should not be called statically,但是還是會有正確結果喲
B. 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父類調用子類靜態成員的方法,在子類重載父類的方法還是相當不錯的 ,當時聽朋友提起這個時,就異常激動。父類我們也叫做基類,或者底層類。一般都是最先設計,子類就是根據各個需要來設計,所以我們子類修改的可能性比較大,操作靈活性也比較大。
C. 如何使用PHP靜態方法與屬性
class Fruit {
public static $category = "I'm fruit";
static function find($class)
{
$vars = get_class_vars($class) ;
echo $vars['category'] ;
}
}
$category為靜態屬性
$find為靜態方法嫌者李殲
調芹擾薯用:
Fruit::$category;
Fruit::find();
D. 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決定的!
其實這兩個類的關系應該屬於"雙向關聯".
E. php類中 靜態函數怎麼調用普通函數
實例化類再調用 $_a = new 類; $_a->普通函數;
F. php 靜態方法為什麼不能調用this
static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱為「類屬性」或「類方法」。
2. 靜態變數的調用方法:只能使用slef:: 或者 類名:: 訪問,不能使用$this訪問;反之,類的成員變數未聲明為const及static時,只能使用$this訪問,不能用::訪問。
G. php中怎麼調用方法中的靜態變數
static
變數是php中的變數作用范圍的一個重要特性
靜態變數僅在局部函數域中存在且只被初始化一次,當程序執行離開此作用域時,其值不會消失,會使用上次執行的結果
一個普通的變數,如
$message
在它所在的函數執行完之後就被釋放了
即第二個function執行10次,每次執行完後,$message變數被釋放,所以每次都是1
變數前加了static後,該變數在它所在的函數執行完後不會被釋放
即第一個function每次被執行後,static
$message沒有被釋放,它將被繼續累加
H. php中一個類裡面有兩個靜態的方法A和B的調用。
假設類名是demo 你可以嘗試 在方法B中 使用 demo::A();
I. PHP如何動態調用靜態方法 - 技術問答
[php]function example($className){? ???if (\局陵肆桐轎"Database\" == $className) {? ?? ?? ???Database::staticFunc();? ???}}[/汪滾php]
J. 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++;
}
?>