php訪問類的靜態變數
A. php中static 靜態變數和普通變數的區別
php中static 靜態變數和普通變數的區別:
在變數的前面加上static 就構成了靜態變數(static 變數)。
static變數和普通變數的區別在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。 而靜態全局變數則限制了其作用域, 即只在定義該變數的源文件內有效, 在同一源程序的其它源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。
B. PHP如何在一個類中引用另一個類中的變數.
可能你理解上有問題。不太明白你的意思,所以我分開解釋。如果是在定義的時候就引用,下面兩種。1.兩個都是類,即類的靜態變數(static修飾),一個類自然可以引用靜態變數,因為靜態變數是在程序進入main函數前就已經初始化完了。2.一個類A一個實例B(A類產生的對象),A當然無法在類的內部引用(即定義中),因為實例是在程序中動態分配的內存,類A必然先於實例B存在,所以A並不能知道B的存在。B可以引用類A的靜態變數,理由同1。如果是在運行時才引用。你只要在類A里寫一個函數,例如function(B b),這樣你要調用的時候通過這個函數做介面就行了,至於b你要做什麼,就是你的事了。
C. php中怎麼調用方法中的靜態變數
static
變數是php中的變數作用范圍的一個重要特性
靜態變數僅在局部函數域中存在且只被初始化一次,當程序執行離開此作用域時,其值不會消失,會使用上次執行的結果
一個普通的變數,如
$message
在它所在的函數執行完之後就被釋放了
即第二個function執行10次,每次執行完後,$message變數被釋放,所以每次都是1
變數前加了static後,該變數在它所在的函數執行完後不會被釋放
即第一個function每次被執行後,static
$message沒有被釋放,它將被繼續累加
D. php的類靜態變數並發調用時會不會出現訪問沖突
靜態方法就是隸屬於一個類的函數,為什麼希望讓這個函數枯判隸屬於類,一般有兩種情況:1、函數的名字太常規,以慎肢至於可能與其它獨立函數產生命名沖突,則你把它作為類的靜態方法,可以變相起到封入命名空間的效果。比如你想為某個類定義一個特別版的setcookie();2、當一個函數希望訪問某個類的私有成員變數時(private 或 protected),顯然在通常情況下,它作為外部獨立函數是訪問不到的。把它定義為那個類的靜態方法寬敗世,就可以作為類的成員函數輕松訪問那些私有成員變數了。另外對 6 樓做一個補充:靜態成員方法也有訪問級別,如果定義為了 private 或 protected,則外部是無法作為普通函數直接調用的。
E. PHP 中this為什麼不能引用靜態變數
static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱為「類屬性」或「胡察類方法」。
2. 靜態變者行量的調用方法:
只能使用slef::或者類名::訪問,不能使用$this訪問;反之,類的成員變數未聲明為const及static時,只能使用$this訪問,褲嫌茄不能用::訪問。
F. 高分求解,PHP 怎麼用變數訪問靜態屬性
<?php
classTest
{
static$test='123456';
}
$str='test';
echoTest::$$str;
G. 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父類調用子類靜態成員的方法,在子類重載父類的方法還是相當不錯的 ,當時聽朋友提起這個時,就異常激動。父類我們也叫做基類,或者底層類。一般都是最先設計,子類就是根據各個需要來設計,所以我們子類修改的可能性比較大,操作靈活性也比較大。
H. php中為什麼靜態變數不用實例化
你沒學過C語帶渣殲言和C++嗎???? 靜態變數只能聲明一次,在你連接一個類時,所有的靜態變數和靜態函數都已經定義並啟用了,而且不能再動態生成新變數和函數,所有實例化的對象公用一個靜態變數和靜態函數,靜態類也是如此,靜態類是不能實例化的,但能直接用。。。。
c++語言里static標記的函數和變數,都不能進行第二次申請內存,只有動態的有auto標記的才可以執行一次語句申請一次內存,即實例化(這個關鍵字是默認的通常梁手不寫,沒有就代表是auto),所有語言的靜態和動態意思都是一樣的,靜態變數或函數都有特殊的靜態標識符,通常都是static ,PHP也是一樣,所有編譯器和解釋器一但看到這個標志,就不會第二次執行該蠢沖聲明語句,所以也沒法實例化,可以直接用,但用的都是同一個。。。
I. PHP請問在static的function中如何訪問變數
靜態方法只能訪問其他的靜態方法或屬性,比如
classA{
privatestatic$url;
($url){
self::$url=$url;
}
(){
returnself::$url;
}
}
//或者在你的靜態方法中獲得實例,當然這樣的悔鎮話可能達不到你預期的效果,推薦你還是使用上面的方法。
classA{
private$url='demo';
publicstaticfunctiongetUrl(){
陪前磨蘆斗$obj=newself();
return$obj->url;
}
}
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++;
}
?>