phpset方法
A. 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會安全一些。
B. 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,通過這個方法的執行,達到賦值的目的。如果成員屬性不封裝成私有的,對象本身就不會去自動調用這個方法。為了不傳入非法的值,還可以在這個方法給做一下判斷。
C. 詳解php的魔術方法__get()和__set()使用介紹
先看看php官方文檔的解釋:
__set()
is
run
when
writing
data
to
inaccessible
properties.
__get()
is
utilized
for
reading
data
from
inaccessible
properties.
究竟用中文怎麼翻譯呢?
inaccessible
:n.
難達到;難接近;無法理解。
有代碼有真相:
復制代碼
代碼如下:
<?php
error_reporting(E_ALL);
class
stu{
private
$a;
private
$b
=
0;
public
$c;
public
$d
=
0;
//這里的
private
可以用
protected
public
替代
private
function
__get($name)
{
return
123;
}
//這里的
private
也可以用
protected
public
替代
private
function
__set($name,
$value)
{
echo
"This
is
set
function";
}
}
$s
=
new
stu();
var_mp($s->a);
//output:
123
var_mp($s->b);
//output:
123
var_mp($s->c);
//output:
null
var_mp($s->d);
//output:
0
var_mp($s->e);
//output:
123
$s->a
=
3;
//output:
This
is
set
function
$s->c
=
3;
//no
output
$s->f
=
3;
//output:
This
is
set
function
?>
結果分析:
如果沒有__get方法,執行
var_mp($s->a)
var_mp($s->b)
會有致命的錯誤
如果沒有__get方法,執行
var_mp($s->e)
會有一個notice,提示沒有定義屬性
$e
總結:
1.
從一個難以訪問的屬性讀取數據的時候
__get()
方法被調用
2.
向一個難以訪問的屬性賦值的時候
__set()
方法被調用
3.
難以訪問包括:(1)私有屬性,(2)沒有初始化的屬性
4.
__isset()
__unset()
也類似
D. PHP類中的__set()和__get()方法用在什麼地方可以用例子說明一下么...
在PHP類中的__set()和__get()方法是針對protect或private變數的,不針對public變數。因為對protect或 private變數在類外不可直接訪問,可在類中定義一個public方法來訪問這些變數,而__set()和__get()方法相當於這些public 方法,但是在類外的操作時表面上相當於直接訪問,但本質上還是通過__set()和__get()方法體內的判斷與操作。對於一個類中有多個 protect或private變數,用一對__set()和__get()方法就可操作,編譯器將可自己區別用的是哪個變數(由在類外操作時具體的變數名決定,如$object->$name="sss").
如下:
<?php
class test
{
var $name;
var $age;
function __set($name,$value)
{
$this->$name = $value ;
}
function __get($name)
{
return $this->$name;
}
}
$a = new test();
$a -> name = 5;
echo $a->name . "<br/>" ;
$a -> age = "12";
echo $a->age;
?>
輸出結果是,5 和 12。
//php類中靜態變數可用一般方法或靜態方法來操作,但如果在類中用靜態方法,則靜態方法中不可有非靜態的變數。
E. php中__set和__get要怎麼理解
沒什麼繞不過彎的東西啊,就是表面上定義的那樣,php面向對象裡面的取值和賦值,沒必要把簡單的問題復雜化
F. 如何學習PHP set
set_include_path函數理解1
set_include_path函數的作用為設置 include_path 配置選項
1.include_path配置選項如何理解;
2.配置選項是否給定了值;
set_include_path函數理解2
說明
string set_include_path ( string $new_include_path )
為當前腳本設置 include_path 運行時的配置選項。
1.set_include_path函數作用的返回值是否為字元串類型;
2.set_include_path設置當前腳本的配置項如何理解;
3.若成功時返回舊的 include_path 或者在失敗時返回 FALSE。
set_include_path函數理解3
<?php// 自 PHP 4.3.0 起可用
echo set_include_path('/usr1/lib/pear');// 在所有版本的 PHP 中均可用 echo ini_set('include_path', '/usr1/lib/pear');
?>
輸出結果為:.;C:\php5\pear/usr1/lib/pear
<?php
$path1 = '/usr1/lib/pear';//$path1如何理解;
set_include_path(get_include_path() . PATH_SEPARATOR . $path1);//get_include_path()是否獲取到了include_path的配置選項;
?>
輸出結果為:.;C:\php5\pear
G. php 中 get 與 set 的 使用,是不是兩個函數必須一塊使用才不錯,分開使用是不是出錯
get set 方法 簡稱為 存儲器
因為類中的變數 聲明為 私有的,在類外 是無法調用的,這是 set就起到了賦值的作用
而 get 則起到了 取值的作用。。 如果變數聲明為 共有的(public) 就用不到get 和set 方法了
用存儲器 賦值 取值 的好處 最明顯的 就是 數據驗證
例如: $name 必須為 字母或者中文,不能是 數字
你就可以在set方法里 加上驗證判斷。符合再賦值,否則拋出異常。
set 和get 並不是要一起用,取決於你對數據的保護,例如 $name你定義一個值後,不想被惡意程序,或者黑客改變,你就可以只定義get方法,而不定義set方法,這樣 $name 就變為了一個只讀屬性。無法更改其值。同理 可以只定義set 而不定義get。。
因此 兩個函數不必要一塊使用,分開使用也不會出錯
H. php類的封裝中的函數__set($name,$value) 和__get()的用法
php自動分配的,__set和__get都是php的魔術方法,
當你運行這個
$pc1->name="ssss";
的時候,就自動調用了__set方法。
一般向一個外部不能訪問的屬性賦值的時候 __set() 方法被調用
I. php __set()和__get()的具體用法,舉例說明,謝~
__set()與__get()是兩個魔術方法,用於設置和輸出對象里的私有成員屬性的,存在於類中,詳細使用方法
class main{
private $name = "李三";
private function __set($_name,$_val){
$this->$_name=$_val;//當外面直接設置私有成員屬性$name的時候被自動調用
}
private function __get($_name){
retrun $this->$_name;//當外面直接使用私有成員屬性$name的時候被自動調用
}
}
$my = new main;
$my->name="李四";//此時,就調用了__set()魔術方法
echo $my->name;//此時,就調用__get()魔術方法
謝謝採納!!!
J. 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;//給私有欄位賦值
}
}