① 在php中,將一個對象賦給了一個屬性,那調這個屬性的對象是那個,
你將一個屬性的值定義成一個對象,那麼你如果想調用含有這個對象的屬性,那麼你必須要實例化含有這個對象屬性的對象
class A{} class B{ function __construct(){$this->a=new A()} } ,必須new B()
② 在php中如何設置類的屬性,如何調用類的方法
PHP訪問類的屬性、方法使用箭頭語法(->)。這里我給你一個例子供你參考:
<?php
classMyClass{//定義MyClass類
public$name;//定義了一個公有屬性
protected$_age;//定義了一個保護屬性
private$_email;//定義了一個私有屬性
publicfunctionmy_method(){//定義my_method方法
}
protectedfunction_my_method2(){//定義_my_method2方法
}
}
$obj=newMyClass;//實例化
$obj->name='noname';//設置name屬性
$obj->_age=12;//這是錯誤的,不能設置保護屬性
$obj->address='KingStreet.'//設置一個未聲明的屬性是允許的,效果和公有屬性類似,但未賦值前不能使用。
$obj->my_method()//調用公有方法
$obj->_my_method2();//這是錯誤的,不能調用保護方法
你需要理解繼承、公有、保護和私有的概念。
繼承:子類繼承父類的公有、保護屬性和方法。
公有:類的實例可以訪問的屬性和方法。
保護:只能在類的內部及其子類內部訪問的屬性和方法。
私有:只能在類的內部訪問的屬性和方法。
這是個很基礎的問題,建議你多看書。
③ php面向對象 靜態屬性為什麼能用對象訪問
Static關鍵字
聲明類成員或方法為static,就可以不實例化類而直接訪問。不能通過一個對象來訪問其中的靜態成員(靜態方法除外)。
由於靜態方法不需要通過對象即可調用,所以偽變數$this在靜態方法中不可用。
靜態屬性不可以由對象通過->操作符來訪問。
用::方式調用一個非靜態方法會導致一個E_STRICT級別的錯誤。
就像其它所有的PHP靜態變數一樣,靜態屬性只能被初始化為一個字元值或一個常量,不能使用表達式。 所以你可以把靜態屬性初始化為整型或數組,但不能指向另一個變數或函數返回值,也不能指向一個對象。
--------以上為php手冊 原文
④ PHP中,怎麼在成員函數當中調用自己的成員屬性除了靜態調用之外還有別的方法嗎
和靜態數據成員一樣,靜態成員函數是類的一部分,而不是對象的一部分。如果要在類外調用公用的靜態成員函數,要用類名和域運算符「∷」。
如 Box∷volume( ); 實際上也允許通過對象名調用靜態成員函數,如 a.volume( ); 但這並不意味著此函數是屬於對象a的,而只是用a的類型而已。 靜態成員函數的作用是為了能處理靜態數據成員。 可以說,靜態成員函數與非靜態成員函數的根本區別是:非靜態成員函數有this指針,靜態成員函數並不屬於某一對象,它與任何對象都無關,靜態成員函數沒有this指針。
由此決定了靜態成員函數不能訪問本類中的非靜態成員。 在C++程序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。假如在一個靜態成員函數中有以下語句: cout<<height<<endl; //若height已聲明為static,則引用本類中的靜態成員,合法 cout<<width<<endl; //若width是非靜態數據成員,不合法。但是,並不是絕對不能引用本類中的非靜態成員,只是不能進行默認訪問,因為無法知道應該去找哪個對象。如果一定要引用本類的非靜態成員,應該加對象名和成員運算符「.」。如 cout<<a.width<<endl; //引用本類對象a中的非靜態成員
⑤ PHP在類外如何調用類里的成員屬性
在類載入的時候就會分配內存,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的對象,所以只有在類的對象產生(創建類的實例)時才會分配內存,然後通過類的對象(實例)去訪問。
在一個類的靜態成員中去訪問其非靜態成員之所以會出錯是因為在類的非靜態成員不存在的時候類的靜態成員就已經存在了,訪問一個內存中不存在的東西當然會出錯:class CA{private:int a; //非靜態成員,創建類的實例時分配內存,類的不同實例對應不同的內存區域
⑥ php怎麼獲取對象的屬性名
使用 get_object_vars() 方法
缺點: 只能顯示 public 的
//只顯示public的
var_mp(get_object_vars($test));
處理: 在類中定義一個public 的方法, 外部對象調用即可顯示所有屬性(除了靜態屬性之外)
function showAllProperties2(){
var_mp(get_object_vars($this));
}
⑦ PHP中類的屬性在類中調用只必須使用$this嗎
在 sd()里使用變數a只能用$this->a嗎?
是的
類中的echo $b;為什麼會報錯呢?
類中只能有成員變數和成員函數, 這不是變數也不是函數,這是一個執行語句,所以當然會報錯。
⑧ php 對對象的屬性怎麼操作
用箭頭操作
classAction{
private$name=null;
functiongetName(){
return$this->name;
}
functionsetName($name){
$this->name=$name;
}
}
⑨ PHP子類怎麼調用父類的屬性
<?php
class Perpon {
private $Pid;
private $Pname;
private $Page;
private $Psex;
private $Pbirthday;
public function __construct($Pid,$Pname,$Page,$Psex,$Pbirthday)//PHP5中間的構造函數
{ $this->Pid=$Pid;
$this->Pname=$Pname;
$this->Page=$Page;
$this->Pbirthday=$Pbirthday;
echo "創建了一個對象"."<br>";
}
public function __set($name,$value) {
$this->$name=$value;
}
function show(){
echo ("我的姓名:$this->Pname,我的年齡:$this->Page,我的性別是:$this->Psex,我的生日是$this->Pbirthday <br>"); }
public function __get($name) { return $name; }
public function dining() { echo "$this->Pname 正在吃飯 <br>"; }
public function shuohua() { echo "$this->Pname喜歡說話 <br>"; }
public function gaosu() { echo "我的姓名叫做$this->Pname <br>"; }
public function IT() { echo $this->Pname."的工作是IT行業 <br>"; }
}
class Student extends Perpon {
public function __construct()//PHP5中間的構造函數
{ echo "子類的構造函數"; }
public function IT()//PHP5中間的構造函數
{ parent::IT();
echo $this->Pname."的工作是學生<br>";
}
}
$perpon=new Perpon('1','zhangsan','18','男','9月23'); $perpon->show(); $perpon->dining(); $perpon->shuohua(); $perpon->gaosu(); $perpon->IT();
echo "<hr>";
$student=new Student(); $student->IT();?>
調不到的原因是:
private $Pname;
記住:private只能自己調用,其他是不行的,這一點你自己記住即可。
⑩ php 父類為什麼能調用子類的屬性
在集成的時候父類的屬性會被保護。如果想要調用父類的屬性必須使用父類對象super去調用,不然訪問不了。你在子類中沒有X的屬性,所以在調用時使用this或super調用屬性,這個時候不論是this還是super調用的都是父類的X屬性。