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++;
}
?>
❷ php 類中 通過成員方法訪問成員變數有什麼好處,我知道是爭對於安全性,但不能解釋怎麼個安全法,
將成員變數私有化,並使用公有介面去訪問,是為了保證數據的正確性,保證對象能夠正常工作。
對象有兩個作用,一是保存數據,二是擁有操作數據的方法。對象就是一個黑盒子,隱藏數據操作細節,而我們可以輕松地處理和取得數據,不需要了解內部的處理過程。對象的數據只由它自己去處理,沒有外部干涉,這樣的數據是安全的可信任的。
如果我們能夠任意改變對象的數據,就是對其密封性的破壞。在"外力"的作用下,對象擁有的數據類型和值發生改變,很可能會影響其內部的處理過程,嚴重時會發生錯誤。
示例一:
classDivision{
public$a;
public$b;
publicfunction__construct($a,$b){
if($b==0)
thrownewException('divisionbyzero!');
$this->a=$a;
$this->b=$b;
}
publicfunctionrun(){return$this->a/$this->b;}
}
$a=newDivision(5,5);
$a->b=0;
$a->run();//出錯了,因為除數被設為了0
在上例中,雖然構造函數對傳入的變數經行了過濾,但由於變數是公有的,用戶「不小心」更改了$b的值,造成了程序異常。
使用函數來訪問變數,可以對變數經行預處理,防止用戶傳入了不合法的值。這就像是在對象的前面加上了一道「防火牆」,保證程序正常地工作。
示例二:
classA{
publicfunctioncall(){echo'A->call()iscalling!';}
}
classB{
private$_a;
publicfunctionsetA(A$a){
if(!is_callable($a,'call'))
thrownewException('A->call()isnotcallable!');
$this->_a=$a;
}
publicfunctioncall(){
if($this->_a)
$this->_a->call();
}
}
在上例中,屬性$a是私有的,只能通過setA()方法來設置。setA()方法中使用了PHP的「類型提示」功能,這就要求傳入的參數必須是A的實例。在函數中的代碼又檢查了$a對象是否含有可以調用的$a->call()方法,如果失敗就會拋出異常。從而保證了傳入變數的正確性。
希望能幫到您~也希望能夠及時採納~
❸ php怎麼在 當前類 中獲取 調用類 中的變數
把walk類的引用傳遞給foot類
❹ php怎麼訪問類的方法中的變數!!
方法/函數中的變數是不能直接訪問的,不論是PHP還是其他語言。
相關知識:
變數具有自己的作用域,一般來說只有全局變數可以在任意位置訪問,否則只能在其作用域內訪問。已以下函數為例
functionfoo(){
$param='Hello';
}
變數$param是在函數內聲明的,當你未調用函數foo時,變數$param尚未存在,而foo函數執行結束後$param變數的生命周期結束,也隨之被銷毀,所以對於外部代碼來說,$param總是不可見的。
❺ 高分求解,PHP 怎麼用變數訪問靜態屬性
<?php
classTest
{
static$test='123456';
}
$str='test';
echoTest::$$str;
❻ php的類靜態變數並發調用時會不會出現訪問沖突
靜態方法就是隸屬於一個類的函數,為什麼希望讓這個函數枯判隸屬於類,一般有兩種情況:1、函數的名字太常規,以慎肢至於可能與其它獨立函數產生命名沖突,則你把它作為類的靜態方法,可以變相起到封入命名空間的效果。比如你想為某個類定義一個特別版的setcookie();2、當一個函數希望訪問某個類的私有成員變數時(private 或 protected),顯然在通常情況下,它作為外部獨立函數是訪問不到的。把它定義為那個類的靜態方法寬敗世,就可以作為類的成員函數輕松訪問那些私有成員變數了。另外對 6 樓做一個補充:靜態成員方法也有訪問級別,如果定義為了 private 或 protected,則外部是無法作為普通函數直接調用的。
❼ php類中的函數能否調用類中成員變數
php類中的函數能調用類中成員變數。即使沒有具體對象,也能調用類的靜態成員函數和成員變數。
❽ 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中同一個類中怎麼訪問不同方法的變數,我覺得這要看你訪問的變數的作用范圍,如果這個變數的作用范圍是類,那麼只要是同一個類里的方法,都可以訪問。
如果這個變數的作用范圍只在類的方法里,則可以採取的辦法:
1. 修改或定義變數的作用域為全局。
2. 拆分方法,將變數的結果作為一個結果返回。
❿ PHP:對象->變數名可以訪問類中的變數,如果訪問的變數被private修飾,怎麼不報錯呢
在PHP5中,「__set()」和「__get()」這兩個方法,專門為私有屬性設置值和獲取值的方法,如果是public屬性的話,不用這兩個函數可以訪問屬性;
這兩個魔法函數可以這么理解,就是外或老面訪問$oo->type='DIY';的type只是一個名字,傳遞到類,類裡面的一個方法給類的私有屬性賦值,而不是在類外面直接賦值,傳遞到類裡面的方法進行賦值;
這兩個方法不是默認存在的,而是我們隱坦手工添加到類裡面去的,才能對類添加屬性和獲取灶團桐屬性。