本文目錄一覽:
- 1、php中get和set有什麼區別呀?
- 2、PHP中__get和__set的功能
- 3、eclipse php中get和set方法的生成設置,右擊source中有方法,但是調用不出來
- 4、php redis 怎麼讀取set
- 5、php怎麼獲得頭文件中的Set-Cookie
- 6、PHP __get和__set魔術方法在面向對象中的使用問題
php中get和set有什麼區別呀?
簡單的說一個是取值,一個是賦值。
,「__set()」和「__get()」這兩個方法,這兩個方法不是默認存在的,而是我們手工添加到類裡面去的,像構造方法(__construct())一樣, 類裡面添加了才會存在,可以按下面的方式來添加這兩個方法,當然也可以按個人的風格來添加:
//__get()方法用來獲取私有屬性
private function __get($property_name)
{
if(isset($this-$property_name))
{
return($this-$property_name);
}else
{
return(NULL);
}
}
//__set()方法用來設置私有屬性
private function __set($property_name, $value)
{
$this-$property_name = $value;
}
__get()方法:這個方法用來獲取私有成員屬性值的,有一個參數,參數傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,這個方法不用我們手工的去調用,因為我們也可以把這個方法做成私有的方法,是在直接獲取私有屬性的時候對象自動調用的。因為私有屬性已經被封裝上了,是不能直接獲取值的(比如:「echo $p1-name」這樣直接獲取是錯誤的),但是如果你在類裡面加上了這個方法,在使用「echo $p1-name」這樣的語句直接獲取值的時候就會自動調用__get($property_name)方法,將屬性name傳給參數$property_name,通過這個方法的內部執行,返回我們傳入的私有屬性的值。如果成員屬性不封裝成私有的,對象本身就不會去自動調用這個方法。
__set()方法:這個方法用來為私有成員屬性設置值的,有兩個參數,第一個參數為你要為設置值的屬性名,第二個參數是要給屬性設置的值,沒有返回值。這個方法同樣不用我們手工去調用,它也可以做成私有的,是在直接設置私有屬性值的時候自動調用的,同樣屬性私有的已經被封裝上
了,如果沒有__set()這個方法,是不允許的,比如:$this-name=『zhangsan』, 這樣會出錯,但是如果你在類裡面加上了__set($property_name, $value)這個方法,在直接給私有屬性賦值的時候,就會自動調用它,把屬性比如name傳給$property_name, 把要賦的值「zhangsan」傳給$value,通過這個方法的執行,達到賦值的目的。如果成員屬性不封裝成私有的,對象本身就不會去自動調用這個方法。為了不傳入非法的值,還可以在這個方法給做一下判斷。
PHP中__get和__set的功能
__get和__set類似於.net中的屬性訪問器,用於給類中的私有欄位賦值。但注意,一般這種方式只能給一個欄位賦值,當你的類中有多個欄位的時候,建議使用function
getProperty(){}和function
setProperty(value)的形式(類似於java)。
所以上述代碼你使用的方式完全錯誤:
class
Employee
{
$name
public
function
__get()
{
return
$name;//取得私有欄位的值
}
public
function
__set($propValue)
{
this-$name
=
$propValue;//給私有欄位賦值
}
}
eclipse php中get和set方法的生成設置,右擊source中有方法,但是調用不出來
你點擊window——prefernces–在上面輸入key 搜搜
在General–Keys 這個選項把默認鍵重置一下
php redis 怎麼讀取set
?php
$redis = new Redis();
//*********無序集合**********//
//添加set
$redis-
sadd(‘set1’ , ‘ab’);
$redis-sadd(‘set1’ , ‘cd’);
$redis-sadd(‘set1’ , ‘ef’);
//返回集合所有成員
var_dump($redis-smembers(‘set1’));
//返回集合隨機元素
var_dump($redis-srandmember(‘set1’));
//*********有序集合**********//
//添加zset
$redis-zadd(‘zset1’ , 1 , ‘ab’);
$redis-zadd(‘zset1’ , 2 , ‘cd’);
$redis-zadd(‘zset1’ , 3 , ‘ef’);
//返回指定區間的而元素
$redis-zrange(‘zset1’ , 0 ,1); //0和1之間的元素
//更多請查手冊
php怎麼獲得頭文件中的Set-Cookie
參考如下:
/*—–保存COOKIE—–*/
$url = ‘IP’; //url地址
$post = “id=userpwd=123456”; //POST數據
$ch = curl_init($url); //初始化
curl_setopt($ch,CURLOPT_HEADER,1); //將頭文件的信息作為數據流輸出
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //返回獲取的輸出文本流
curl_setopt($ch,CURLOPT_POSTFIELDS,$post); //發送POST數據
$content = curl_exec($ch); //執行curl並賦值給$content
preg_match(‘/Set-Cookie:(.*);/iU’,$content,$str); //正則匹配
$cookie = $str[1]; //獲得COOKIE(SESSIONID)
curl_close($ch); //關閉curl
/*—–使用COOKIE—–*/
curl_setopt($ch,CURLOPT_COOKIE,$cookie);
PHP __get和__set魔術方法在面向對象中的使用問題
php的面向對象思想編程中聲明方法有三種不同的許可權:public protect private。
public:許可權是最大的,可以內部調用,實例調用等。
protected: 受保護類型,用於本類和繼承類調用。
private: 私有類型,只有在本類中使用。
這些許可權同樣可以應用在變數聲明中。
__set __get 都是php的魔術方法,主要是為了用來改變類的私有屬性用的。
你覺得麻煩可以將private私有的變數改為公共public變數,這個要看需求和個人對面向對象的思考。
追問 : 我想知道的是(用private封裝然後用__set或者__get )和(public設置類的屬性)有什麼不同.都可以取值賦值.
追答 : 沒什麼不同的,實現的效果都一樣,只是private是為了限制訪問入口少一些,或者之前用private時沒有考慮到有如今的調用情況,所以在加了set或get。 比較public是所有人都可以訪問,private是內部人可以訪問,從許可權來看,private會安全一些。
原創文章,作者:UDQU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133160.html